Techniken zur Überwachung von Cron-Aufgaben?

22

Gibt es gute Techniken zum Überwachen von Cron-Tasks in einem Cluster?

Wir fangen an, cron zu verwenden, um täglich Aufgaben zu starten. Einige Ideen zum Auschecken von Informationen:

  1. Fügen Sie eine spezielle Anwendungsbehandlung hinzu, die Informationen an einem "netzwerkfähigen" Ort wie einer Datenbank protokolliert
  2. Erstellen Sie ein Protokolldateisystem, das das Cron-Protokoll (zusammen mit anderen möglichen Protokolldateien) regelmäßig an einen zentralen Punkt zum Verarbeiten / Abfragen überträgt.

Ich frage mich, ob es den Leuten gelungen ist, Dinge für cron im Vergleich zu anderen Dingen separat zu erledigen, oder ob die Aufgaben vollständig in einen anderen Ansatz integriert wurden. Ich neige zu # 2, aber ich würde gerne wissen, was erfahrenere Leute ausprobieren könnten.

Tristan Juricek
quelle
Haben Sie Bedenken, dass Cronjobs nicht ausgeführt werden? Oder möchten Sie den Status für die Jobausführung überwachen?
Ericlaw
1
Meistens, dass sie nicht versagten. Aber manche Jobs dauern lange und wir möchten vielleicht Informationen wie "Ups, das dauert zu lange" abrufen.
Tristan Juricek

Antworten:

16

Neben den anderen Antworten:

  • Lassen Sie den Job einen Zeitstempel in eine Datei schreiben, wenn er zusammen mit dem Rückgabewert des tatsächlichen Jobs beendet ist
  • leiten Sie den Rückgabewert an den ursprünglichen Aufrufer weiter

Wir verwenden die erste Option , um Nagios ( Icinga ) die Überprüfung zu erleichtern , z. B. ob der letzte geschriebene Zeitstempel älter als n Stunden ist (plus der von Ihnen benötigten Logik) - wir wissen, dass ein Fehler aufgetreten ist.

Server Horror
quelle
Obwohl ich die Antworten aller mag - ich habe viel gelernt - habe ich unsere Nagios-Überwachung völlig vergessen. Das ist großartig für die langwierigen Aufgaben, um die ich mir wirklich Sorgen mache. Vielen Dank.
Tristan Juricek
16

Mein gemeinsamer Ansatz ist also:

  • Erstellen Sie keine Standardausgabe, wenn die von Ihnen erstellte Anwendung erfolgreich abgeschlossen wurde.
  • Leiten Sie keine Ausgabe nach / dev / null.
  • Erzeugen Sie eine aussagekräftige stderr-Ausgabe, wenn etwas schief geht.
  • Stellen Sie in der crontab eine $ MAILTO-Adresse ein, um diese Fehlerausgabe an das gewünschte Team zu senden.
Dan Carley
quelle
Und wenn man die Ausgabe wirklich weiterleiten muss, /dev/nullum zumindest || echo "service $service is FUBAR"die Befehlszeile zu ergänzen ...
Hubert Kario
4

Zusätzlich zum oben genannten:

  • Nennen Sie "Logger" und schreiben Sie an stderr, wenn etwas schief geht. Konfigurieren Sie syslog so, dass es zusätzlich an einen zentralen Host, auch "loghost" genannt, weiterleitet. (Logger verwendet standardmäßig die Funktion "user.notice", Sie können sie jedoch ändern.)
kubanczyk
quelle
1
Ich mag diese Idee ... obwohl sich crond bereits in syslog anmeldet (möglicherweise über config param), ist die Verwendung von logger für diesen Ansatz nicht unbedingt erforderlich.
Ericlaw
4

Es gibt einige Techniken, mit denen Sie Cronjobs überwachen können.

So erhalten Sie Benachrichtigungen über Cronjob-Fehler:

  • Verwenden Sie die Standardfunktion MAILTO = von cron. Wenn ein Cronjob eine Ausgabe auf STDERR erzeugt, wird diese an die von Ihnen gewählte Adresse gesendet.
  • Um Cron-Mails zu verfolgen und zu bearbeiten, können Sie sie in ein Ticketsystem leiten.

Das System, das Sie für die Protokollierung von Informationen in einem "netzwerkfähigen" Ort vorschlagen, klingt wie Syslog . syslog bietet eine einfache Methode zum Erstellen von Protokollen und verwaltet normalerweise Dateien wie / var / log / messages. Sie können grundlegende Anpassungen vornehmen, z. B. auswählen, welche Dateien die Protokollnachrichten erhalten.

Syslog kann in einem netzwerkfähigen Modus gestartet werden. Sie können es beispielsweise so konfigurieren, dass sich ein Slave bei einem Master anmelden kann:

[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

Für eine Red Hat-basierte Distribution lautet eine Beispielkonfiguration wie folgt:

[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

(Die erste Konfigurationszeile leitet local1. * -Protokollnachrichten an @ 192.168.1.3 ("master") weiter. Das Flag -r der zweiten SYSLOGD_OPIONS-Zeile aktiviert die Netzwerkunterstützung. Zuletzt leitet die dritte Konfigurationszeile local1. * -Nachrichten an "master" weiter. in eine Datei).

Der Syslog-Ansatz ist besser, um nur Fehler / Informationen zu protokollieren. Protokolldateien sind weniger sichtbar als E-Mails, sodass Sie die Protokolle wahrscheinlich erst dann anzeigen, wenn ein Fehler aufgetreten ist.

Wenn Sie sich für den Syslog-Stil entscheiden, sollten Sie auch syslog-ng: http://freshmeat.net/projects/syslog-ng/ in Betracht ziehen .

Natürlich können Sie das Beste aus beiden Techniken herausholen, indem Sie beide verwenden. Zum Beispiel das Sysloggen von Fehlern und Erfolgen und nur das Versenden von E-Mails bei Fehlern.

Tommeh
quelle
Danke für die Antwort -> Ich bin ein Programmierer, was mich ein bisschen zu einem Sysadmin-Neuling macht. Ich war nicht einmal über die Netzwerkfähigkeiten von Syslog informiert.
Tristan Juricek
3

Ich habe eine ähnliche Antwort auf eine Frage zu StackOverflow gepostet ( /programming/21025495/system-for-monitoring-cron-jobs-and-automated-tasks )

Cronitor ( https://cronitor.io ) war ein Tool, das ich genau für diesen Zweck gebaut habe. Es läuft im Grunde genommen darauf hinaus, ein Tracking-Beacon zu sein, das http-Anforderungen als Pings verwendet.

Zu den Anforderungen, die das OP in seinem Kommentar erwähnt, gehört es jedoch, informiert zu werden, wenn die Ausführung eines Auftrags zu lange dauert.

Ich hatte das gleiche Bedürfnis und stellte fest, dass ähnliche Tools diese Art der Überwachung nicht einfach unterstützen. Cronitor löst dieses Problem, indem Sie optional ein Start- und ein Endereignis auslösen können, um die Dauer zu verfolgen.

Die Verfolgung der Dauer war ein Muss für mich, da ich einen Cronjob hatte, der stündlich geplant war, aber mit der Zeit mehr als eine Stunde in Anspruch nahm. Ich hoffe, Sie finden es nützlich!

August Flanagan
quelle
2

Zum Zeitpunkt, als ich das schreibe, befindet es sich noch in einer ziemlich intensiven Entwicklung, aber ich würde empfehlen, einen Blick auf https://github.com/jamesrwhite/minicron zu werfen . Es wurde entwickelt, um die von Ihnen beschriebenen Probleme zu lösen. Mit einer geringfügigen Änderung des von Ihnen ausgeführten Befehls kann er den Ausgabe- und Beendigungsstatus von Jobs aufzeichnen und diese Daten in Echtzeit an einen zentralen Server zurücksenden und Benachrichtigungen per E-Mail, SMS und PagerDuty senden, wenn ein Job fehlschlägt (Beendigungsstatus> 0). oder wird nicht ausgeführt, wenn es sollte.

Haftungsausschluss: Ich bin der Entwickler, der daran arbeitet.

James White
quelle
0

Dies sieht aus wie ein klassischer Anwendungsfall für AlertGrid .

Es ist keine Installation erforderlich. Alles, was Sie tun müssen, um die Vorteile dieses Tools zu nutzen, ist Folgendes:

  1. Sende jedes Mal ein Signal an AlertGrid, wenn dein Cron-Job fertig ist (dies kann durch eine extrem einfache API erfolgen, das Signal ist nur eine HTTP-Anfrage). Sie können auch einige Parameter senden wie execution_time!
  2. Richten Sie Benachrichtigungsregeln wie folgt ein:

Wenn my_job nicht innerhalb von X Minuten geantwortet hat (in Ihrem Fall Stunden) -> senden Sie eine SMS an den Administrator

oder

if execution_time> 60 seconds -> E-Mail an interessierte Personen senden

Eigentlich ist das alles. Sie können Benachrichtigungsregeln mit einem schönen visuellen Editor verwalten. Sie müssen den Quellcode oder einige Konfigurationsdateien nicht ändern, wenn sich etwas ändert. Es handelt sich um eine zentralisierte Lösung, mit der Sie Regeln von einer zentralen Stelle aus verwalten können.

Hoffe das hilft jemandem. Es gibt ein kostenloses Konto, mit dem Sie AlertGrid bei Interesse testen und verwenden können. Ich bin eines der AlertGrid-Teammitglieder. Bei Fragen stehe ich Ihnen gerne zur Verfügung.

dzida
quelle
0

ich benutze http://cronrat.com, füge einfach && curl "... your cronrat url" zu deinen Cron Jobs hinzu. Die beste Funktion, die ich mag, ist, dass Sie nichts einrichten müssen, nachdem Sie das erste Konto erstellt haben. Jede Warnung ist in dem Moment aktiv, in dem Sie sie verwenden. Daher kann ich alle automatisierten Tools verwenden, um meine Jobs zu starten, die es noch nicht gibt, im Gegensatz zu einigen Services, bei denen ich zuerst einen Job einrichten muss.

Andrew Yasinsky
quelle
Ich war begeistert davon, über Cronrat zu lesen - einfach und kostenlos. Ich kann nicht herausfinden, wie ich mich anmelden soll. Ist dieser Dienst tot?
Rinogo
0

Ich habe Power Cron nach diesen genauen Anforderungen erstellt. Ich brauchte eine zentrale Sicht auf meine Cron-Jobs und eine Vorstellung von der Abhängigkeit zwischen den Jobs verschiedener Cluster-Mitglieder.

Ich brauchte außerdem mehr Informationen als ich in den Protokollen finden konnte, und fügte Jobprofile hinzu.

Mondkind
quelle
0

Dafür haben wir PushMon ( http://www.pushmon.com) erstellt . Angenommen, Ihr täglicher Job wird um 3 Uhr morgens ausgeführt und endet normalerweise um 4 Uhr morgens. Sie können einen PushMon-Zeitplan von "jeden Tag bis 4:00 Uhr" einrichten. Oder ein etwas weiter fortgeschrittener Zeitplan wie "jeden Tag bis 4:00 Uhr in einer Stunde". Alles, was Sie tun müssen, ist, die PushMon-URL bei jeder Ausführung Ihres Jobs zu "pingen", und Sie werden über fehlende Pings informiert. Wenn Sie sicher sind, dass ein Fehler aufgetreten ist, z. B. wenn Sie eine Ausnahmebedingung abfangen, die Sie nicht behandeln können, können Sie die Warnfunktion auf Anforderung verwenden.

Bienvenido David
quelle
0

Gesundheitschecks ( https://github.com/healthchecks/healthchecks/ ) ist ein Service & Dashboard, das für die Überwachung von Cron-Jobs entwickelt wurde. Es wird in der Produktion verwendet, wird gepflegt und akzeptiert Code-Beiträge.

Es funktioniert ähnlich wie Cronitor, Dead Man's Snitch und Friends: Sie richten Ihren Cron-Job so ein, dass eine HTTP / HTTPS-Anforderung an eine spezielle, eindeutige URL gesendet wird, bevor diese beendet wird. Healthchecks empfängt und protokolliert diese Pings. Es wird ständig überprüft, ob die Pings in den erwarteten Intervallen eintreffen. Wenn ein Problem erkannt wird, erhalten Sie eine Benachrichtigung. Unterstützte Benachrichtigungsmethoden sind E-Mail, Webhooks, Slack, Telegramm, Zwietracht, SMS, Pushover, Pusbullet, PagerDuty, PagerTree, HipChat, VictorOps, OpsGenie.

Sie können dies alles selbst einrichten und hosten, aber wie bei jedem Webdienst ist es mit einigem Aufwand verbunden, den Domain-Namen und das Zertifikat einzurichten, den HTTP-Reverse-Proxy zu konfigurieren, Datenbank-Backups einzurichten usw. Ein relativ einfacher Weg, dies zu erreichen Laufen ist diese Heroku-angepasste Version zu verwenden: https://github.com/iphoting/healthchecks . Ich kenne Leute, die dieses Projekt selbst leiten und Hunderte von Diensten überwachen.

Haftungsausschluss: Ich bin der Autor und betreibe Healthchecks auch als gehosteten Dienst unter https://healthchecks.io

Pēteris Caune
quelle