Netdata: Echtzeit-Monitoring für deinen Server
Netdata ist das Schweizer Taschenmesser unter den Monitoring-Tools: Es sammelt pro Sekunde hunderte Metriken – CPU, RAM, Disk, Netzwerk, Docker-Container, Prozesse – und zeigt sie in einer interaktiven Echtzeit-Oberfläche. Ein einziger Container ersetzt dir das Gefühl, „blind“ zu administrieren. In diesem Artikel richtest du Netdata mit Docker Compose ein, hängst es sicher an deinen Reverse Proxy und lernst die wichtigsten Konfigurations-Stellschrauben kennen.
Was ist Netdata?
Netdata ist ein Open-Source-Monitoring-Agent, der direkt auf dem zu überwachenden System läuft. Statt sich mit 15-Sekunden-Intervallen zufriedenzugeben, liefert Netdata Echtzeit-Daten in 1-Sekunden-Auflösung – und das mit erstaunlich geringem Eigenbedarf (je nach System ca. 1–3 % CPU).
- System-Metriken: CPU, RAM, Swap, Disk-I/O, Netzwerk, Temperatur, Prozesse
- Docker-Integration: Container-, Image- und Volume-Metriken über den (read-only) Docker-Socket
- 200+ Collector-Plugins: von Nginx über PostgreSQL bis zu Proxmox – meist automatisch erkannt
- Alarme: eingebaute Alarm-Regeln mit Benachrichtigung (E-Mail, Telegram, Discord …)
- Interaktive Charts: ohne separate Grafana/InfluxDB-Installation – alles ist schon drin
Voraussetzungen
- Debian-13-Server mit Docker & Compose (Teil 5)
- Optional: Domain + Reverse Proxy (Nginx) für den Zugriff von außen
- Keine eigene Datenbank nötig – Netdata bringt sein Speicher-Backend mit
Installation mit Docker Compose
Verzeichnis anlegen und in den Stack wechseln:
mkdir -p /opt/stacks/netdata
cd /opt/stacks/netdata
Die docker-compose.yml – mit allen Mounts, die Netdata braucht, um dein System wirklich zu sehen:
services:
netdata:
image: netdata/netdata
container_name: netdata
network_mode: bridge
ports:
- 127.0.0.1:50531:19999 # Web UI
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
volumes:
netdataconfig: null
netdatalib: null
netdatacache: null
networks: {}
Starten und den Status prüfen:
docker compose up -d
docker compose ps
Danach öffnest du die Oberfläche im Browser: http://127.0.0.1:50531 – du solltest sofort die Live-Charts deines Servers sehen.
Warum diese Mounts?
| Baustein | Wofür? |
|---|---|
/proc, /sys (ro) | System-, CPU-, Speicher- und Netzwerk-Metriken des Hosts |
/var/log (ro) | Log-Collector (u. a. Journald-Login-Versuche, Error-Logs) |
/etc/passwd, /etc/group (ro) | Benutzernamen für die Prozess-Anzeige statt kryptischer UIDs |
docker.sock (ro) | Container- und Docker-Metriken – bewusst nur lesend gemountet |
netdataconfig/lib/cache | Named Volumes für Konfiguration, Datenbank & Cache – überleben jeden Neustart |
SYS_PTRACE (Prozess-Details) und SYS_ADMIN (u. a. Cgroup-/Netzwerk-Metriken) sowie apparmor:unconfined sind die von Netdata dokumentierte Standard-Empfehlung, damit wirklich alle Metriken ankommen. Alle Host-Pfade sind :ro gemountet – Netdata kann dein System also beobachten, aber nicht verändern.Reverse Proxy: Netdata nach außen bringen
Da Netdata keine eigene Benutzerverwaltung mitbringt (Login gibt es nur optional über Netdata Cloud), gehört die UI hinter den Reverse Proxy mit Zugangsschutz:
server {
listen 443 ssl http2;
server_name metrics.deine-domain.de;
ssl_certificate /etc/letsencrypt/live/metrics.deine-domain.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/metrics.deine-domain.de/privkey.pem;
auth_basic "Netdata";
auth_basic_user_file /etc/nginx/htpasswd-netdata;
location / {
proxy_pass http://127.0.0.1:50531;
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;
}
}
# Passwort-Datei einmalig anlegen
sudo htpasswd -c /etc/nginx/htpasswd-netdata admin
sudo nginx -t
sudo systemctl reload nginx
Konfiguration: Alarme, Retention & Co.
Die Hauptkonfiguration liegt in der Datei netdata.conf im Volume netdataconfig. Am einfachsten bearbeitest du sie direkt im Container:
docker exec -it netdata edit-config netdata.conf
Wichtige Bereiche:
- Retention: Unter
[db]steuertmode(z. B.dbengine) undretentiondie Speicherdauer – der DB-Engine-Modus ist der Standard und für Docker ideal. - Alarme: Netdata bringt hunderte Alarm-Regeln mit. Die Ausgabe-Kanäle konfigurierst du zentral – z. B. E-Mail oder Telegram.
- Benachrichtigung testen:
docker exec -it netdata netdata -W "alarm notify"funktioniert über das interne Kommando – sauberer ist der Test-Button im UI, falls eingerichtet. - Collector: Die meisten Dienste (Nginx, MariaDB, Redis …) werden automatisch erkannt, sobald sie laufen.
Nach Konfig-Änderungen den Container neu starten:
docker compose restart
Sicherheits-Check
- localhost-Bindung:
127.0.0.1:50531– die UI ist ohne Proxy nicht von außen erreichbar (Teil-3-Firewall bleibt wirksam). - Basic Auth am Proxy – Netdata selbst hat kein Login; der Zugangsschutz passiert vor dem Container.
- Read-only Mounts: Alle Host-Pfade inkl. Docker-Socket sind
:ro– gute Balance zwischen Metrik-Tiefe und Risiko. - AppArmor-Hinweis:
apparmor:unconfinedschaltet das Host-Profil für diesen Container ab – akzeptabel, solange der Container nicht öffentlich exponiert wird. Alternativ: Eigenes AppArmor-Profil erstellen (fortgeschritten). - Netdata Cloud: optionaler Login-Dienst von Netdata – nur aktivieren, wenn du den Agenten wirklich mit deren Cloud verbinden willst; ohne Anmeldung bleibt alles lokal.
Betrieb, Updates & Backups
Updates
cd /opt/stacks/netdata
docker compose pull
docker compose up -d
Backup der Konfiguration
Metriken und Cache kannst du jederzeit neu aufbauen – schützenswert ist deine Konfiguration im Volume netdataconfig. So sicherst du ein Named Volume in ein Borg-Archiv:
# Volume-Inhalt in einen temporären Ordner kopieren
docker run --rm -v netdata_netdataconfig:/src:ro -v /tmp/netdata-backup:/dst alpine \
sh -c "cp -a /src/. /dst/"
# Ordner ins Borg-Archiv legen (Muster aus Teil 4/5)
borg create /mnt/backup/borg-repo::netdata-$(date +%Y-%m-%d) /tmp/netdata-backup
Der Volume-Name setzt sich aus Projekt- und Volume-Namen zusammen – prüfe ihn bei Bedarf mit docker volume ls.
Häufige Probleme (FAQ)
| Problem | Lösung |
|---|---|
| UI ist nicht erreichbar | Container-Status prüfen (docker compose ps) und Port-Test: curl -I http://127.0.0.1:50531. Bei Reverse Proxy: nginx -t und Reload nicht vergessen. |
| Keine Container-Metriken sichtbar | Der Docker-Socket-Mount fehlt oder ist nicht read-only gemountet – Eintrag /var/run/docker.sock:/var/run/docker.sock:ro prüfen. |
| Hoher Speicherverbrauch des Cache-Volumes | Retention unter [db] in der netdata.conf reduzieren oder das Cache-Volume zurücksetzen: docker compose down, Volume löschen, neu starten. |
| Alarm-Benachrichtigungen kommen nicht an | Ausgabe-Kanal in der Konfiguration prüfen und mit dem internen Test auslösen; SMTP-/Telegram-Zugangsdaten kontrollieren. |
| Zahlen wirken unplausibel | Zeitzone (TZ) und Host-Mounts prüfen – ohne /proc und /sys fehlen die wichtigsten Quellen. |
| Netdata will sich mit der Cloud verbinden | Einfach nicht anmelden – der Agent läuft komplett lokal. Den Cloud-Bereich im UI ignorieren oder in der Konfiguration deaktivieren. |
Fazit
Netdata ist in zehn Minuten installiert und liefert sofort einen erstaunlich tiefen Blick in deinen Server. Für den Alltag gilt:
- Port nur auf 127.0.0.1 binden – die UI gehört hinter Reverse Proxy + Basic Auth.
- Host-Pfade konsequent read-only mounten – Beobachten ja, Verändern nein.
- Alarme einrichten, bevor etwas passiert – Netdata schläft nie, du aber schon.
- Konfiguration sichern – Metriken regenerieren sich, deine Einstellungen nicht.
Damit hast du dein „Frühwarnsystem“ – und siehst künftig schon beim Blick auf die Charts, wenn ein Dienst auf dem Zahnfleisch läuft, bevor er es dir per Ausfall mitteilt.