Сложные правила / фильтры для предупреждений Prometheus-Alertmanager

Ситуация: у меня есть Prometheus и Alertmanager для мониторинга, среди прочего, температуры процессора различных устройств. Alertmanager отправляет оповещения с производственных устройств в PagerDuty.

Устройства, которые я отслеживаю, имеют разные модели с разными техническими характеристиками. Нормальная температура процессора для моделей 1-5 составляет 50C, а для модели 6 - 70C. В настоящее время пороговое значение для временных предупреждений ЦП составляет 60 ° C, поэтому PagerDuty продолжает получать предупреждения от устройств модели 6, которые работают при нормальной температуре.

Есть ли способ отфильтровать временные предупреждения процессора только от устройств модели 6, если температура ниже 80 ° C, и по-прежнему получать временные предупреждения процессора для устройств модели 1-5 при 60 ° C?

Примечание. Отслеживается множество других показателей, но для всех из них, кроме температуры процессора, все модели устройств имеют одинаковые пороговые значения.

Вот фрагмент из моего alertmanager.yml который отправляет предупреждения Pd в PagerDuty

- match:
    stack_name: prod
    severity: critical
  receiver: PagerDuty

По общему признанию, у меня нет большого опыта YML. но это то, что я надеюсь сделать, но я не уверен в правильном синтаксисе:

- match:
    stack_name: prod
    severity: critical
    alertname: !device_cpu_temperature
  receiver: PagerDuty
- match:
    stack_name: prod
    severity: critical
    alertname: device_cpu_temperature
    uuid: !*6X*
  receiver: PagerDuty
- match: 
    stack_name: prod
    severity: critical
    alertname: device_cpu_temperature
    uuid: *6X*
    value: >80
  receiver: PagerDuty

Желаемый результат:

  • Все критические предупреждения, за исключением device_cpu_tength, отправляются в PagerDuty
  • Критические предупреждения prod device_cpu_tength отправляются в PagerDuty, только если номер модели не равен 6 (uuid содержит номер модели, за которым следует "X")
  • Критические предупреждения prod device_cpu_tempera от устройств модели 6 отправляются в PagerDuty, только если температура процессора выше 80C.

Или было бы лучше иметь 2 разных правила оповещения в Прометей? Могут ли определенные правила применяться только к определенным устройствам? Если так, то как?

1 ответ

Решение

Проще было бы создать различные правила оповещения в Prometheus.

На самом деле диспетчер предупреждений предназначен только для отправки, группировки, фильтрации и т. Д. Предупреждений, а не для оценки показателей.

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

Выражение для серверов 1-5 должно быть примерно таким:

 - alert: ServiceProbeFailed
   expr: cpu_temperature{hostname!~".*server_6.*"} > 50

И правило для сервера 6:

 - alert: ServiceProbeFailed
   expr: cpu_temperature{hostname=~".*server_6.*"} > 70

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

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