Y a-t-il de bonnes techniques pour surveiller les tâches cron sur un cluster?
Nous commençons à utiliser Cron pour lancer des tâches à intervalles quotidiens. Quelques idées pour vérifier l'information:
Je me demande si les gens ont eu du succès avec des choses séparément pour Cron contre d'autres choses ou, si les tâches ont été intégrées à une approche différente. Je suis penché vers le n ° 2, mais j'aimerais savoir ce que les gens plus expérimentés pourraient essayer.
En plus des autres réponses:
Nous utilisons le premier pour le rendre plus facile pour - Nagios ( icinga ) de vérifier, par exemple si le dernier horodatage écrit est plus ancien que n heures (plus quelle que soit la logique dont vous avez besoin) - nous sais que quelque chose s'est mal passé.
En plus de ce qui précède:
Vous pouvez utiliser quelques techniques pour surveiller les cronjobs.
Pour recevoir des alertes d'échecs Cronjob:
Le système que vous proposez de connecter des informations dans un "réseau conscient" de votre choix comme syslog . Syslog fournit une méthode simple pour créer des journaux, il gère normalement des fichiers tels que/var/log/messages. Vous pouvez effectuer des personnalisations de base, telles que choisir quels fichiers reçoivent les messages du journal.
Syslog peut être démarré en mode de connaissance du réseau. Par exemple, vous pouvez le configurer afin qu'un esclave puisse se connecter à un maître:
[root@slave ~]# echo "hello world from slave" | logger -p local1.info
[root@master ~]# tail /var/log/myapp
Jun 29 13:07:01 192.168.1.2 logger: hello world from slave
Pour une distribution basée sur le chapeau rouge, un exemple de configuration est le suivant:
[root@slave ~]# cat /etc/syslog.conf | grep local1
local1.* @192.168.1.3
[root@master ~]# cat /etc/sysconfig/syslog | grep SYSLOGD_OPTIONS
SYSLOGD_OPTIONS="-m 0 -r"
[root@master ~]# cat /etc/syslog.conf | grep local
local1.* /var/log/myapp
(La première ligne de configuration redirige local1. * Notes de journal à @ 192.168.1.3 ("Master"). Le drapeau de la deuxième ligne Syslogd_Opions -R). Enfin, la troisième ligne de configuration dirige local1. * Messages reçus sur "Master" dans un fichier).
L'approche SysLog est meilleure pour uniquement les erreurs/informations de journalisation. Les fichiers journaux ont moins de visibilité que l'e-mail, vous ne recherchez probablement pas les journaux à moins que quelque chose a mal tourné.
Si vous choisissez de choisir la voie de style Syslog, envisagez également SysLog-NG: http://freshmeat.net/projects/syslog-ng/ .
Bien sûr, vous pouvez obtenir le meilleur des deux techniques en utilisant les deux. Par exemple, syslog'ing à la fois échecs et succès, et simplement postaux pour des échecs.
J'ai posté une réponse similaire à une question sur Stackoverflow ( https://stackoverflow.com/questions/21025495/seystème-for-monitoring-cron-jobs-and-automated-taks )
Cronitor ( https://cronitor.io ) était un outil que j'ai construit exactement à cet effet. Il se résume essentiellement à une balise de suivi qui utilise des demandes HTTP en tant que Pings.
Cependant, l'un des besoins que la PO mentionne dans son commentaire doit être informé lorsqu'un emploi commence à prendre trop de temps à courir.
J'ai eu ce même besoin et j'ai constaté que des outils similaires ne soutiennent pas facilement ce type de surveillance. Le cronitor résout cela en vous permettant de déclencher éventuellement un événement de départ et un événement final afin de garder une trace de la durée.
Le suivi de la durée était indispensable pour moi parce que j'avais un cronjob qui a été programmé toutes les heures, mais au fil du temps, il a commencé à prendre plus d'une heure à courir. J'espère que vous le trouverez utile!
Il est encore sous un développement assez lourd au moment de moi, écrivez cela, mais j'encourage à jeter un coup d'œil à https://github.com/jamesrwhite/minicron . Il a été développé pour résoudre les problèmes que vous décrivez. Avec une légère modification de la commande que vous exécutez, il peut enregistrer l'état de sortie et quitter l'état des travaux et envoie ces données sur un serveur central en temps réel et peut envoyer des alertes par courrier électronique, SMS et Pagerduty quand Un travail échoue (état de sortie> 0) ou n'exécute pas quand il devrait.
Disclaimer: Je suis le développeur qui y travaille.
j'utilise http://cronrat.com Just ANNEZ && CURL "... VOTRE URL CRONRAT" À VOS EMPLOIRE CRON. La meilleure fonctionnalité que j'aime est que vous n'avez pas besoin de configurer quoi que ce soit après avoir créé un compte initial. Chaque alerte est opérationnelle et exécutez la minute où vous l'utilisez. Par conséquent, je peux utiliser des outils automatisés pour commencer mes emplois qui n'existent pas encore, contrairement à certains services où j'ai besoin de configurer la tâche d'abord.
Cela ressemble à un cas d'utilisation classique pour AlertGrid .
Il ne nécessite pas d'installation, tout ce que vous avez à faire pour prendre des avantages de cet outil est de:
execution_time
!si mon_job n'a pas réagi en X minutes (heures dans votre cas) -> Envoyer SMS à admin
ou
si exécutant_time> 60 secondes -> Envoyer un courrier électronique aux personnes intéressées
En fait c'est tout. Vous pouvez gérer des règles de notification à l'aide de Nice Visual Editor. Vous n'avez pas à modifier le code source ou certains fichiers de configuration si quelque chose a changé. Sa solution centralisée, vous pouvez donc bénéficier de règles de gestion d'une seule place.
J'espère que cela aide quelqu'un. Un compte gratuit est fourni pour que vous puissiez tester et utiliser ALTERGRID si vous êtes intéressé. Je suis l'un des membres de l'équipe ALGERGRID - N'hésitez pas à demander si vous avez des questions.
Vos emplois cron sont déjà enregistrés via Syslog. Ces données peuvent être envoyées à un serveur central à l'aide de SysLogd, un autre service standard.
http://www.debuntu.org/how-to-remote-syslog-logging-on-debian-and-ubuntu/ a des détails sur la manière de la configurer.
HealthChecks ( https://github.com/healthChecks/healthChecks/ ) est un service et un tableau de bord construit exactement pour la surveillance des travaux de cron. Il est utilisé dans la production, est maintenu et accepte les cotisations de code.
Cela fonctionne de la même manière que le cronitor, le snviper et les amis de l'homme mort, vous configurez votre travail cron pour faire une demande HTTP/HTTPS à une URL spéciale et unique, juste avant de finir. HealthChecks reçoit et enregistre ces pings. Il vérifie constamment si les pings arrivent aux intervalles attendus. Lorsqu'il détecte un problème, il vous envoie une notification. Les méthodes de notification prises en charge sont des courriels, des webhooks, un relâchement, un télégramme, une discorde, des SMS, Pushover, Pusbullet, Pagerduty, Pagertre, Hipchat, Victorops, Opsgenie.
Vous pouvez définir tout cela tout et vous héberger vous-même, mais, comme avec n'importe quel service Web, il prend des efforts pour configurer le nom de domaine, le certificat, configurer le proxy inversé HTTP, configurer des sauvegardes de base de données, etc. Un moyen raisonnablement facile d'obtenir Exécution consiste à utiliser cette version adaptée par Heroku: https://github.com/iphoting/healthChecks . Je connais des personnes qui dirigent ce projet eux-mêmes et l'utilisent pour surveiller des centaines de services.
Disclaimer: Je suis l'auteur et je dirige également HealthChecks comme service hébergé à https://healthCheck.io
J'ai créé Power Cron après ces besoins précis. J'avais besoin d'une vue centralisée sur mes emplois cron et une notion de dépendance entre les emplois de différents membres du cluster.
J'ai également besoin de plus d'informations que ce que je pouvais trouver dans les journaux et ajout de profilage d'emploi.
Nous avons construit Pushmon, http://www.pushmon.com , pour cela. Dites que votre travail quotidien fonctionne à 3 heures du matin et se termine normalement à 4 heures du matin. Vous pouvez configurer une barre d'attente de "à 4h00 du matin tous les jours". Ou un peu plus de planification plus avancé comme "à 4 heures du matin tous les jours dans une heure". Tout ce que vous avez à faire est de "ping" l'URL de Pousse à chaque fois que votre travail fonctionne, et cela vous alerte des pings manquants. Si vous savez avec certitude qu'une erreur s'est produite, comme lorsque vous attrapez une exception, vous ne pouvez pas gérer, vous pouvez utiliser la fonction d'alerte à la demande.