Что есть из коробки. С spring-boot-starter-actuator и micrometer-registry-prometheus каждый запрос MVC/WebFlux записывается в таймер http.server.requests с метками uri (шаблон маршрута /orders/{id}, а не полный путь), method, status, outcome, exception. Экспорт — /actuator/prometheus.
Перцентили — два способа:
- гистограмма —
percentiles-histogram: true публикует счётчики по бакетам (_bucket{le=...}). Prometheus вычисляет любой квантиль и корректно агрегирует по всем экземплярам и маршрутам. Рекомендуемый путь; - клиентские перцентили —
percentiles: 0.5,0.95,0.99 считаются в приложении и публикуются готовыми числами. Их нельзя складывать и усреднять между подами — математически бессмысленно.
Настройки: minimum-expected-value и maximum-expected-value или slo (свои границы бакетов, например 100ms, 300ms, 1s) — точнее и меньше рядов.
Свои таймеры: @Timed на методе или Timer.builder("payments.charge") — для внешних вызовов и бизнес-операций.
Осторожно с метками: только ограниченные значения. Полный URL или id пользователя в метке — миллионы временных рядов.
Смысл p99: 99% запросов быстрее этого значения. Смотрят p50, p95, p99 отдельно для успешных запросов и долю ошибок отдельно.