Оповещение, если данные в определенных ярлыках отсутствуют в Prometheus

Я посылаю данные, связанные с двумя дисками, в Прометей. Я хочу предупредить, если метрики одного диска перестают отправлять метрики. Скажем, у меня есть diskA и diskB, и я собираю метрику disk_up. Теперь диск B не удалось. В Прометей

disk_up{disk="diskA"} будет иметь данные и disk_up{disk="diskB"} будет отсутствовать

absent(disk_up) будет 0, так как disk_up содержит данные diskA. absent(disk_up{disk="diskB"}) будет служить цели. Но я не хочу жестко кодировать имена дисков.

Могу ли я узнать, как лучше настроить оповещение для этого сценария.

2 ответа

Решение

Вы можете использовать что-то вроде этого:

max_over_time(disk_up[1h])
  unless
disk_up

Т.е. метрика существовала в любое время в течение последнего часа, но не существует сейчас.

Вы получите ложное срабатывание, если disk_up метрика всплывает для некоторых diskC, хоть. Или, если метрика получает или теряет одну метку из-за экспортера или вашей конфигурации Prometheus.

Вы можете избежать первого, явно отфильтровывая диски / экземпляры / все, что вас интересует, но это поставит под угрозу вашу цель - не жестко их кодировать. Это, вероятно, мудрее, что сделать, хотя:

max_over_time(disk_up{disk~="disk(A|B)"}[1h])
  unless
disk_up{disk~="disk(A|B)"}

Или по крайней мере

max_over_time(disk_up{job="my_disk_job"}[1h])
  unless
disk_up{job="my_disk_job"}

Следующий запрос MetricsQL возвращает disk_upвременные ряды, которые были доступны в течение последних 24 часов, но не получили новые выборки в течение последних 5 минут:

      lag(disk_up[24h]) > 5m

Запрос возвращает продолжительность в секундах с момента последней полученной выборки. См . документацию по функции lag() .

Другие вопросы по тегам