Monitoring i utrzymanie Średnio zaawansowany 55 min

Health checki i gotowość aplikacji

Odróżnisz działający proces od gotowej usługi i sprawdzisz endpoint /health z limitem czasu.

Wróć do listy lekcji

1. Krótka teoria

Aktywny proces systemd nie gwarantuje, że aplikacja odpowiada na żądania. Health check wykonuje konkretne sprawdzenie, na przykład żądanie do /health, i ocenia kod HTTP oraz czas odpowiedzi. Liveness odpowiada na pytanie, czy proces nadal działa poprawnie i wymaga ewentualnego restartu. Readiness mówi, czy instancja może przyjmować ruch; może uwzględniać połączenie z bazą, ale nie powinna wykonywać kosztownych operacji. Brak gotowości nie zawsze oznacza konieczność restartu. Zależności mogą być chwilowo niedostępne, dlatego wynik trzeba interpretować razem z logami i stanem bazy. Kod 200 zwykle oznacza pozytywny wynik, a 503 brak gotowości. Sama strona główna 200 nie dowodzi działania ważnych funkcji. Ustaw krótki timeout, aby zawieszony endpoint nie blokował sprawdzania. Ograniczona liczba ponowień zmniejsza wpływ pojedynczego błędu sieci, lecz nie może ukrywać długiej awarii. Endpoint nie powinien ujawniać sekretów ani szczegółów infrastruktury.

2. Przykłady komend

systemctl status orders-api --no-pager

Sprawdza stan procesu, ale nie zastępuje testu HTTP.

$ systemctl status orders-api --no-pager
curl -sS -o /dev/null -w '%{http_code} ' http://127.0.0.1:8000/health

Odczytuje kod odpowiedzi endpointu zdrowia.

$ curl -sS -o /dev/null -w '%{http_code}
' http://127.0.0.1:8000/health
200
curl --fail --max-time 2 http://127.0.0.1:8000/health

Zwraca błąd dla niepowodzenia HTTP i ogranicza czas oczekiwania.

$ curl --fail --max-time 2 http://127.0.0.1:8000/health
curl --fail --max-time 2 --retry 2 --retry-delay 1 http://127.0.0.1:8000/health

Ponawia krótkotrwały błąd najwyżej dwa razy.

$ curl --fail --max-time 2 --retry 2 --retry-delay 1 http://127.0.0.1:8000/health
journalctl -u orders-api -n 30 --no-pager

Łączy wynik health checku z ostatnimi logami usługi.

$ journalctl -u orders-api -n 30 --no-pager
ss -lntp | grep ':8000'

Sprawdza nasłuch portu aplikacji.

$ ss -lntp | grep ':8000'

3. Zadanie praktyczne

Dla ćwiczeniowego orders-api przygotuj kontrakt /health: kod 200, gdy instancja może obsługiwać ruch, i 503 przy braku krytycznej zależności. Opisz osobno prosty test liveness i readiness. Sprawdź proces, port oraz żądanie HTTP z timeoutem. Zasymuluj niedostępność testowej bazy i zapisz, dlaczego aktywny systemd nie wystarcza do uznania usługi za gotową.

4. Typowe błędy

  • Traktowanie systemctl active jako dowodu poprawnej odpowiedzi aplikacji.
  • Łączenie liveness z każdą chwilową awarią zależności i wywoływanie pętli restartów.
  • Brak timeoutu, przez co sprawdzenie może się zawiesić.
  • Nieograniczone ponawianie, które opóźnia wykrycie trwałej awarii.
  • Zwracanie haseł lub szczegółów połączenia w publicznym endpointcie.

5. Podsumowanie

Health check ocenia zachowanie aplikacji, a nie tylko jej proces. Liveness pomaga wykryć instancję wymagającą restartu, readiness określa gotowość do ruchu. Kod HTTP, timeout i ograniczone ponowienia tworzą użyteczny sygnał do monitoringu.

Flow nauki
  1. Teoria
  2. Przykład
  3. Ćwiczenie
  4. Quiz
  5. Praktyka
  6. Podsumowanie