Wer Proxmox VE für Backups nutzt, kennt das: die Task-Logs unter /var/log/pve/tasks/ enthalten zwar alle Informationen, aber sie sind unbequem zu durchsuchen und schwer zu vergleichen. Der PVE Log Viewer ist ein kleines Flask-Tool, das diese Logs direkt einliest und als übersichtliche Web-Oberfläche präsentiert.
Work in Progress – Dieser Artikel ist ein erster Draft. Ich habe das Tool bei mir im Homelab aufgesetzt und beschreibe hier den aktuellen Stand. Feedback und Ergänzungen sind willkommen.
Was macht der PVE Log Viewer?
Die Anwendung liest die UPID:…:vzdump:…-Dateien aus dem Proxmox-Task-Log-Verzeichnis und bietet drei Ansichten:
- Übersicht aller Backup-Läufe mit Startzeit, Knoten, Status und Anzahl der Gäste
- Detailansicht eines einzelnen Laufs mit Tabelle aller gesicherten VMs/CTs inklusive Dauer, übertragener und tatsächlich gespeicherter Datenmenge
- Verlaufsansicht pro VM/CT-ID mit gruppiertem Balkendiagramm und Dauer-Trend über alle Backups
Besonders praktisch: Das Tool unterscheidet zwischen übertragenen und tatsächlich gespeicherten Bytes. Durch die Deduplizierung von Proxmox Backup Server landet oft nur ein Bruchteil der übertragenen Daten wirklich neu im Datastore.
Features im Überblick
- Robuste UPID-Erkennung für aktuelles und älteres PVE-Format
- Inkrementeller Cache nach Datei-Änderungszeit – skaliert auch mit vielen Logs
- Unterstützung für CT-Backups (
proxmox-backup-client), laufende VMs mit Dirty-Bitmap und gestoppte VMs - Fehler-Anzeige für fehlgeschlagene Backups direkt in der Tabelle
- Scan-Diagnose im Footer zur Fehlersuche bei Berechtigungsproblemen
- Einzelne Python-Datei (
app.py) mit nur einer Abhängigkeit (Flask)
Screenshots
Übersicht aller Backup-Läufe

In der Übersicht sieht man auf einen Blick, welche Backups erfolgreich waren und bei welchen Läufen Fehler aufgetreten sind. Die Zeilen sind nach Startzeit absteigend sortiert.
Detailansicht eines Backup-Laufs

Die Detailansicht zeigt für jede VM/CT die ID, den Namen, den Typ, den Status, die Dauer sowie die Datenmengen. Über die ID gelangt man zur Verlaufsansicht.
Verlaufsansicht pro VM/CT

Für einzelne Gäste werden die Backup-Datenmengen und -Dauern über die Zeit als Diagramm dargestellt. Darunter liegt die vollständige Historie als Tabelle.
Fehlerhafte Backups

Fehlgeschlagene Gäste werden rot hervorgehoben und mit einer kurzen Fehlermeldung in der Zeile angezeigt. Ein Banner am Seitenkopf zeigt zusammenfassend, wie viele Gäste betroffen sind.
Installation
Es gibt zwei Wege, das Tool zu betreiben: als eigener LXC-Container (empfohlen) oder direkt auf dem PVE-Host.
Variante A: LXC-Container (empfohlen)
Das mitgelieferte install-lxc.sh erstellt einen privilegierten Debian-12-Container, bind-mountet /var/log/pve/tasks read-only vom Host und richtet den Service ein.
Einzeiler aus dem Netz:
bash -c "$(curl -fsSL https://raw.githubusercontent.com/maggo1404/PVE-Log-Viewer/main/install-lxc.sh)"
Oder lokal aus dem ZIP-Archiv:
unzip PVE-Log-Viewer-main.zip
cd PVE-Log-Viewer-main
bash install-lxc.sh
Im Whiptail-Menü kann man zwischen Standard-Einstellungen und erweiterten Einstellungen wählen. Wer das Script automatisieren möchte, kann alle Werte per Umgebungsvariable vorgeben:
CTID=115 HOSTNAME=backup-dashboard \
IP=192.168.11.240/24 GW=192.168.11.254 \
NONINTERACTIVE=1 \
bash -c "$(curl -fsSL https://raw.githubusercontent.com/maggo1404/PVE-Log-Viewer/main/install-lxc.sh)"
Variante B: Direkt auf dem PVE-Host
mkdir -p /opt/pve-log-viewer
cd /opt/pve-log-viewer
unzip ~/PVE-Log-Viewer-main.zip -d .
cd PVE-Log-Viewer-main
apt install -y python3-venv
python3 -m venv venv
./venv/bin/pip install -r requirements.txt
cp pve-log-viewer.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable --now pve-log-viewer
Anschließend ist das Dashboard unter http://<pve-host>:5000 erreichbar.
Download
Der komplette Quellcode, das ZIP-Archiv und die Dokumentation befinden sich im öffentlichen Repository:
github.com/maggo1404/PVE-Log-Viewer
Einzelne Dateien lassen sich direkt über GitHub Raw beziehen:
- install-lxc.sh – LXC-Installer
- app.py – Flask-Anwendung
- requirements.txt
- pve-log-viewer.service
- README.md
Konfiguration
Die App wird über Umgebungsvariablen konfiguriert, am besten in der systemd-Unit:
| Variable | Default | Beschreibung |
|---|---|---|
PVE_TASK_DIR | /var/log/pve/tasks | Pfad zu den vzdump-Task-Logs |
LISTEN_HOST | 0.0.0.0 | Bind-Adresse |
LISTEN_PORT | 5000 | TCP-Port |
Die mitgelieferte Service-Datei läuft bereits als www-data, was wichtig ist, da das Task-Log-Verzeichnis typischerweise www-data:www-data mit Mode 750 gehört.
Architektur
Das Herzstück ist die einzelne app.py mit vier Hauptbestandteilen:
- Log-Parser – zerlegt vzdump-Logs in strukturierte Gast-Einträge
- UPID-Parser – ermittelt Knoten, Startzeit, Worker-Type und Benutzer aus dem Dateinamen
- Scanner – läuft bei jedem Request, cached aber unveränderte Dateien
- Flask-Routen – stellen Übersicht, Detail und Verlauf dar
Die Templates sind inline im Python-Code untergebracht; extern werden nur IBM Plex Fonts über Google Fonts und Chart.js über jsDelivr geladen. Wer ein komplett offline-fähiges Setup möchte, muss diese beiden Ressourcen lokal bereitstellen.
Reverse-Proxy (optional)
Für den Produktivbetrieb hinter nginx oder Caddy empfiehlt es sich, die App nur auf 127.0.0.1 zu binden und einen Reverse-Proxy davorzusetzen:
location /pbslogs/ {
proxy_pass http://127.0.0.1:5000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
Einschränkungen
- Pro Instanz wird nur der lokale Task-Log-Ordner eines einzelnen Knotens ausgewertet. In einem Cluster muss man also pro Node eine Instanz betreiben, falls man alle Backups zentral sehen möchte.
- Sehr alte Logs werden von Proxmox irgendwann rotiert und verschwinden dann aus der Historie.
Fazit
Der PVE Log Viewer ist ein schlankes Werkzeug, um Proxmox-Backup-Logs schnell und übersichtlich zu durchforsten. Besonders die Unterscheidung zwischen übertragenen und gespeicherten Daten sowie die Verlaufsdiagramme pro Gast helfen, Backup-Probleme und Auffälligkeiten auf einen Blick zu erkennen.
73 de DC8WAN
