Dobry health check testuje to, czego usługa potrzebuje do obsługi użytkowników: szybkie zapytanie do bazy danych, cache, kolejkę. Odpowiada szybko, nie ma skutków ubocznych, nie wymaga logowania (lub tylko klucza bez innych uprawnień) i zwraca niewielką treść JSON wskazującą, który test się nie powiódł.
Zwykle są dwa rodzaje. Liveness check mówi, że proces działa i nie należy go restartować; pozostaje prosty. Readiness check mówi, że instancja może teraz przyjmować ruch, łącznie z zależnościami, więc load balancer lub Kubernetes może ją ominąć. Monitorowanie zewnętrzne potrzebuje tego drugiego.
Uważaj na zależności, nad którymi nie masz kontroli. Jeśli health check zawodzi za każdym razem, gdy zewnętrzne API zwalnia, wszystkie instancje mogą zostać jednocześnie wyłączone z ruchu. Zgłaszaj takie przypadki jako obniżoną wydajność w treści odpowiedzi, a kod statusu zostaw dla awarii, które naprawdę zatrzymują usługę.
Przykład
GET /health
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
{"status":"ok","checks":{"database":"ok","cache":"ok"}}
Monitor sprawdza kod statusu oraz to, czy $.status ma wartość ok. Kod 503, przekroczenie limitu czasu lub każda inna wartość oznacza nieudane sprawdzenie.