
Daily System Report
# Von Dashboard-Chaos zu einer einzigen Morgen-Mail
Ausgangslage
Jeden Morgen verschiedene Dashboards, Apps und Tools checken — SSL-Status, Backups, Server-Uptime, Logs, Cloud-Kosten. Kostet Zeit, und Dinge werden übersehen.
Es gab kein einheitliches System, das alle relevanten Quellen abfragt, intelligent priorisiert und als einzelnen, sauberen Report zusammenfasst.
Umsetzung
Definition der wichtigsten Datenquellen: SSL-Zertifikate, Backups, Systemlogs, Uptime, Cloud-Kosten, Kalender, Tasks.
Modulare Collector-Pipeline: Jeder Collector ist ein eigenständiges Bash-Skript, das JSON-Metriken liefert. Neue Quellen sind in Minuten integriert.
Python-basierter Report-Generator mit Jinja2-Templates: nimmt die JSON-Daten, priorisiert nach Severity, und rendert ein responsives HTML-Template.
Automatische Zustellung per SMTP um 07:00 via systemd-Timer. Discord-Webhook als zweiter Kanal geplant.
Funktionen
Modulare Bash-Collector liefern JSON. SSL, Backup, Logs, Uptime, Kosten — jeder unabhängig, einfach erweiterbar.
Kritische Probleme oben, Routine unten. Overdue-Erkennung, farbcodierte Severity-Levels, klare visuelle Hierarchie.
Historische Daten in MariaDB. CPU/RAM/Disk-Trends über Wochen, Anomalie-Erkennung durch Baseline-Vergleich.
E-Mail als primärer Kanal, Discord-Webhook als Ergänzung. Konfigurierbar pro Empfänger und Severity.
Technische Details
Die Architektur folgt einem klaren Prinzip: Sammeln, Verarbeiten, Darstellen. Jede Schicht ist unabhängig austauschbar.
Bash ist überall vorhanden, JSON ist maschinenlesbar und leicht parsebar. Jeder Collector ist ein eigenständiges Skript, das bei Fehlern den Rest nicht blockiert.
Python für Datenverarbeitung und Logik, Jinja2 für saubere HTML-Templates. Trennung von Logik und Darstellung ermöglicht schnelle Template-Änderungen ohne Code-Anpassung.
systemd-Timer bieten Logging, Abhängigkeiten und Fehlerbehandlung out of the box. Kein stilles Scheitern wie bei Cron.
Status
Über 180 automatische Reports in 3 Monaten Betrieb. 12 Anomalien frühzeitig erkannt, null unbemerkte Ausfälle.
Das System hat sich als zuverlässiger täglicher Begleiter etabliert — ein einziger Blick in die Inbox reicht, um den Zustand aller Systeme zu kennen.
grep -c gibt Exit-Code 1 bei Count 0 zurück — || echo 0 produziert "0\n0". Fix: var=$(cmd | grep -c) || true
Jinja2's dict.items kollidiert mit Python-Dict-Methode — backups['items'] statt backups.items in Templates verwenden.