Et godt health check tester det, tjenesten skal bruge for at betjene brugerne: en hurtig forespørgsel til databasen, cachen, køen. Det svarer hurtigt, har ingen sideeffekter, kræver intet login eller kun en nøgle uden andre rettigheder og returnerer en lille JSON-body, der fortæller, hvilket tjek der fejlede.
Der er som regel to slags. Et liveness-tjek siger, at processen kører og ikke skal genstartes; det holdes simpelt. Et readiness-tjek siger, at instansen kan tage trafik nu, inklusive afhængigheder, så en load balancer eller Kubernetes kan rute uden om den. Ekstern overvågning skal bruge readiness-typen.
Vær forsigtig med afhængigheder, du ikke selv styrer. Hvis health checket fejler, hver gang et tredjeparts-API er langsomt, kan alle instanser blive taget ud af drift på én gang. Rapportér dem som forringede i body'en, og gem statuskoden til fejl, der virkelig stopper tjenesten.
Eksempel
GET /health
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
{"status":"ok","checks":{"database":"ok","cache":"ok"}}
En monitor tjekker statuskoden, og at $.status er lig med ok. En 503, en timeout eller en anden værdi får tjekket til at fejle.