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

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

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

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

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


person Jose Thomas    schedule 21.02.2019    source источник


Ответы (1)


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

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"}
person Alin Sînpălean    schedule 21.02.2019
comment
Спасибо! для быстрого ответа - person Jose Thomas; 21.02.2019