Ein guter Health Check testet, was der Dienst braucht, um Nutzer zu bedienen: eine schnelle Abfrage an die Datenbank, den Cache, die Queue. Er antwortet schnell, hat keine Seiteneffekte, braucht keinen Login oder nur einen Schlüssel ohne weitere Rechte und gibt einen kleinen JSON-Body zurück, der sagt, welche Prüfung fehlgeschlagen ist.
Meist gibt es zwei Arten. Ein Liveness-Check sagt, dass der Prozess läuft und nicht neu gestartet werden muss; er bleibt einfach. Ein Readiness-Check sagt, dass die Instanz jetzt Traffic annehmen kann, inklusive Abhängigkeiten, sodass ein Load Balancer oder Kubernetes um sie herum routen kann. Externes Monitoring braucht die Readiness-Variante.
Vorsicht bei Abhängigkeiten, die Sie nicht kontrollieren. Schlägt der Health Check fehl, sobald eine Drittanbieter-API langsam ist, können alle Instanzen gleichzeitig aus dem Betrieb genommen werden. Melden Sie diese im Body als eingeschränkt und reservieren Sie den Statuscode für Fehler, die den Dienst wirklich lahmlegen.
Beispiel
GET /health
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
{"status":"ok","checks":{"database":"ok","cache":"ok"}}
Ein Monitor prüft den Statuscode und dass $.status gleich ok ist. Ein 503, ein Timeout oder jeder andere Wert lässt die Prüfung fehlschlagen.