Health checks
Aktywne sondowanie backendów z progami healthy/unhealthy, timeoutami i natychmiastowym failoverem. Konfiguracja i metryki.
Jak działa#
Health checker co interval wysyła probe na path każdego backendu. Wyniki przechodzą przez progi:
probe OK × healthy_threshold → healthy
probe FAIL × unhealthy_threshold → unhealthy
Domyślnie: 2 sukcesy z rzędu oznaczają healthy, 3 porażki — unhealthy. Asymetria jest celowa: szybkie wykrycie awarii, ostrożne przywracanie.
Konfiguracja#
health_check:
interval: 5s
timeout: 2s
path: /health
healthy_threshold: 2
unhealthy_threshold: 3
| Pole | Znaczenie |
|---|---|
interval | Czas między rundami sondowania |
timeout | Timeout pojedynczego probe |
path | Endpoint zdrowia na backendzie |
healthy_threshold | Sukcesy z rzędu do przywrócenia |
unhealthy_threshold | Porażki z rzędu do wyłączenia |
Przykład: agresywne wykrywanie awarii#
health_check:
interval: 2s
timeout: 1s
path: /healthz
healthy_threshold: 1
unhealthy_threshold: 2
Backend wypada z rotacji po ~4 s od awarii i wraca po pierwszym udanym probe. Dobre dla stateless API, gdzie szybki failover jest ważniejszy niż ostrożność.
Przykład: konserwatywne przywracanie#
health_check:
interval: 10s
timeout: 3s
path: /ready
healthy_threshold: 5
unhealthy_threshold: 3
Backend wraca dopiero po 5 kolejnych sukcesach (~50 s) — dobre dla backendów z długim warmupem (cache, JIT, połączenia do DB).
Failover w praktyce#
Backend 1: healthy ──┐
Backend 2: healthy ──┼── picker wybiera oba
│
Backend 1: 3× FAIL ──┘── unhealthy → picker wybiera tylko Backend 2
│
Backend 1: 2× OK ──── healthy → wraca do rotacji
W czasie failoveru requesty idą wyłącznie do zdrowych backendów. Jeśli żaden nie jest dostępny, proxy zwraca 503 service_unavailable z request ID.
Metryki#
| Metryka | Typ | Opis |
|---|---|---|
backend_healthy | gauge | 1 = healthy, 0 = unhealthy |
backend_healthchecks_total | counter | Wyniki probe (result="success|failure") |
curl -s http://localhost:8080/metrics | grep backend_healthy
backend_healthy{backend="http://localhost:8081"} 1
backend_healthy{backend="http://localhost:8082"} 0
Podgląd stanu#
curl -H "Authorization: Bearer $ADMIN_TOKEN" http://localhost:8080/admin/backends
{
"backends": [
{ "url": "http://localhost:8081", "healthy": true, "admin_down": false, "in_flight": 2 },
{ "url": "http://localhost:8082", "healthy": false, "admin_down": false, "in_flight": 0 }
]
}
Wskazówka
Health check a circuit breaker to dwie niezależne warstwy: health check sonduje aktywnie w tle, breaker reaguje pasywnie na błędy prawdziwych requestów. Razem dają szybszy failover niż każdy z osobna.