Допишите PromQL-запросы для частоты ошибок 5xx в секунду и 95-го перцентиля задержки.
Есть счётчик Prometheus http_requests_total с меткой status и гистограмма http_request_duration_seconds, чьи серии _bucket несут метку le.
Допишите два PromQL-выражения (Prometheus query language):
# 1) частота ошибок 5xx в секунду за последние 5 минут
sum(rate(______________________[5m]))
# 2) 95-й перцентиль задержки запроса за 5 минут
histogram_quantile(0.95, ______________________)
Заполните оба пропуска. Не усредняйте задержку и не усредняйте перцентили.
Частота ошибок — это rate() по счётчику http_requests_total, отфильтрованному по 5xx и за 5m. Для p95 берут histogram_quantile(0.95, ...) по rate от серий _bucket, но сперва нужен sum by (le). Задержку не усредняют, и перцентили нельзя усреднять между инстансами — сначала агрегируют бакеты, затем берут квантиль.
- ✗Усреднять задержку или перцентиль каждого инстанса вместо агрегации бакетов
- ✗Подавать в histogram_quantile итог счётчика, а не rate от серий _bucket
- ✗Забыть
sum by (le), из-за чего бакеты многих инстансов не складываются
- →Почему перед
histogram_quantileнуженsum by (le)при опросе многих инстансов? - →Почему среднее двух p95-значений инстансов — это не p95 по всему флоту?
Решение
Две метрики, два приёма. Ошибки — это rate() по счётчику, отфильтрованному по статусу. Задержка — это квантиль по бакетам гистограммы, а не среднее.
# 1) частота ошибок 5xx в секунду за 5m — rate() по счётчику, оставить 5xx, сложить:
sum(rate(http_requests_total{status=~"5.."}[5m]))
# 2) p95 задержки за 5m — сложить бакеты по le, ЗАТЕМ взять квантиль:
histogram_quantile(0.95, sum by (le) (rate(http_request_duration_seconds_bucket[5m])))
Почему sum by (le). Каждый инстанс отдаёт свои серии _bucket. histogram_quantile восстанавливает перцентиль из формы бакетов, поэтому бакеты сперва складывают по метке le — иначе квантиль считается по одному инстансу. Почему не среднее. Среднее задержки прячет хвост: mean 20ms может скрывать p99 в 2s. И перцентили нельзя усреднять между инстансами — p95 флота выводят из объединённых бакетов, а не из среднего p95.