Прометей + Графана - данные графика сдвинуты на 2 минуты? - PullRequest
0 голосов
/ 27 октября 2018

У меня есть прометей, очищающий гистограмму задержки запросов от моего API-сервера каждые 1m.

Затем я визуализирую гистограммы как тепловую карту в Grafana.Это выглядит так:

histogram of request latencies

Мой запрос:

sum(http_request_duration_seconds_bucket) by (le) 
- 
sum(http_request_duration_seconds_bucket offset 1m) by (le)

Я понимаю, что это нужно сделать: взятьвектор корзины в указанное время и вычтите вектор корзины за 1 минуту до получения вектора корзины за эту минуту (гистограммы накапливаются и не очищают свои корзины при каждой очистке)

Но проблема в том, что, глядя на мою просьбуВ журналах я вижу:

...
13:56:13 GET 304 3 ms
13:56:18 GET 304 4 ms
13:56:18 POST - -
13:56:23 GET 304 4 ms
13:56:28 GET 304 0 ms
13:56:32 GET 304 3 ms
13:56:38 GET 304 6 ms
13:56:42 GET 304 4 ms
13:56:48 GET 304 9 ms
13:56:53 GET 304 2 ms
13:56:54 POST - -
13:56:58 GET 304 2 ms

13:57:01 GET 200 2 ms
13:57:03 GET 304 6 ms
13:57:08 GET 304 4 ms
13:57:12 GET 304 3 ms
13:57:18 POST - -
13:57:21 GET 304 8 ms
13:57:21 GET 304 8 ms
13:57:23 GET 304 4 ms
...

Как видите, в первый раз были запросы времени выполнения "Inf" в 13: 56 , но если мы посмотрим на гистограмму,мы не увидим этого до 13: 58 .

Почему данные сдвигаются на 2 минуты?

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Я думаю, что могу объяснить задержку. В игре два аспекта:

  • Я ошибочно предположил, что Прометей сохранял временные метки отдельных событий. Вместо этого данные в гистограмме собираются в момент попадания скребка, и данные помечаются как происходящие в этот момент.

  • Я забыл подробности моего собственного инструментария - я добавляю точку данных в метрику гистограммы, используя клиентскую библиотеку prometheus в момент завершения запроса (и как это может быть любым другим кстати? мы хотим узнать латентность!)

Таким образом, если данные для запроса на 13:56:18 (первый длительный запрос) были добавлены к гистограмме в момент возврата запроса (более чем через 30 секунд после этой точки), скажем, на 13:57:15, и затем времена очистки были: [13:56:10, 13:57:10, 13:58:10], тогда запрос, который начался в 13:56:18, в конечном итоге стал бы частью 13:58 очистки.

0 голосов
/ 29 октября 2018

У Grafana есть кнопка Инспектор запросов при редактировании панели. Вы можете использовать это, чтобы увидеть точный ответ, возвращенный Прометеем, и выяснить, введен ли сдвиг Графаной или Прометеем (или обоими). ​​

Одной из возможных причин, по которой я вижу, что это происходит в конце концов Прометея, является отказ от разрешения. Если вы царапаете только раз в минуту, увеличение может занять до одной минуты (со средней задержкой в ​​половину). Если, кроме того, у вас есть записанные правила, которые обрабатывают очищенные данные, и вы отображаете результаты указанных записанных правил, это также увеличивает задержку.

Таким образом, с интервалом очистки в 1 минуту и ​​интервалом в 1 минуту вы можете увидеть сдвиг в диапазоне от 0 до 2 минут (даже прежде, чем учитывать дрожание из-за медленных целей и / или перегруженного экземпляра Prometheus).

Редактировать: Почти забыл, вы, скорее всего, также захотите использовать increase / rate вместо вычитания, чтобы хорошо обрабатывать перезапуски экземпляра. (К сожалению, increase / rate искажает ваши метрики на величину, пропорциональную диапазону, разделенному на интервал очистки, и пропускает некоторые образцы, но вы должны выбрать свой яд.)

...