Een goede health check test wat de dienst nodig heeft om gebruikers te bedienen: een snelle query op de database, de cache, de queue. Hij antwoordt snel, heeft geen bijwerkingen, vraagt geen login of alleen een sleutel zonder andere rechten, en geeft een kleine JSON-body terug die zegt welke controle mislukte.
Er zijn meestal twee soorten. Een liveness check zegt dat het proces draait en niet herstart hoeft te worden; die blijft eenvoudig. Een readiness check zegt dat de instantie nu verkeer aankan, afhankelijkheden inbegrepen, zodat een load balancer of Kubernetes eromheen kan routeren. Externe monitoring wil de readiness-variant.
Wees voorzichtig met afhankelijkheden die je niet zelf beheert. Als de health check faalt zodra een externe API traag is, kan elke instantie tegelijk uit de roulatie gaan. Meld die als degraded in de body, en bewaar de statuscode voor storingen die de dienst echt stilleggen.
Voorbeeld
GET /health
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
{"status":"ok","checks":{"database":"ok","cache":"ok"}}
Een monitor controleert de statuscode en of $.status gelijk is aan ok. Een 503, een time-out of elke andere waarde laat de controle mislukken.