Сложные правила / фильтры для предупреждений 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
У оповещений одинаковое имя, поэтому для диспетчера оповещений будет одинаковое оповещение.