Lepsze logowanie do cronjobs? Czy wysłać cron do syslog?

43

Szukam lepszego sposobu na rejestrowanie cronjobs. Większość cronjobs ma tendencję do spamowania wiadomości e-mail lub konsoli, ignorowania ich lub tworzenia kolejnego pliku dziennika.

W tym przypadku mam skrypt Nagios NSCA, który wysyła dane do centralnego serwera Nagios. Ten skrypt send_nsca drukuje również pojedynczą linię statusu do STDOUT, wskazując sukces lub niepowodzenie.

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

To e-mail z następującą wiadomością do root @ localhost, która jest następnie przekazywana do mojego zespołu administratorów. Spam.

przekazano nsca_check_disk: 1 pakiet (y) danych wysłano do hosta pomyślnie.

Szukam metody rejestrowania, która:

  1. Nie spamuje wiadomości na e-mail lub konsolę
  2. Nie twórz kolejnego pliku dziennika Krufty, który wymaga czyszczenia po miesiącach lub latach.
  3. Przechwyć gdzieś informacje dziennika, aby w razie potrzeby móc je później przejrzeć.
  4. Działa na większości unixów
  5. Pasuje do istniejącej infrastruktury dziennika.
  6. Korzysta z typowych konwencji syslog, takich jak „obiekt” i „priorytet”
  7. Może współpracować ze skryptami innych firm, które nie zawsze rejestrują się wewnętrznie.
Stefan Lasiewski
źródło

Odpowiedzi:

69

W trakcie pisania tego pytania odpowiedziałem sobie. Odpowiem więc sobie w styluJeopardy ”. Rozszerza to odpowiedź Dennisa Williamsona.

Poniższe wyśle ​​dowolne wyjście Crona do /usr/bin/logger(w tym stderr, które jest konwertowane na stdout za pomocą 2>&1), które wyśle ​​do syslog, z 'tagiem' wynoszącym nsca_check_disk. Syslog obsługuje to stamtąd. Ponieważ te systemy (CentOS i FreeBSD) mają już wbudowane mechanizmy obracania logów, nie muszę się martwić logiem / var/log/mycustom.lognapełnianiem dysku.

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

/ var / log / messages ma teraz jedną dodatkową wiadomość, która mówi:

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

Lubię / usr / bin / logger, ponieważ działa dobrze z istniejącą konfiguracją i infrastrukturą syslog i jest dołączony do większości dystrybucji Uniksa. Większość dystrybucji * nix już wykonuje rotację logów i robi to dobrze.

Stefan Lasiewski
źródło
1
Do czego służy polecenie 2> i 1? co to znaczy? Dziękuję Ci.
Brettski
z systemd w Ubuntu 00 00 * * * systemd-cat -t "tagname" /path/to/app.shposudo crontab -u root -e
dashy
5

Przeprowadź wyjście przez rejestrator .

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

Edycja: Twoja aktualizacja wygląda na właściwą drogę.

Dennis Williamson
źródło
Dzięki! Po opublikowaniu pytania zobaczyłem, że dzienniki potoków Apache zapisują dane w / usr / bin / logger. Nie zdawałem sobie sprawy, że możemy przesyłać dane wyjściowe do rejestratora (1) - nie ma go na stronie podręcznika!
Stefan Lasiewski
2
msgstr "wiadomość - Napisz wiadomość do dziennika; jeśli nie zostanie podany, a nie podano flagi -f, rejestrowane jest standardowe wejście."
Dennis Williamson
1

Możesz także uruchomić crondz opcją -s(lub -Sw Busybox), aby dane wyjściowe były wysyłane do syslog.

Stuart Cardall
źródło