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

PVE Log Viewer Übersicht

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

PVE Log Viewer Detailansicht

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

PVE Log Viewer VM-Verlauf

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

PVE Log Viewer Fehleransicht

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:

Konfiguration

Die App wird über Umgebungsvariablen konfiguriert, am besten in der systemd-Unit:

VariableDefaultBeschreibung
PVE_TASK_DIR/var/log/pve/tasksPfad zu den vzdump-Task-Logs
LISTEN_HOST0.0.0.0Bind-Adresse
LISTEN_PORT5000TCP-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:

  1. Log-Parser – zerlegt vzdump-Logs in strukturierte Gast-Einträge
  2. UPID-Parser – ermittelt Knoten, Startzeit, Worker-Type und Benutzer aus dem Dateinamen
  3. Scanner – läuft bei jedem Request, cached aber unveränderte Dateien
  4. 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