Beszel – Leichtgewichtiges Server-Monitoring für den Homelab
Server im Blick behalten – ohne Overhead
Grafana, Prometheus, Netdata alle leistungsfähig, alle aufwendig. Wer einfach wissen möchte ob ein Server noch läuft, wie viel RAM ein Container verbraucht und eine E-Mail bekommt wenn die Disk voll wird, braucht keinen Monitoring-Stack mit stundenlanger Konfiguration.
Beszel ist ein Open-Source-Monitoring-Tool, geschrieben in Go, mit einem schlanken PocketBase-Dashboard. Der Agent benötigt nur 6 MB RAM, der Hub etwa 23 MB – ein Bruchteil dessen, was Netdata oder ein Prometheus-Stack verbrauchen.
💡 Niveau: Einsteigerfreundlich. Docker und Docker Compose werden vorausgesetzt.
Was überwacht Beszel?
Beszel erfasst CPU-Auslastung von Host und Containern, RAM-Verbrauch inklusive Swap und ZFS ARC, Disk-Nutzung auf mehreren Partitionen, Disk-I/O, Netzwerkverkehr, Load Average, Temperaturen, GPU-Auslastung (Nvidia, AMD, Intel), S.M.A.R.T.-Festplattengesundheit sowie Status und Metriken aller laufenden Docker- und Podman-Container.
Dazu kommen:
- 🔔 Alerts – konfigurierbare Schwellenwerte für CPU, RAM, Disk, Netzwerk, Temperatur
- 👥 Multi-User – jeder Nutzer verwaltet eigene Systeme, Admins können teilen
- 🔐 OAuth/OIDC – Unterstützung für viele OAuth2-Provider, Passwort-Auth abschaltbar
- 💾 Automatische Backups – auf Disk oder S3-kompatiblen Speicher
- 📡 REST API – Metriken in eigenen Skripten und Anwendungen nutzbar
Architektur – Hub & Agent
Beszel besteht aus zwei Hauptkomponenten: dem Hub und dem Agent.
┌─────────────────────────────────────────────┐
│ Beszel Hub (Port 8090) │
│ │
│ Web-UI · PocketBase · Alerting · Auth │
│ ./beszel_data → Datenbank & Konfiguration │
│ ./beszel_socket → Unix Socket │
└──────────────────────┬──────────────────────┘
│ Unix Socket
│ (lokaler Agent)
┌──────────────────────▼──────────────────────┐
│ Beszel Agent (network_mode: host) │
│ │
│ Sammelt: CPU · RAM · Disk · Netzwerk │
│ ./beszel_socket → Socket zum Hub │
│ /var/run/docker.sock → Container-Metriken │
└─────────────────────────────────────────────┘
Der Hub ist die zentrale Schaltstelle – er aggregiert Metriken von allen Agents, stellt die Web-Oberfläche bereit und versendet Alerts.
Der Agent läuft auf jedem zu überwachenden Server, sammelt Systemmetriken und schickt sie an den Hub. In dieser Konfiguration laufen Hub und Agent auf demselben Host und kommunizieren über einen Unix Socket statt über das Netzwerk – effizienter und ohne offene Ports.
Der Agent läuft mit network_mode: host. Er sieht damit die echten Netzwerkinterfaces des Hosts und kann Netzwerkstatistiken korrekt erfassen.
Vorbereitung
mkdir -p /opt/beszel
cd /opt/beszel
docker-compose.yml
services:
beszel:
image: henrygd/beszel:latest
container_name: beszel
restart: unless-stopped
ports:
- 8090:8090
volumes:
- ./beszel_data:/beszel_data
- ./beszel_socket:/beszel_socket
beszel-agent:
image: henrygd/beszel-agent:latest
container_name: beszel-agent
restart: unless-stopped
network_mode: host
volumes:
- ./beszel_agent_data:/var/lib/beszel-agent
- ./beszel_socket:/beszel_socket
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
LISTEN: /beszel_socket/beszel.sock
HUB_URL: http://localhost:8090
TOKEN: <token>
KEY: "<key>"
volumes – beszel
volumes:
- ./beszel_data:/beszel_data
- ./beszel_socket:/beszel_socket
beszel_data enthält die PocketBase-Datenbank mit allen Metriken, Einstellungen und Nutzerdaten – das wichtigste Verzeichnis für Backups. beszel_socket ist ein geteiltes Verzeichnis zwischen Hub und Agent für die Socket-Kommunikation.
volumes – beszel-agent
volumes:
- ./beszel_agent_data:/var/lib/beszel-agent
- ./beszel_socket:/beszel_socket
- /var/run/docker.sock:/var/run/docker.sock:ro
Der Docker Socket wird mit :ro (read-only) gemountet – der Agent muss Container nur beobachten, nicht steuern. beszel_socket ist dasselbe Verzeichnis wie beim Hub – darüber findet die Kommunikation statt.
environment – beszel-agent
environment:
LISTEN: /beszel_socket/beszel.sock
HUB_URL: http://localhost:8090
TOKEN: <token>
KEY: "<key>"
LISTEN definiert den Socket-Pfad über den der Hub den Agent erreicht. HUB_URL zeigt auf den lokalen Hub. TOKEN und KEY werden beim ersten Start in der Hub-Oberfläche generiert – sie dürfen nicht im Repository landen.
Start & Erstkonfiguration
docker compose up -d
# Logs beobachten
docker compose logs -f
Die Web-Oberfläche ist unter http://server-ip:8090 erreichbar. Beim ersten Aufruf wird ein Admin-Account angelegt.
Token & Key einrichten
- Im Hub-Dashboard auf Add System klicken
- Den generierten
TOKENundKEYkopieren - In die
compose.ymleintragen - Container neu starten:
docker compose up -d --force-recreate beszel-agent
Danach erscheint der lokale Server in der Hub-Übersicht und Metriken beginnen einzulaufen.
Alerts konfigurieren
Alerts werden pro System über das Glocken-Symbol im Dashboard konfiguriert. Verfügbare Schwellenwerte: CPU, RAM, Disk, Netzwerkbandbreite, Temperatur, Load Average und Container-Status.
Für E-Mail-Benachrichtigungen muss ein SMTP-Server in PocketBase konfiguriert werden – erreichbar unter http://server-ip:8090/_/ mit den Admin-Zugangsdaten.
Traefik-Integration
services:
beszel:
# ...
labels:
- "traefik.enable=true"
- "traefik.http.routers.beszel.rule=Host(`beszel.docker.example.com`)"
- "traefik.http.routers.beszel.entrypoints=websecure"
- "traefik.http.routers.beszel.tls.certresolver=hetzner"
- "traefik.docker.network=proxy"
networks:
- proxy
- default
networks:
proxy:
name: proxy
driver: bridge
external: true
⚠️ Das Web-Interface muss über HTTPS erreichbar sein damit die “Copy Docker Compose”-Funktion im Dashboard funktioniert – Clipboard-Zugriff ist im Browser nur über sichere Verbindungen erlaubt.
Weitere Systeme überwachen
Beszel ist nicht auf einen einzelnen Server beschränkt. Für jeden weiteren Server wird nur der Agent deployed. Im Hub-Dashboard auf Add System klicken – Beszel generiert automatisch den passenden Compose-Block für den neuen Agent, inklusive Key.
Für entfernte Server kommuniziert der Agent per SSH mit dem Hub statt über einen Unix Socket:
services:
beszel-agent:
image: henrygd/beszel-agent:latest
container_name: beszel-agent
restart: unless-stopped
network_mode: host
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
PORT: 45876 # Port auf dem der Agent lauscht
KEY: "<hub-public-key>"
Der Port muss in der Firewall des entfernten Servers freigegeben sein – oder über ein privates Netzwerk (VPN, Tailscale) erreichbar gemacht werden.
Updates & Wartung
# Images updaten
docker compose pull
docker compose up -d
# Backup der Datenbank
cp -r beszel_data/ beszel_data_backup_$(date +%Y%m%d)/
Da alle Daten in ./beszel_data liegen, ist ein Backup so einfach wie das Kopieren dieses Verzeichnisses.
Fazit
Beszel füllt eine Lücke: leichter als Netdata, einfacher als Prometheus+Grafana, mehr als ein simpler Uptime-Monitor. Mit über 16.500 GitHub-Stars seit dem Launch 2024 hat sich Beszel schnell als beliebte Wahl für Homelab-Umgebungen etabliert. Wer mehrere Server im Blick behalten und bei Problemen sofort informiert werden möchte, ist mit Beszel in Minuten startklar.