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

Netdata: every graph, every second — Kuma says it's down. Netdata says why it's slow.

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

TaskWhat
Folder~/docker/netdata/compose.yaml
Dashboardhttp://server-ip:19999
Docker containersappear automatically under Containers
AlertsAlerts tab; config in ./config/health.d/
Keep localbind to 127.0.0.1 or firewall to your LAN
Cloud accountoptional; 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

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.

Call us