Alertmanager, разный интервал для разных правил оповещения

#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 заставили его работать. Похоже на ошибку :(. Сравните также версию prometheus

5. дело не в repeat_interval на самом деле evaluation_interval работает хорошо, мне просто нужен другой evaluation_inteval для каждого правила оповещения, я думал, что смогу это сделать, используя «для:» в файле правил оповещения, но это просто работает, когда время «для: время» составляет менее 20 минут, любое время, превышающее 20 минут, считается 20 минутами!!!!