#alert #prometheus
Вопрос:
Я использую alertmanager для получения предупреждений для метрик prometheus, у меня разные правила предупреждений для разных метрик, можно ли установить разные интервалы для каждого правила предупреждений, например, для metric1 у меня есть правило 1, и мне нужно проверять это правило на ежедневном базовом интервале, а для metric2 у меня есть правило 2, и это должно проверяться каждые 2 часа,
Комментарии:
1. разве недостаточно установить интервал в правиле для
2 hours
такихexpr: avg without(cpu)(rate(node_cpu_seconds_total{mode!="idle"}[2h]))
случаев ?2. Я не знаю, что использую что-то вроде этого: expr: node_cpu_seconds_total{режим!=»простоя»} для: 2 часа
3. Я лучше изучал твою проблему. это
for: 2h
означает, что оповещение должно срабатывать в течение 2 часов, чтобы быть отправлено. Вы можете использовать alertmanager с другим деревом маршрутов
Ответ №1:
for: 5m
Свойство используется для обеспечения того, чтобы правило возвращало значение true в течение X непрерывных минут до запуска предупреждения. Например, в случае резкого увеличения загрузки процессора в течение 30 секунд предупреждение не будет вызвано, поскольку мы установили для этого for
свойства значение 5 минут. Следовательно, это не подходящее свойство для вас.
Я считаю, что вы можете использовать repeat_interval
диспетчер предупреждений, чтобы установить интервал времени для отправки уведомлений. Тогда у вас есть предупреждение, но вы запускаете/запускаете его в зависимости от вашего repeat_interval
. Эта ссылка подробно объясняет их.
group_wait
задает время первоначального ожидания отправки уведомления для определенной группы предупреждений.group_interval
определяет, как долго нужно ждать, прежде чем отправлять уведомления о новых предупреждениях, добавленных в группу предупреждений, которые были предупреждены ранееrepeat_interval
используется для определения времени ожидания перед повторной отправкой предупреждения о срабатывании, которое уже было успешно отправлено получателю.
Чтобы заставить их работать, вы должны определить label
» s » для каждого предупреждения. Например, в моем alerts.yml
файле я создаю метки app_type: server
и app_type: service
:
groups:
- name: monitor_cpu
rules:
- alert: job:node_cpu_usage:percentage_gt_50
expr: 100 * node_cpu_seconds_total{mode="user"} / ignoring(mode) group_left sum(node_cpu_seconds_total) without(mode) > 5.5
for: 1m
labels:
severity: critical
app_type: server
annotations:
summary: "High CPU usage"
description: "Server {{ $labels.instance }} has high CPU usage."
- name: targets
rules:
- alert: monitor_service_down
expr: up == 0
for: 1m
labels:
severity: critical
app_type: service
annotations:
summary: "Monitor service non-operational"
description: "Service {{ $labels.instance }} is down."
затем я создаю дерево маршрутов для отправки уведомлений различным группам, сопоставляя конкретную метку. И вот приходит решение, которое я использую. Я определяю разные group_wait
, group_interval
, и repeat_interval
для каждой группы. Затем вы можете использовать repeat_interval: 1h
и repeat_interval: 24h
то и другое в разных routes
листах:
global:
smtp_from: 'mail@gmail.com'
smtp_smarthost: smtp.gmail.com:587
smtp_auth_username: 'mail@gmail.com'
smtp_auth_identity: 'mail@gmail.com'
smtp_auth_password: ''
route:
receiver: 'admin-team'
routes:
- match_re:
app_type: (server|service)
receiver: 'admin-team'
routes:
- match:
app_type: server
receiver: 'admin-team'
group_wait: 1m
group_interval: 5m
repeat_interval: 1h
- match:
app_type: service
receiver: 'dev-team'
group_wait: 1m
group_interval: 5m
repeat_interval: 24h
receivers:
- name: 'admin-team'
email_configs:
- to: 'admin-mail@gmail.com'
- name: 'dev-team'
email_configs:
- to: 'dev-mail@gmail.com'
К сожалению, я тестировал не 24 часа, а с другим промежутком в несколько минут, и это сработало. Я думаю, что это будет работать и в течение долгих часов.
Комментарии:
1. Спасибо за ответ, я делал это раньше, установил «для: 24 часа», но, похоже, это «для» не работает более 20 минут, я тоже пробовал в секундах и минутах, вот мое точное текущее правило: правила: — предупреждение: SSL_expiring expr: ( probe_ssl_earliest_cert_expiry — time() )
2. Также проверьте правильность вашего PromQL на панели мониторинга графиков. Я не могу проанализировать ваш PromQL, как вы написали. Или попробуйте простой PromQL для проверки
3. Это правильно в моей системе, и она отправляет оповещения, но важная часть заключается в том, что «для: 1440 м» или «для: 24 часа» не работает. он отправляет предупреждение каждые 2 часа, так как мой «evaluation_interval» составляет 2 часа, я не могу увеличить его, потому что у меня есть другие правила, которые следует проверять каждые 2 часа,
4. Проверьте эту проблему github.com/prometheus/alertmanager/issues/… . они удалили
scrape_interval: 15s evaluation_interval: 15s
иscrape_interval: 5s
заставили его работать. Похоже на ошибку :(. Сравните также версию prometheus5. дело не в repeat_interval на самом деле evaluation_interval работает хорошо, мне просто нужен другой evaluation_inteval для каждого правила оповещения, я думал, что смогу это сделать, используя «для:» в файле правил оповещения, но это просто работает, когда время «для: время» составляет менее 20 минут, любое время, превышающее 20 минут, считается 20 минутами!!!!