Netdata Setup: Real-Time System Monitoring in Minutes
Netdata gives you per-second system metrics, automatic anomaly detection, and 2,000+ pre-built charts, all without writing a single config file.
This post contains affiliate links. If you buy through them, I earn a small commission at no extra cost to you.
Prometheus and Grafana are excellent for long-term metrics and custom dashboards. But the setup takes time, and sometimes you just want to know right now what’s happening on your server. Netdata answers that question in about 5 minutes.
It installs as a single agent, auto-detects virtually everything running on your system, and starts displaying per-second metrics immediately — no configuration required for the basics.
What Makes Netdata Different
Most monitoring tools operate at 15-60 second intervals. Netdata collects data every second. That’s the difference between seeing a CPU spike as a blip on a graph and seeing exactly what caused it, which container triggered it, and when it resolved.
Auto-detection means Netdata automatically finds and monitors:
- CPU, memory, disk, network interfaces
- Docker containers and resource usage per container
- Running databases (MySQL, PostgreSQL, Redis, MongoDB)
- Web servers (nginx, Apache, Caddy)
- Systemd services
- Network connections
For a homelab, this usually means you get full coverage of your stack without touching a config file.
Install with Docker Compose
version: "3.8"
services:
netdata:
image: netdata/netdata:latest
container_name: netdata
pid: host
network_mode: host
restart: unless-stopped
cap_add:
- SYS_PTRACE
- SYS_ADMIN
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
- /etc/localtime:/etc/localtime:ro
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /etc/os-release:/host/etc/os-release:ro
- /var/log:/host/var/log:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- NETDATA_CLAIM_TOKEN=
- NETDATA_CLAIM_URL=https://app.netdata.cloud
- NETDATA_CLAIM_ROOMS=
volumes:
netdataconfig:
netdatalib:
netdatacache:
Note the network_mode: host — Netdata needs host networking to monitor all network interfaces accurately. This also means it doesn’t need a separate port mapping; it runs on port 19999 on the host.
Leave NETDATA_CLAIM_TOKEN empty to run fully local. You can optionally claim your node to Netdata Cloud (free account) for remote access and multi-node views.
Start it:
docker compose up -d
Access at http://your-server-ip:19999. The dashboard loads immediately with live data.
Alternative: Direct Installation
If you prefer installing directly on the host (without Docker):
wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh
sh /tmp/netdata-kickstart.sh --dont-wait
This installs Netdata as a systemd service. Some people prefer this for lower overhead, since Dockerized Netdata has additional container layers.
Navigating the Dashboard
The left sidebar organizes metrics by category:
- System Overview — CPU, load, memory, swap, disk I/O, network
- Applications — per-process CPU and memory (which process is using what)
- Containers — per-container resource usage for Docker containers
- Disks — I/O per disk, throughput, latency
- Network — per-interface traffic, packets, errors
- Users — resource usage broken down by Linux user
Each chart is interactive — hover to see exact values, drag to zoom, click to pin a time range.
Setting Up Alerts
Netdata ships with hundreds of pre-configured alerts. They’re off by default for notifications — configure where alerts go in netdata.conf.
Access the config:
docker exec -it netdata netdata.conf -c > /etc/netdata/netdata.conf
Or edit via Docker exec:
docker exec -it netdata /bin/bash
cd /etc/netdata
Configure email alerts by editing /etc/netdata/health_alarm_notify.conf:
SEND_EMAIL="YES"
SEND_SLACK="YES"
DEFAULT_RECIPIENT_EMAIL="[email protected]"
SEND_EMAIL="YES"
EMAIL_SENDER="[email protected]"
# SMTP settings
SMTP_SERVER="smtp.gmail.com"
SMTP_PORT="587"
SMTP_TLS="YES"
SMTP_USER="[email protected]"
SMTP_PASS="your-app-password"
Configure Slack or Discord in the same file:
SLACK_WEBHOOK_URL="https://hooks.slack.com/services/..."
DEFAULT_RECIPIENT_SLACK="#homelab-alerts"
For Discord, Netdata can send to a Discord webhook URL via the Slack integration (Discord supports Slack-compatible webhooks).
Custom Alert Rules
Netdata’s default alerts are sensible but you may want to adjust thresholds. Alert rules live in /etc/netdata/health.d/.
To add a custom alert — for example, warning when a specific container uses too much CPU:
Create /etc/netdata/health.d/custom.conf:
alarm: my_container_cpu
on: cgroup_my_container.cpu_limit
lookup: average -1m unaligned
units: %
every: 10s
warn: $this > 80
crit: $this > 95
info: CPU usage for my_container is high
Restart Netdata to apply: docker restart netdata.
Multi-Node Monitoring with Netdata Cloud
Netdata Cloud’s free tier lets you add multiple nodes and view them from a single dashboard. Create an account at netdata.cloud, create a Space, then claim your node:
Get your claim token from the Cloud UI, then:
docker exec -it netdata netdata-claim.sh \
-token=YOUR_TOKEN \
-rooms=YOUR_ROOM_ID \
-url=https://app.netdata.cloud
All your nodes show up in a unified view with cross-node comparisons.
Retention and Storage
By default, Netdata stores per-second data for the last hour, per-minute data for the last day, and hourly data for longer. This is stored in the netdatalib volume.
For a typical homelab, this uses 200-500MB of disk. You can adjust retention in netdata.conf under [db].
Netdata vs. Prometheus + Grafana
These tools solve overlapping but different problems:
| Netdata | Prometheus + Grafana | |
|---|---|---|
| Setup time | 5 minutes | 30-60 minutes |
| Resolution | Per second | 15-60 seconds |
| Auto-detection | Yes | Requires exporters |
| Long-term storage | Limited | Configurable |
| Custom dashboards | Limited | Extensive |
| Alert flexibility | Good | Excellent |
Many homelab users run both: Netdata for real-time troubleshooting and immediate visibility, Prometheus + Grafana for trend analysis and custom dashboards. The memory footprint for Netdata is around 100-200MB — reasonable to run alongside a full monitoring stack.
A 16GB RAM mini PC handles both Netdata and Prometheus + Grafana alongside a full Docker stack without resource pressure.