Un buon health check verifica ciò di cui il servizio ha bisogno per servire gli utenti: una query veloce al database, la cache, la coda. Risponde in fretta, non ha effetti collaterali, non richiede login (o solo una chiave senza altri permessi) e restituisce un piccolo corpo JSON che indica quale controllo è fallito.
Di solito ce ne sono due tipi. Un liveness check dice che il processo è in esecuzione e non va riavviato; resta semplice. Un readiness check dice che l’istanza può ricevere traffico adesso, dipendenze comprese, così un load balancer o Kubernetes può instradare altrove. Il monitoraggio esterno richiede il tipo readiness.
Fai attenzione alle dipendenze che non controlli. Se l’health check fallisce ogni volta che un’API di terze parti è lenta, tutte le istanze possono essere messe fuori servizio contemporaneamente. Segnalale come degradate nel corpo della risposta e riserva il codice di stato ai guasti che bloccano davvero il servizio.
Esempio
GET /health
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
{"status":"ok","checks":{"database":"ok","cache":"ok"}}
Un monitor controlla il codice di stato e che $.status sia uguale a ok. Un 503, un timeout o qualsiasi altro valore fa fallire il controllo.