Обработка устаревших данных в приборах Prometheus - PullRequest
0 голосов
/ 04 ноября 2019

Контекст: я хочу создать свой собственный экспортер для RabbitMQ. Для этого я установил HTTP-сервер, который запрашивает API управления, анализирует ответ и создает соответствующий ответ в формате Prometheus

Я измеряю количество сообщений в очереди, чтобы получать оповещения, когда в очереди слишком многомного сообщений в нем. Для этого я настроил следующий датчик: rabbitmq_queue_messages{queue_name="Q1"}

Мой вопрос: что произойдет, если очередь будет удалена? например:

  1. в T1 экспортер возвращает rabbitmq_queue_messages {queue_name = "Q1"} 5
  2. в T2, по какой-то причине очередь удаляется
  3. в T3моего экспортера снова спрашивают о метриках.

Как я понимаю, в T3, даже если очередь больше не существует, он будет возвращать тот же самый ответ rabbitmq_queue_messages{queue_name="Q1"} 5, поскольку это то, как измеряетработать на Прометея. Для меня это кажется странным, потому что в T3 Q1 больше не существует, поэтому я ожидал бы прекратить получать точки данных для этой очереди вместо того, чтобы получать устаревшие данные.

Обходной путь, который я нашел для этого, состоит в построенииновый реестр Prometheus при каждом запросе экспортеру начинать с чистого листа, но это кажется немного хакерским, и я действительно не чувствую себя комфортно, работая таким образом.

Итак, как мне избежать использования устаревших датчиков? данные в более прометейском идиоматическом смысле?

1 Ответ

0 голосов
/ 04 ноября 2019

Если это экспортер Java, написанный с использованием client_java, вы можете просто очистить GaugemyGauge.clear()) вместо создания совершенно нового Registry.

Или, если это слишком тяжело, и у вас есть способ получать уведомления при удалении очереди, просто позвоните Gauge.remove(queueName), когда получите уведомление.

Редактировать: Никогда ранее не видел ни одного кода Ruby, но может показаться, что Registry.unregister("rabbitmq_queue_messages") может быть менее жестким способом очистки только одной метрики (со всеми ее комбинациями меток, т.е. в вашем случае для всех очередей). ). Я не вижу ничего похожего на Gauge.remove() клиента Java, который позволил бы удалить только одну комбинацию образец / метка, но я мог бы что-то упустить.

...