NEWS
Cron-Jobs überwachen: Wie macht ihr das?
-
Hi,
wie stellt ihr denn sicher, dass eingerichtete Cron-Jobs ihre Arbeit verrichtet haben?
Meine Umgebung: Proxmox, mehrere VMs/CTs auf denen auch Cronjobs (Aufruf von .sh-Dateien) laufen.
Idee: Aktivitäten der cronjobs loggen in einer log-Datei auf einem share, und diese Datei dann regelmäßig mit ioBroker prüfen.
Mir geht es auch darum, zeitnah zu wissen, wenn z.B. der Backup-Job xy am Dienstag um 4:00 Uhr Fehler hatte. Das könnte in der Datei entsprechend geloggt werden.Auch könnte ein ioBroker Script feststellen, dass etwa ein Cronjob schon seit x Tagen nicht mehr gelaufen ist und dann einen Datenpunkt "cron.xyz" auf "false" setzen.
Dachte also an ein Script, welches das ganze überwacht, und entsprechend Datenpunkte setzt.Wie macht ihr das?
-
@acgua also, mal unabhängig von ioBroker, ist es beim Monitoring am einfachsten den Status dort zu erfassen wo er entsteht.
Also, in deinen .sh Scripten gleich die Prüfung mit einbauen ob es Erfolg oder Fehler hatte und das an das Monitoring-System melden.
Ok, hier ist ioBroker dein Monitoring-System. Ergo also z.B. immer wenn es gelaufen ist einen oder mehrere entsprechende Datenpunkte aktualisieren. z.B. wann der letzte Start war, Laufzeit oder andere Informationen.
In ioBroker wiederum kannst du diese Datenpunkte auswerten und entsprechende Meldungen oder Darstellungen machen.Der Test ob ein Skript nicht lief kannst du auch an den Datenpunkten machen. Entweder indem du überprüfst wann ein Datenpunkt das letzte mal aktualisiert wurde. Oder ich nutze gerne einen Datenpunkt in ich die letzte Startzeit als UNIX-Zeit hinterlege ( https://de.wikipedia.org/wiki/Unixzeit ), das sind die Sekunden seit dem 1.1.1970
Damit kann man nämlich prima rechnen und z.B. Zeitdifferenzen ermitteln.Logs auswerten ... ok, ist aber ziemlich mühsam. Lieber im Script selbst eine Entscheidung über oder Gut oder Schlecht treffen. Das Log ist dann natürlich für die Fehlersuche gut.
-
Jupp, so mache ich das auch:
Jedes Script hat einen Datenpunkt mit der Anzahl der Durchläufe. Jedes Script, egal ob JS, Blockly, bash... reduziert dann bei Erfolg diesen Zähler. In der VIS wird anhand des Zählers dann die Textfarbe entsprechend geändert.
5 Minuten nach Mitternacht werden dann alle Zähler wieder auf ihren Ursprungswert gesetzt, vorher aber geprüft ob die Gesamtzahl = 0 ist (also alle Jobs liefen --> sonst Fehlermledung) bzw. ein Zähler nicht auf "0" steht --> hier lasse ich mir nur einen Text ausgeben.
-
Vielen Dank für eure Antworten und Ausführungen! Wirklich sehr hilfreich...
@bananajoe said in Cron-Jobs überwachen: Wie macht ihr das?:
Logs auswerten ... ok, ist aber ziemlich mühsam. Lieber im Script selbst eine Entscheidung über oder Gut oder Schlecht treffen. Das Log ist dann natürlich für die Fehlersuche gut.
Hier dachte ich, dass ein bash Logfile zuverlässiger ist, als ioBroker per curl (simple-api Adapter) im Moment der Skriptausführung zu füttern, und sich darauf zu verlassen, dass der Adapter wirklich läuft, usw.
Das ioBroker-Script hingegen würde nur das Logfile vom Server regelmäßig auslesen, parsen und damit die Infos in Datenpunkte schreiben.
Das "Logfile" könnte man dabei auch JavaScript-freundlicher erstellen, also etwa als JSON.
Nur so eine Idee... -
@acgua Naja, Idealerweise hast du für den Fall eines gescheiterten Curl-Aufruf auch noch eine Fehlerbehandlung in deinem Skript.
Meine persönlichen Programmierregeln:
- Verlasse dich auf nichts, prüfe vorher alles. Quelle, Ziel, benötigte Befehle
- Baue ein umfangreiches Logging und Debugging ein. Wenn es läuft kann man das ja abschalten
- Prüfe nach jeder Aktion deren Erfolg und melde dies
Gescheiterte Curl-Aufrufe könntest du zum Beispiel sammeln und später absenden oder auf andere Art Benachrichtigen (Log das nur dann genutzt wird)
Monitoring ist durchaus komplex, sonst gäbe es die extra Software nicht dafür.
Ich nutze deshalb Zabbix, da kann ich meine Daten abladen (Item) und durch mehrer parallele Prüfungen (Trigger) prüfen ob ein Fall vorliegt der eine Benachrichtigung notwendig macht (in 5 Abstufungen).
Ob meine Waschmaschine aus, im Standby, wäscht oder fertig ist werte ich deshalb mit Zabbix statt mit ioBroker aus. Da kann ich mal eben den Stromverbauch der letzten 10 Minuten im Bezug zu den letzten 10 Minuten davor überwachen und das sind nur 2 Ausdrücke die ich mir eben zusammenklicke.Hier im Forum wurde neulich über CheckMK diskutiert. Kenne ich von einem Kunden der damit die Steuerungssystem seiner Satelliten überwacht. CheckMK wie ich es gezeigt bekommen habe reagiert aber z.B. immer nur auf den lezten Wert und hat keine Historie.
Das mit dem Senden der Zustände und einem Fehler wäre aber auch in allen mir bekannten Systemen ein Problem. Bei Zabbix könnte man einen lokalen Proxy einsetzen, der Puffert per Default die Werte 1h zwischen (lässt sich erhöhen).
Aber auf ioBroker Ebene reagierst du ja dann auch darauf wenn Werte ausbleiben (noData) oder gar der ganze Host nicht erreichbar ist (Heartbeat + Ping) oder dort Dienste laufen (Prozess/Dienstüberwachung + Prüfung ob die Ports antworten + Check ob auf den Ports die richtigen Antworten kommen), neben den Kinderkram wie CPU, RAM und Festplattenplatz.
Monitoring ist halt ein riesiges Feld, wenn man ersteinmal anfängt kann es passieren das man kein Maß dafür findet. (im Sinne von Maß halten)
-
@bananajoe
Hallöchen !
Da sprichst du gerade mein nächstes todo auf meiner Liste an --> Logging & Co monitoren.Du sprichst da von Zabbix - ich hatte eigentlich CheckMK ins Auge gefasst. Aber die Frage ist welches ist denn zu empfehlen deiner Meinung nach ? Sind ja beide sehr umfangreich und komplex.
-
@segway ich bin voreingenommen: Zabbix weil du da fast alles über das Webinterface machen kannst.
Sonst nimm dir Zeit und schaue dir die Tools deiner Wahl mal je ein paar Stunden an (so bin ich bei ioBroker statt Home Assistent gelandet)
Installation Zabbix Server unter Debian/Ubuntu (damit schaffen es auch unsere Azubis): https://znil.net/index.php?title=Zabbix_Server_%2B_Agent_unter_Ubuntu_20.04_LTS_installieren
Ansonsten auf der Webseite von Zabbix / Download zu deiner Linux Version durchklicken, Kurzanleitung steht dann da.
Oder per Docker etc.