Какие метрики важны для HTTP API для отслеживания количества 500 ошибок и времени ответа
Что проверяют
Умеете ли вы превратить «следить за ошибками и скоростью» в конкретные метрики, которые можно посчитать, агрегировать с нескольких инстансов и повесить на алерт. Следом почти всегда спрашивают, почему среднее время ответа плохо подходит для алерта и откуда в Spring Boot берутся эти цифры.
Как отвечать
Опирайтесь на метод RED: частота запросов, доля ошибок, длительность. В Spring Boot всё это уже собирает Micrometer через Actuator в таймер http.server.requests с тегами method, uri, status, outcome и exception, а Prometheus забирает его с /actuator/prometheus.
- доля 5xx: не абсолютное число ошибок, а отношение
rateзапросов соstatus=~"5.."кrateвсех запросов за окно, например 5 минут. Абсолютное число растёт вместе с трафиком и само по себе ничего не говорит; - перцентили задержки: p50 для типичного пользователя, p95 и p99 для хвоста. Чтобы агрегировать по инстансам, включают гистограмму
management.metrics.distribution.percentiles-histogram.http.server.requests=trueи считаютhistogram_quantileв PromQL; - разрез по эндпоинтам: тег
uriсодержит шаблон вроде/orders/{id}, поэтому медленный отчёт не тонет среди быстрых health-check; - насыщение: занятые потоки Tomcat, ожидание соединения в пуле HikariCP (
hikaricp.connections.pending), паузы GC. Они объясняют, почему выросли p99 и 5xx.
Хорошо закончить SLO: например, 99,9% запросов без 5xx за 30 дней и алерт по скорости расходования бюджета ошибок, а не по каждому всплеску.
Где спотыкаются
Усредняют перцентили. p99 с трёх инстансов нельзя сложить и поделить на три, получится число без смысла. Агрегировать можно только бакеты гистограммы.
Смотрят только на метрики приложения. Если под упал или прокси не дождался ответа, клиент получит 502 или 504 от балансировщика, а http.server.requests об этом не узнает. Нужны метрики ingress или шлюза.
Добавляют в теги сырые значения: id пользователя, полный путь с параметрами. Число временных рядов взрывается, и Prometheus начинает тормозить раньше, чем сам сервис.