Прометей / Графана строят процентили времени ожидания для рабочих мест - PullRequest
0 голосов
/ 21 октября 2018

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

Одна из основных метрик для отслеживания - это сколько времени после запроса задания оно запланировано для выполнения (обычно это менее 5 минут, но может бытьдо 1 часа по разным причинам).

Есть ли способ построить процентили того, как долго текущие неназначенные задания были там для использования Prometheus + Grafana (или смеси Prometheus и других решений, таких как Redis)?Я хочу знать, каково среднее время ожидания, 95 и 99 процентилей времени ожидания для заданий.

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

Один простой способ - выполнить итерациювсе ожидающие работы и вычислять процентили непрерывно, но это будет очень дорого.

1 Ответ

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

Реализации гистограммы Prometheus предполагают фиксированный набор сегментов (например, менее 1 секунды, менее 2 секунд, менее 5 секунд и т. Д.), Которые можно увеличивать только (вместе со всеми сегментами над ними). ​​

В вашем случае у вас есть 2 варианта:

  1. Запишите продолжительность, на которое каждое задание было поставлено в очередь, в гистограмме.Проблемы с этим подходом состоят в том, что (а) вам нужно будет «продвигать» каждую работу вверх по гистограмме с течением времени;и (b) вы не можете удалить задание из гистограммы после его обработки (из-за требования монотонности).
  2. Запишите время, когда каждое задание было добавлено в гистограмму (например, записи, добавленные до 1 минуты)после часа записи добавляются до 2 минут после часа и т. д.).Проблема здесь в том, что ваша гистограмма не является статичной по размеру и будет расти бесконечно (при условии, что ваш клиент Prometheus в первую очередь разрешил это).

Таким образом, у вас остается пара альтернатив:

  1. Перебирайте свою очередь и создавайте свежую гистограмму (или непосредственно интересующие вас процентили) каждый раз, когда вы прометуете Прометей.Десятки тысяч рабочих мест для повторения не кажутся такими уж плохими, на это нужно миллисекунды.Вы могли бы даже заменить структуру данных, которую вы используете для своей очереди, например, бинарным деревом поиска, которое должно очень легко определить точные процентили, которые вас интересуют, в логарифмическом времени.
  2. Отказаться от записивремя ожидания в очереди для ожидающих заданий и только для обработанных заданий.Каждый раз, когда работа обрабатывается, вы увеличиваете гистограмму.Это не становится проще, чем это.
...