Un buen health check prueba lo que el servicio necesita para atender a los usuarios: una consulta rápida a la base de datos, la caché, la cola. Responde rápido, no tiene efectos secundarios, no necesita inicio de sesión (o solo una clave sin otros permisos) y devuelve un pequeño cuerpo JSON que indica qué comprobación falló.
Suele haber dos tipos. Una comprobación de liveness indica que el proceso se ejecuta y no debe reiniciarse; es sencilla. Una comprobación de readiness indica que la instancia puede recibir tráfico ahora, dependencias incluidas, para que un balanceador de carga o Kubernetes pueda desviar el tráfico. La monitorización externa necesita la de readiness.
Ten cuidado con las dependencias que no controlas. Si el health check falla cada vez que una API de terceros va lenta, todas las instancias pueden quedar fuera de servicio a la vez. Indica esos casos como degradados en el cuerpo y reserva el código de estado para los fallos que de verdad detienen el servicio.
Ejemplo
GET /health
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
{"status":"ok","checks":{"database":"ok","cache":"ok"}}
Un monitor comprueba el código de estado y que $.status sea ok. Un 503, un tiempo de espera agotado o cualquier otro valor hace fallar la comprobación.