Оповещение, если данные в определенных ярлыках отсутствуют в 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() .