Zum Inhalt springen

Heartbeat (Cronjobs)

Ein Heartbeat-Monitor (Typ push) arbeitet umgekehrt zu den anderen Prüfungen: Nicht OKStatus ruft Ihren Dienst auf, sondern Ihr Job ruft OKStatus bei jedem Lauf auf. Kommt kein Ping rechtzeitig an, gilt der Monitor als ausgefallen und Sie werden alarmiert.

Er eignet sich für alles, was nach Zeitplan läuft und keine URL zum Prüfen hat: Cronjobs, Backups, Queue-Worker, nächtliche Importe, Zertifikatserneuerungen.

Terminal-Fenster
curl -X POST https://api.okstatus.eu/api/v1/monitors \
-H "Authorization: Bearer $OKSTATUS_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Nächtliches Backup", "type": "push", "url": "naechtliches-backup", "interval": 86400, "gracePeriod": 3600 }'
  • Bei einem Heartbeat ist url nur eine Bezeichnung: Es wird nichts abgerufen.
  • interval ist die Laufhäufigkeit des Jobs in Sekunden.
  • gracePeriod ist die zusätzliche Frist vor dem Ausfall. Ohne Angabe entspricht sie interval.

Die Antwort enthält die pushUrl des Monitors:

{
"data": {
"id": "…",
"type": "push",
"pushToken": "…",
"pushUrl": "https://backend.okstatus.eu/push/…"
}
}

Dieselbe pushUrl kommt bei jedem Lesen des Monitors mit einem Schlüssel mit Zugriff Voll zurück. Ein Schlüssel mit Zugriff Nur Lesen und ein Mitglied mit der Rolle Viewer sehen den Monitor ohne Token und URL. Mit Terraform bauen Sie die URL aus dem Attribut push_token:

output "backup_ping_url" {
value = "https://backend.okstatus.eu/push/${okstatus_monitor.backup.push_token}"
sensitive = true
}

Rufen Sie die URL am Ende jedes erfolgreichen Laufs auf. POST, GET und HEAD zählen alle als up-Ping:

Terminal-Fenster
curl -fsS -m 10 --retry 3 -X POST https://backend.okstatus.eu/push/<token>

Eine Crontab-Zeile, die nur bei Erfolg des Jobs pingt:

Terminal-Fenster
0 3 * * * /usr/local/bin/backup.sh && curl -fsS -m 10 --retry 3 -X POST https://backend.okstatus.eu/push/<token> > /dev/null

Um einen Fehler zu melden oder eine Nachricht zu senden, verwenden Sie POST mit einem Body (unten): Ein GET ist immer ein up-Ping. Linkvorschauen in Chat-Tools rufen URLs per GET ab – ein weiterer Grund, die URL nicht in eine Unterhaltung einzufügen.

Der Body ist optional. Wenn vorhanden, ist er JSON:

FeldTypBeschreibung
statusStringup (Standard) oder down: meldet einen Fehler sofort, ohne zu warten
msgStringBis zu 2.000 Zeichen, mit der Prüfung gespeichert und im Dashboard und in Alarmen angezeigt
pingIntegerDauer des Jobs in Millisekunden (0 bis 60.000)
Terminal-Fenster
if ! /usr/local/bin/backup.sh; then
curl -fsS -m 10 -X POST https://backend.okstatus.eu/push/<token> \
-H "Content-Type: application/json" \
-d '{ "status": "down", "msg": "backup.sh ist fehlgeschlagen" }'
fi

Ein leerer Body ist ein up-Ping. Ein Body, der kein gültiges JSON ist oder dessen Felder nicht zur Tabelle passen, wird mit 400 abgelehnt und nichts wird gespeichert: Ein Tippfehler wie "status": "failed" kann nicht als Erfolg durchgehen.

Der Monitor gilt als ausgefallen, wenn seit dem letzten Ping interval + gracePeriod Sekunden lang keiner angekommen ist. OKStatus prüft alle 30 Sekunden.

  • Vor dem ersten Ping hat der Monitor keinen Zustand und fällt nie aus: Senden Sie beim Einrichten des Jobs einen Ping.
  • Ein Ping nach einer Überschreitung setzt den Monitor wieder auf online und sendet den Wiederherstellungsalarm.
  • Pausiert: Pings werden angenommen, aber nirgends gespeichert und alarmieren niemanden. Beim Fortsetzen zählt der zuletzt empfangene Ping.
  • Stummgeschaltet oder im Wartungsfenster: Pings werden gespeichert, Alarme zurückgehalten, wie bei jedem Monitor.

Die Ping-URL hat keine Region: Die Mehrheitsregel der Multi-Region-Prüfungen gilt für Heartbeats nicht.

StatusBodyBedeutung
200{ "ok": true }Ping gespeichert
200{ "ok": true, "paused": true }Der Monitor ist pausiert: nichts gespeichert
400{ "error": "INVALID_BODY" }Der Body ist kein JSON oder ein Feld liegt außerhalb der Grenzen: nichts gespeichert
404{ "error": "NOT_FOUND" }Unbekanntes Token, oder der Monitor ist kein Heartbeat
413{ "error": "PAYLOAD_TOO_LARGE" }Body größer als 8 KiB
429{ "error": "RATE_LIMIT_EXCEEDED" }Mehr als 30 Pings pro Minute für diesen Monitor; siehe Retry-After

Das Token in der URL ist die einzige Zugangsangabe: Wer es hat, kann Pings senden und einen fehlgeschlagenen Job verbergen. Bewahren Sie die URL in einem Secret oder einer Umgebungsvariable auf statt in einem öffentlichen Repository, und fügen Sie sie weder in Tickets noch in Chats ein. Bei einem Leck löschen Sie den Monitor und legen einen neuen an: Das Token lässt sich nicht an Ort und Stelle erneuern.

Der Prometheus-Export liefert okstatus_push_last_received_timestamp_seconds, den Zeitpunkt des letzten Pings, für jeden Heartbeat-Monitor.