Übersicht
Proxmox VE verschickt nach jedem Backup-Job eine Mail. Das funktioniert, bis man mehrere Hosts betreibt, die Mails im Filter verschwinden oder ein Job gar nicht erst startet, denn über ein Backup, das nie lief, informiert auch keine Fehlermail. Zuverlässiger ist die umgekehrte Logik eines Monitoring-Systems: Alarm, wenn ein erwartetes Backup ausbleibt.
Das Template pve-backup-zabbix bringt genau das in Zabbix: pro VM und Container den Status, die Dauer und die Größe des letzten vzdump-Backups, mit Triggern für fehlgeschlagene und für ausgebliebene Backups.
Funktionsweise
Ein kleines Shell-Skript auf dem PVE-Host liest die vzdump-Logs aus /var/log/vzdump/ und schreibt daraus eine JSON-Datei (/var/log/backups.log) mit Startzeit, Endzeit, Größe und Status je VMID. Der Zabbix Agent (aktiv) liest diese Datei als Master-Item, Low-Level Discovery legt pro VMID die Items an, alle Werte kommen als Dependent Items per JSONPath aus dem einen Master-Item. Es gibt also genau einen Dateizugriff pro Intervall, egal wie viele Gäste gesichert werden.
Installation
Auf dem PVE-Host das Konverter-Skript einrichten:
curl -o /usr/local/bin/convert-log-to-json.sh https://raw.githubusercontent.com/Garfieldttt/pve-backup-zabbix/zabbix/7.0/convert-log-to-json.sh
chmod +x /usr/local/bin/convert-log-to-json.sh
Per Cron alle 5 Minuten ausführen (als root, damit die vzdump-Logs lesbar sind):
echo '*/5 * * * * root /usr/local/bin/convert-log-to-json.sh' > /etc/cron.d/pve-backup-zabbix
Danach das Template in Zabbix 7.0+ importieren und dem PVE-Host zuweisen. Der Host braucht einen aktiven Zabbix Agent mit Leserechten auf die JSON-Datei.
Makros
| Makro | Default | Beschreibung |
|---|---|---|
{$BACKUP_LOCATION} |
/var/log/backups.log |
Pfad zur JSON-Logdatei |
{$BACKUP_TIME} |
48h |
Nach dieser Zeit ohne Backup wird alarmiert |
{$TRIGGER_BACKUP_FAILED} |
1 |
Trigger für fehlgeschlagene Backups ein/aus |
{$TRIGGER_NOBACKUP} |
1 |
Trigger für fehlende Backups ein/aus |
{$BACKUP_TIME} an den eigenen Backup-Rhythmus anpassen: Bei täglichen Backups sind 48 Stunden ein guter Wert, so bleibt Luft für einen einzelnen verpassten Lauf, bevor es Alarm gibt.
Trigger
- Backup failed (VMID): Der Status des letzten Backups meldet einen Fehler.
- No backup in {$BACKUP_TIME} (VMID): Für die VMID kam innerhalb des Zeitfensters kein neues Backup an, geprüft per
nodata(). Das fängt auch den Fall ab, dass der Job gar nicht gestartet ist.
Beide Trigger stehen auf HIGH und lassen sich per Makro abschalten, auch gezielt pro VM über Kontext-Makros.
Betriebshinweis
Alte Logs unter /var/log/vzdump/ von VMs und Containern, die es nicht mehr gibt, sollten entfernt werden. Sonst tauchen die verwaisten Einträge weiter in der JSON-Datei auf und lösen irgendwann den No-Backup-Trigger aus.
Fazit
Backup-Überwachung nach dem richtigen Prinzip: nicht auf Fehlermails hoffen, sondern das Ausbleiben des Erfolgs alarmieren lassen. Ein Skript, ein Cronjob, ein Template-Import. Repo: github.com/Garfieldttt/pve-backup-zabbix
Wer den kompletten PVE überwachen will, statt nur die Backups: Das Proxmox VE REST API Template holt Cluster, VMs, Storage, Disks und die Backups gleich mit rein, braucht dafür aber einen API-Token.