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. You’ll need Docker on the host first, which Docker Compose basics covers.
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.
If you haven’t set up a mail path from your homelab yet, homelab email notifications walks through an SMTP relay that every service on the box can share, which saves repeating the credentials below in each tool.
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="your@email.com"
SEND_EMAIL="YES"
EMAIL_SENDER="netdata@yourdomain.com"
# SMTP settings
SMTP_SERVER="smtp.gmail.com"
SMTP_PORT="587"
SMTP_TLS="YES"
SMTP_USER="your@gmail.com"
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.
Neither one replaces uptime checking. Netdata tells you a service is struggling; it doesn’t tell you a service is down and page you about it. Uptime Kuma fills that gap, and advanced alerting covers routing those notifications somewhere you’ll actually see them.
A 16GB RAM mini PC handles both Netdata and Prometheus + Grafana alongside a full Docker stack without resource pressure.