Skip to content

Monitoring with Netdata

Installation

One-Line Install

bash <(curl -Ss https://my-netdata.io/kickstart.sh)

Docker Install

docker-compose.yml
services:
  netdata:
    image: netdata/netdata:latest
    container_name: netdata
    hostname: server-name
    restart: unless-stopped
    ports:
      - "127.0.0.1:19999:19999"
    cap_add:
      - SYS_PTRACE
    security_opt:
      - apparmor:unconfined
    volumes:
      - netdataconfig:/etc/netdata
      - netdatalib:/var/lib/netdata
      - netdatacache:/var/cache/netdata
      - /etc/passwd:/host/etc/passwd:ro
      - /etc/group:/host/etc/group:ro
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /etc/os-release:/host/etc/os-release:ro

volumes:
  netdataconfig:
  netdatalib:
  netdatacache:

Access Dashboard

http://<server-ip>:19999

Nginx Reverse Proxy

server {
    listen 443 ssl http2;
    server_name netdata.example.com;

    location / {
        proxy_pass http://127.0.0.1:19999;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Basic Auth

# Install password tool
apt install -y apache2-utils

# Create user
htpasswd -c /etc/netdata/netdata-access admin

# Restart Netdata
systemctl restart netdata

Enable Plugins

# Edit netdata config
/etc/netdata/netdata.conf

# Enable specific plugins
[plugin:proc]
    /proc/loadavg = yes
    /proc/stat = yes
    /proc/meminfo = yes
    /proc/net/dev = yes
    /proc/diskstats = yes

Alarms & Notifications

Configure Notifications

Edit /etc/netdata/health_alarm_notify.conf:

# Email
SEND_EMAIL="YES"
DEFAULT_RECIPIENT_EMAIL="admin@example.com"

# Slack
SEND_SLACK="YES"
SLACK_WEBHOOK_URL="https://hooks.slack.com/services/xxx/yyy/zzz"
DEFAULT_RECIPIENT_SLACK="#alerts"

# Discord
SEND_DISCORD="YES"
DISCORD_WEBHOOK_URL="https://discord.com/api/webhooks/xxx/yyy"
DEFAULT_RECIPIENT_DISCORD="#alerts"

Custom Alarms

Create /etc/netdata/health.d/custom.conf:

# CPU > 80% for 5 minutes
template: cpu_usage
    on: system.cpu
    lookup: average -5m percentage
    units: %
    every: 30s
    warn: $this > 80
    crit: $this > 95
    info: CPU usage
    to: sysadmin

# Disk space > 85%
template: disk_space
    on: disk.space
    lookup: used -10s absolute
    units: GB
    every: 30s
    warn: $this > 85
    crit: $this > 95
    info: Disk space usage

Monitored Metrics

Category Metrics
CPU Usage per core, frequency, temperature
Memory RAM, swap, available, cached
Disk Usage, IOPS, latency, throughput
Network Bandwidth, packets, errors, drops
Processes Running, blocked, zombies
Services Nginx, MySQL, Redis, PostgreSQL
Containers Docker, individual containers

Command Line

# Show real-time metrics
netdata -W set "httpd" status monitoring

# Health checks
netdatacli check

# View alarms
netdatacli show-alarms all

Backup Config

tar czf netdata-config-backup.tar.gz /etc/netdata/

Update

# Native install
bash <(curl -Ss https://my-netdata.io/kickstart.sh) --no-updates

# Docker
docker compose pull netdata
docker compose up -d netdata

Verification

  • Dashboard accessible at http://<ip>:19999
  • CPU, memory, disk, network metrics visible
  • Alarms configured for critical metrics
  • Notifications working (Slack/Email)
  • Nginx proxy with basic auth
  • Netdata auto-starts on boot