Metryki i percentyle w praktyce
Dobierzesz typ metryki i odczytasz p50, p95 oraz p99 bez mylenia ich ze średnią.
1. Krótka teoria
Counter liczy zdarzenia i rośnie, dopóki proces się nie zrestartuje; z takiego licznika oblicza się tempo żądań lub błędów. Gauge pokazuje bieżącą wartość, która może rosnąć i maleć, na przykład długość kolejki albo liczbę zajętych połączeń. Histogram grupuje obserwacje czasu odpowiedzi w przedziały, dzięki czemu można szacować percentyle. p50 to mediana, p95 oznacza granicę, poniżej której mieści się około 95% pomiarów, a p99 pokazuje dalszy ogon wolnych odpowiedzi. Średnia może ukrywać problem małej grupy użytkowników, dlatego czytaj ją razem z percentylami i liczbą próbek. Metryki zasobów obejmują CPU, pamięć, dysk i sieć. Aplikacja powinna pokazywać czas żądań, błędy HTTP, głębokość kolejki billing-worker oraz użycie puli połączeń app-db. Nie porównuj p95 z różnych przedziałów czasu bez sprawdzenia ruchu. W Prometheus klasyczny histogram pozwala szacować percentyl przez histogram_quantile; to przykład sposobu analizy, bez instalacji narzędzia w ShellForge.
2. Przykłady komend
curl -sS -o /dev/null -w '%{time_total}
' http://127.0.0.1:8000/health
Mierzy czas pojedynczego żądania, który nie jest jeszcze percentylem.
$ curl -sS -o /dev/null -w '%{time_total}
' http://127.0.0.1:8000/health
top -b -n 1 | head -n 20
Pokazuje chwilowy obraz CPU i procesów hosta.
$ top -b -n 1 | head -n 20
free -h
Sprawdza dostępną pamięć hosta.
$ free -h
df -h /
Sprawdza zajętość systemu plików.
$ df -h /
ip -s link show
Pokazuje liczniki ruchu i błędów interfejsów sieciowych.
$ ip -s link show
docker compose exec app-db psql -U orders -d orders -c 'SELECT count(*) FROM pg_stat_activity;'
Odczytuje liczbę bieżących połączeń PostgreSQL.
$ docker compose exec app-db psql -U orders -d orders -c 'SELECT count(*) FROM pg_stat_activity;'
histogram_quantile(0.95, sum by (le) (rate(http_request_duration_seconds_bucket[5m])))
Przykładowe zapytanie PromQL o p95 klasycznego histogramu żądań.
histogram_quantile(0.95, sum by (le) (rate(http_request_duration_seconds_bucket[5m])))
3. Zadanie praktyczne
orders-api trzy metryki: licznik wszystkich żądań, gauge zajętych połączeń bazy i histogram czasu odpowiedzi. Dopisz jednostki i okno czasu. Zinterpretuj sytuację: p50 = 100 ms, p95 = 800 ms, p99 = 2 s, a średnia = 180 ms. Wskaż, dlaczego sama średnia nie opisuje doświadczenia najwolniejszych żądań. Porównaj to z CPU, pamięcią, dyskiem, ruchem sieciowym i głębokością kolejki.
4. Typowe błędy
- Używanie countera dla wartości, która może maleć.
- Odczytywanie pojedynczego czasu curl jako p95 całej usługi.
- Porównywanie percentyli bez wspólnego okna i liczby próbek.
- Ignorowanie p99, bo średnia wygląda dobrze.
- Mieszanie jednostek sekund i milisekund na jednym wykresie.
5. Podsumowanie
Counter liczy zdarzenia, gauge pokazuje zmienny stan, a histogram opisuje rozkład obserwacji. Percentyle odsłaniają wolny ogon odpowiedzi, którego średnia może nie pokazać. Zawsze podawaj jednostkę, okno czasu i liczbę próbek.