Besser für Cronjobs protokollieren? Cron-Ausgabe an Syslog senden?

43

Ich suche nach einer besseren Möglichkeit, Cronjobs zu protokollieren. Die meisten Cronjobs neigen dazu, E-Mails oder die Konsole zu spammen, ignoriert zu werden oder eine weitere Protokolldatei zu erstellen.

In diesem Fall habe ich ein Nagios-NSCA-Skript, das Daten an einen zentralen Nagios-Server sendet. Dieses send_nsca-Skript gibt auch eine einzelne Statuszeile an STDOUT aus, die Erfolg oder Misserfolg anzeigt.

0 * * * * root    /usr/local/nagios/sbin/nsca_check_disk

Dies sendet die folgende Nachricht per E-Mail an root @ localhost, die dann an mein Team von Sysadmins weitergeleitet wird. Spam.

forwarded nsca_check_disk: 1 Datenpaket (e) erfolgreich an Host gesendet.

Ich suche eine Protokollierungsmethode, die:

  1. Versendet keine Spam-Mails an E-Mails oder die Konsole
  2. Erstellen Sie keine weitere krufty-Protokolldatei, die Monate oder Jahre später bereinigt werden muss.
  3. Erfassen Sie die Protokollinformationen an einem beliebigen Ort, damit sie bei Bedarf später angezeigt werden können.
  4. Funktioniert auf den meisten Unixen
  5. Passt in eine vorhandene Protokollinfrastruktur.
  6. Verwendet gängige Syslog-Konventionen wie "Facility" und "Priority"
  7. Kann mit Skripten von Drittanbietern arbeiten, die nicht immer intern protokollieren.
Stefan Lasiewski
quelle

Antworten:

69

Während ich diese Frage schrieb, antwortete ich mir. Also antworte ich mir " Jeopardy-style ". Dies erweitert die Antwort von Dennis Williamson.

Der folgende Befehl sendet alle Cron-Ausgaben an /usr/bin/logger(einschließlich stderr, das mit stdout konvertiert wird 2>&1), die an syslog gesendet werden, mit einem 'Tag' von nsca_check_disk. Syslog erledigt das von dort aus. Da diese Systeme (CentOS und FreeBSD) bereits eingebaute Log-Rotationsmechanismen haben, brauche ich mir keine Gedanken über ein Log wie das var/log/mycustom.logAuffüllen einer Festplatte zu machen.

*/5 * * * * root    /usr/local/nagios/sbin/nsca_check_disk 2>&1 | /usr/bin/logger -t nsca_check_disk

/ var / log / messages hat jetzt eine zusätzliche Nachricht, die folgendes besagt:

Apr 29, 17:40:00 192.168.6.19 nsca_check_disk: 1 data packet(s) sent to host successfully.

Ich mag / usr / bin / logger, weil es gut mit einer vorhandenen Syslog-Konfiguration und -Infrastruktur zusammenarbeitet und in den meisten Unix-Distributionen enthalten ist. Die meisten * nix-Distributionen führen bereits eine Protokollrotation durch und tun dies auch.

Stefan Lasiewski
quelle
1
Was macht der Befehl 2> & 1? Was heißt das? Danke.
Brettski
mit systemd in Ubuntu 00 00 * * * systemd-cat -t "tagname" /path/to/app.shnachsudo crontab -u root -e
Bindestrich
5

Leiten Sie die Ausgabe durch den Logger .

0 * * * * root    /usr/local/nagios/sbin/nsca_check_disk | logger -p local0.notice

Bearbeiten: Ihr Update scheint der richtige Weg zu sein.

Dennis Williamson
quelle
Vielen Dank! Nachdem ich meine Frage gestellt hatte, sah ich, dass Apache die Protokollausgabe an / usr / bin / logger weiterleitet. Ich wusste nicht, dass wir die Ausgabe an Logger (1) leiten können - es ist nicht in der Manpage!
Stefan Lasiewski
2
msgstr "message - Schreibe die zu protokollierende Nachricht; falls nicht angegeben und das Flag -f nicht angegeben ist, wird die Standardeingabe protokolliert."
Dennis Williamson
1

Sie können auch crondmit Option -s(oder -Sin Busybox) ausführen, damit die Ausgabe an gesendet wird syslog.

Stuart Cardall
quelle