How to Monitor Server Resources with Netdata (Live Graphs of Everything)

Uptime Kuma (tutorial 35) tells you whether things are up. Netdata tells you how the server is doing: every CPU core, memory, disk throughput, network traffic, per-container usage, drive temperatures, even the apt and systemd state — updated every second, with hundreds of sensible alerts pre-configured. When the server feels slow, this is where you look.
Quick reference
| Task | What |
|---|---|
| Folder | ~/docker/netdata/compose.yaml |
| Dashboard | http://server-ip:19999 |
| Docker containers | appear automatically under Containers |
| Alerts | Alerts tab; config in ./config/health.d/ |
| Keep local | bind to 127.0.0.1 or firewall to your LAN |
| Cloud account | optional; skip it for a home server |
1. The compose file
mkdir -p ~/docker/netdata && cd ~/docker/netdata
nano compose.yaml
services:
netdata:
image: netdata/netdata:stable
container_name: netdata
hostname: homeserver
pid: host
network_mode: host
cap_add:
- SYS_PTRACE
- SYS_ADMIN
security_opt:
- apparmor:unconfined
volumes:
- ./config:/etc/netdata
- ./lib:/var/lib/netdata
- ./cache:/var/cache/netdata
- /:/host/root:ro,rslave
- /etc/passwd:/host/etc/passwd:ro
- /etc/group:/host/etc/group:ro
- /etc/os-release:/host/etc/os-release:ro
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: unless-stopped
It needs a lot of the host visible to it — that's the point of a monitor. network_mode: host means it listens on 19999 directly.
docker compose up -d
sudo ufw allow from 192.168.1.0/24 to any port 19999
LAN-only on purpose. The dashboard reveals a lot about the server.
2. The dashboard
Open http://192.168.1.50:19999. It offers to connect to Netdata Cloud; skip (there's a small link) — everything works locally. The left menu lists sections: System overview, CPUs, Memory, Disks, Networking, Containers, systemd services, Sensors. Scroll or click; every chart is live. Drag across a chart to zoom into a moment, which is how you find out what spiked at 3 am.
3. The views that answer real questions
- Server slow right now? System overview → CPU and load, then Applications to see which program.
- Which container is eating RAM? Containers → memory.
- Disk thrashing? Disks → utilization and backlog; Applications → disk I/O for the culprit.
- Is the network saturated? Networking → the interface's bandwidth.
- Running hot? Sensors (install lm-sensors on the host: sudo apt install lm-sensors && sudo sensors-detect).
4. Alerts
The Alerts tab shows active warnings — disk nearly full, swap in use, a service that restarted, high iowait. They're tuned conservatively and mostly worth heeding. To get them by Telegram or email, edit ./config/health_alarm_notify.conf (copy it from the container first: docker compose exec netdata cat /usr/lib/netdata/conf.d/health_alarm_notify.conf > config/health_alarm_notify.conf) and set the Telegram token and chat ID, or the sendmail path.
To silence a noisy alert, create ./config/health.d/override.conf with the alert's name and to: silent.
5. History
Netdata keeps a few hours at per-second detail and days at lower resolution, in ./cache. For long-term graphs, point it at Prometheus or use the Cloud; for a home server, the built-in retention is usually enough.
Netdata, Uptime Kuma and Glances
They do different jobs: Kuma pages you when something is down; Netdata shows you why something is slow; Glances (sudo apt install glances, then glances) is a terminal-only version of the same idea for when you're already in SSH. Many servers run the first two.
Troubleshooting
Containers section is empty. The docker.sock mount is missing or not readable.
No temperatures. Sensors need lm-sensors on the host and a reboot after sensors-detect; some VMs expose none.
Dashboard reachable from outside. Check the UFW rule, and never port-forward 19999.
High CPU from Netdata itself. Rare but possible on a Pi. Set update every = 2 in ./config/netdata.conf under [global].
Wrapping up
One compose file with host access, a LAN-only firewall rule, skip the cloud sign-up. From then on "why is it slow?" has a graph for an answer, and the alerts tab usually knew before you did.
