Cron-Email-Lärm mit logdiff reduzieren
Wenn Cron-Jobs oder geplante Scanner bei jeder Ausführung denselben Output in Ihr Postfach schicken, wird es schwer, wichtige Veränderungen zu erkennen. logdiff ist ein kleines Open-Source-Tool in Rust, das gestreamten Output pro Schlüssel cached und nur die Unterschiede zur vorherigen Ausführung ausgibt: Entweder als Unified-Diff oder nur die geänderten Zeilen. Dadurch werden E-Mail-Benachrichtigungen und Alerts deutlich aussagekräftiger.
Warum das wichtig ist
- Lärm reduzieren: Nur geänderter Output wird gemeldet, so erhalten Sie keine wiederholten identischen Scans mehr.
- Einfache Integration:
logdifffungiert als Filter in einer Pipe und lässt sich in bestehende Cron-Zeilen einbauen, ohne den Produzenten anzupassen. - Leichtgewichtig: Ein einzelnes Binary, das sich per Cargo installieren oder aus dem Quellcode bauen lässt.
Was logdiff macht
- Liest
stdinein und speichert den Inhalt in einer Cache-Datei, die mit einem vom Nutzer gewählten Schlüssel adressiert ist. - In nachfolgenden Läufen vergleicht es die vorige und die aktuelle Eingabe mit
diff -u(oder einer manuellen Fallback-Implementierung) und gibt die Differenz aus. - Optionen wie
--only-lines(nur geänderte Zeilen anzeigen) und--cache-dir(Cache-Ort überschreiben) sind verfügbar.
Schnelle Installation
Mit Cargo installieren:
cargo install --git https://codeberg.org/chapati/logdiff logdiff
Oder aus dem Quellcode bauen:
git clone https://codeberg.org/chapati/logdiff
cd logdiff
cargo build --release
# das Binary liegt in target/release/logdiff
Beispiele zur Verwendung
Pipe eine Logdatei in logdiff mit einem Schlüssel. Der erste Lauf erzeugt die Baseline und gibt nichts aus:
cat logfile.log | logdiff mein_schluessel
Beim nächsten Lauf wird die Unified-Diff-Ausgabe zwischen vorheriger und aktueller Eingabe angezeigt. Um nur die geänderten Zeilen (mit + bzw. -) zu erhalten, verwenden Sie:
cat logfile.log | logdiff --only-lines mein_schluessel
Cron-Beispiel (praktisch)
Eine reale Cron-Zeile, die lynis täglich um 04:30 ausführt, die Ausgabe durch logdiff filtert und nur geänderte Zeilen per Mail verschickt:
30 4 * * * (lynis --cronjob 2>&1 | logdiff --only-lines lynis | mail -s "san: lynis" [email protected])
Wie das hilft
- Wenn
lynisdieselben Ergebnisse wie gestern meldet, unterdrücktlogdiffdie Ausgabe; die empfangene Mail ist leer (oder entfällt, wenn Ihr Mailer leere Bodies unterdrückt). Nur bei Änderungen erhalten Sie eine prägnante Diff-Übersicht. - Verwenden Sie pro Job einen eigenen Schlüssel (z. B.
lynis,backup,db-check), damit die Caches getrennt und sinnvoll bleiben.
Fortgeschrittene Tipps
- Passen Sie den Cache-Ort mit
--cache-dir /pfad/zum/cachean, wenn Sie in Umgebungen mit eingeschränkten Home-Verzeichnissen arbeiten. - Rotieren oder bereinigen Sie Cache-Dateien, wenn viele unterschiedliche Job-Schlüssel entstehen, um Speicherzuwachs zu begrenzen.
- Kombinieren Sie
logdiffmit Benachrichtigungssystemen, die leere Payloads unterdrücken, oder lösen Sie Alerts nur aus, wenn die Ausgabe nicht leer ist.
Cache-Ort und Fallback
Standardmäßig speichert logdiff Cache-Dateien in $XDG_CACHE_HOME/logdiff oder ~/.cache/logdiff. Es nutzt das System-diff; ist diff nicht vorhanden, fällt logdiff auf eine manuelle Vergleichslogik zurück.
Lizenz & Repo
logdiff ist Open Source unter der AGPL-3.0-Lizenz. Projekt, Issues und Beiträge finden Sie unter:
https://codeberg.org/chapati/logdiff
Fazit
Dieses kleine CLI-Tool eignet sich hervorragend für alle, die weniger, dafür aber relevantere Benachrichtigungen von geplanten Aufgaben möchten. Bauen Sie es in Ihre Cron-Pipelines ein und erhalten Sie nur noch Benachrichtigungen, die wirklich zählen.