web-dev-qa-db-fra.com

Une meilleure journalisation pour les cronjobs? Envoyer une sortie cron vers syslog?

Je recherche une meilleure façon de consigner les tâches cron. La plupart des tâches cron ont tendance à envoyer des courriers électroniques indésirables ou la console, à être ignorées ou à créer un autre fichier journal.

Dans ce cas, j'ai un script Nagios NSCA qui envoie des données à un serveur central Nagios. Ce script send_nsca imprime également une ligne d'état unique sur STDOUT, indiquant la réussite ou l'échec.

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

Cela envoie le message suivant à root @ localhost, qui est ensuite transmis à mon équipe d'administrateurs système. Spam.

nsca_check_disk transmis: 1 paquet (s) de données envoyé (s) à l'hôte avec succès.

Je recherche une méthode de journalisation qui:

  1. N'envoie pas de spams aux e-mails ou à la console
  2. Ne créez pas encore un autre fichier journal krufty qui nécessite un nettoyage des mois ou des années plus tard.
  3. Capturez les informations du journal quelque part, afin de pouvoir les consulter ultérieurement si vous le souhaitez.
  4. Fonctionne sur la plupart des Unix
  5. Convient à une infrastructure de journaux existante.
  6. Utilise les conventions syslog courantes comme "installation" et "priorité"
  7. Peut fonctionner avec des scripts tiers qui ne font pas toujours de journalisation en interne.
45
Stefan Lasiewski

En train d'écrire cette question, j'ai répondu moi-même. Je vais donc me répondre " style Jeopardy ". Cela élargit la réponse fournie par Dennis Williamson.

Ce qui suit enverra toute sortie Cron à /usr/bin/logger (y compris stderr, qui est converti en stdout à l'aide de 2>&1), qui sera envoyé à syslog, avec un 'tag' de nsca_check_disk. Syslog le gère à partir de là. Étant donné que ces systèmes (CentOS et FreeBSD) ont déjà des mécanismes de rotation des journaux intégrés, je n'ai pas à me soucier d'un journal comme/var/log/mycustom.log remplir un disque.

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

/ var/log/messages a maintenant un message supplémentaire qui dit ceci:

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

J'aime/usr/bin/logger, car il fonctionne bien avec une configuration et une infrastructure syslog existantes, et est inclus avec la plupart des distributions Unix. La plupart des distributions * nix effectuent déjà la rotation des journaux et le font bien.

72
Stefan Lasiewski

Dirigez la sortie via logger .

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

Edit: Votre mise à jour ressemble à la bonne façon de procéder.

Vous pouvez également exécuter crond avec l'option -s (ou -S dans Busybox) pour que la sortie soit envoyée à syslog.

1
Stuart Cardall