Cron-Monitore
Heartbeat-Monitoring für alles, was nach Zeitplan läuft -- Cronjobs, Hintergrund-Worker, Queue-Consumer, Batch-Prozesse. Deine Aufgabe pingt eine eindeutige URL, wenn sie durchgelaufen ist. Bleibt der Ping zum erwarteten Zeitpunkt aus, wirst du benachrichtigt.
So funktioniert es
Jeder Cron-Monitor hat eine eindeutige Ping-URL. Deine geplante Aufgabe schickt nach erfolgreicher Ausführung einen HTTP-Request an diese URL. Hoppla überwacht die Zeit zwischen den Pings und vergleicht sie mit dem von dir festgelegten Zeitplan.
Kommt innerhalb der Karenzzeit kein Ping, legt Hoppla einen Vorfall an und informiert deine konfigurierten Kanäle.
Der Ablauf im Überblick:
- Du erstellst einen Cron-Monitor im Dashboard und legst seinen Zeitplan fest (einen Cron-Ausdruck).
- Du kopierst die Ping-URL und baust sie in deine Aufgabe ein.
- Deine Aufgabe pingt die URL bei jeder Ausführung.
- Hoppla passt auf und benachrichtigt dich, wenn ein Ping ausbleibt.
Einrichtung
- Gehe zu Monitore im Dashboard und klick auf Cron-Monitor hinzufügen.
- Gib dem Monitor einen aussagekräftigen Namen (z. B. "Nächtliches Datenbank-Backup").
- Leg den Zeitplan als Cron-Ausdruck fest (z. B.
0 * * * *für stündlich,0 0 * * *für täglich). - Leg die Karenzzeit in Minuten fest -- wie lange Hoppla nach der erwarteten Zeit wartet, bevor es Alarm schlägt (Standard 5, minimal 1, maximal 1440).
- Kopiere die generierte Ping-URL.
- Bau die URL in deine Aufgabe ein (Beispiele findest du weiter unten).
Integrationsbeispiele
Bash / Crontab
Häng einfach einen curl-Aufruf an deinen Befehl an. Das && sorgt dafür, dass der Ping nur bei Erfolg rausgeht:
# Backup jede Stunde ausführen, bei Erfolg Hoppla pingen
0 * * * * /usr/bin/my-backup-script && curl -s https://app.hoppla.dev/api/ping/YOUR-UUID > /dev/nullPHP
Ruf die Ping-URL am Ende deiner Aufgabe auf:
// At the end of your scheduled task:
file_get_contents('https://app.hoppla.dev/api/ping/YOUR-UUID');Python
import requests
# Your task logic here
# ...
# Ping Hoppla when done
requests.get('https://app.hoppla.dev/api/ping/YOUR-UUID')Node.js
// Your task logic here
// ...
// Ping Hoppla when done
fetch('https://app.hoppla.dev/api/ping/YOUR-UUID');Laravel Task Scheduling
$schedule->command('app:daily-report')
->daily()
->thenPing('https://app.hoppla.dev/api/ping/YOUR-UUID');Karenzzeiten
Die Karenzzeit ist der Puffer, den Hoppla nach dem erwarteten Ping einräumt, bevor ein Vorfall angelegt wird. So fangen Aufgaben, die mal ein paar Minuten zu spät laufen, keinen Fehlalarm.
Ein Beispiel: Deine Aufgabe läuft stündlich und du stellst eine Karenzzeit von 5 Minuten ein:
- Erwarteter Ping: alle 60 Minuten
- Karenzzeit: 5 Minuten
- Alarm nach: 65 Minuten Stille
Wähle eine Karenzzeit, die zur normalen Schwankung deiner Aufgabe passt. Ein nächtliches Backup, das manchmal 10 Minuten länger braucht, sollte mindestens 10 Minuten Karenzzeit bekommen.
Status melden
Ein einfacher GET-Request an die Ping-URL ist ein reiner Lebenszeichen-Ping -- er sagt Hoppla "ich bin gelaufen". Um einen konkreten state zu melden, schick einen POST-Request mit dem Wert im Request-Body (Form-encoded oder JSON). Ein state, der bei einem GET als Query-Parameter übergeben wird, wird ignoriert.
# Einen fehlgeschlagenen Lauf melden
curl -X POST https://app.hoppla.dev/api/ping/YOUR-UUID -d 'state=fail'Erlaubt sind diese Werte:
| Status | Bedeutung |
|---|---|
start | Markiert den Beginn eines Laufs. Zusammen mit complete misst Hoppla so die Dauer des Laufs. |
complete | Markiert das erfolgreiche Ende eines mit start begonnenen Laufs. |
ok | Meldet einen erfolgreichen Lauf (ein einfacher Ping ohne state wird genauso behandelt). |
fail | Meldet, dass die Aufgabe fehlgeschlagen ist. Hoppla legt sofort einen Vorfall an, ohne auf einen ausbleibenden Ping zu warten. |
log | Ein passiver Heartbeat, der den Ping festhält, ohne den Status des Monitors zu ändern. |
Um zu messen, wie lange ein Job braucht, schick start per POST beim Beginn und complete am Ende:
curl -X POST https://app.hoppla.dev/api/ping/YOUR-UUID -d 'state=start'
# ... Aufgabe ausführen ...
curl -X POST https://app.hoppla.dev/api/ping/YOUR-UUID -d 'state=complete'