Вычисление замедления задержки запросов

#histogram #prometheus #grafana #promql

#гистограмма #prometheus #графана #promql

Вопрос:

Мне нужно рассчитать и построить график замедления задержки на prometheus по временным рядам гистограммы, но мне не удалось отобразить гистограмму в grafana. Примерной метрикой будет время запроса nginx.

предположим, если у меня есть гистограмма, подобная этой,

 nginx_request_time_bucket(le=1) 1,
nginx_request_time_bucket(le=10) 2,
nginx_request_time_bucket(le=60) 2,
nginx_request_time_bucket(le= inf) 5
  

Я использую это приведенное ниже выражение для проверки SLO задержки. Это выражение возвращает процент запросов в течение 10 секунд :

 sum(rate(nginx_request_time_bucket{le="10"}[$__range])) / sum(rate(nginx_request_time_count[$__range]))
  

Теперь, как я могу найти процент запросов в пределах от 10 до 60 секунд? Как я могу это вычислить?

Правильно ли приведенное ниже выражение??

 (
  sum(rate(nginx_request_time_bucket{le="10"}[$__range]))
 
  sum(rate(nginx_request_time_bucket{le="60"}[$__range]))
) / 2 / sum(rate(nginx_request_time_count[$__range])) 
  

Любая помощь здесь высоко ценится!

Ответ №1:

Все {le="10"} запросы также включены {le="60"} (и во все большие сегменты), поэтому, чтобы узнать количество запросов между ними, вам просто нужно вычесть ставки, так что что-то вроде:

 (
  sum(rate(nginx_request_time_bucket{le="60"}[$__range]))
   - 
  sum(rate(nginx_request_time_bucket{le="10"}[$__range]))
)
/ sum(rate(nginx_request_time_count[$__range]))
  

должно сработать.

Комментарии:

1. Большое спасибо.. Ваше решение имеет смысл.. Если это решение, то что это за все, о чем они упоминали в документах prometheus. prometheus.io/docs/practices/histograms/#apdex-score