【问题标题】:Alertmanager, different interval for different alert rulesAlertmanager,不同警报规则的不同间隔
【发布时间】:2021-05-20 21:28:34
【问题描述】:

我正在使用 alertmanager 获取 prometheus 指标的警报,我对不同的指标有不同的警报规则,是否可以为每个警报规则设置不同的间隔,例如对于 metric1 我有规则 1,我需要检查此规则在每日基本间隔上,对于 metric2,我有 rule2,这个应该每 2 小时检查一次,

【问题讨论】:

  • 不足以像这样expr: avg without(cpu)(rate(node_cpu_seconds_total{mode!="idle"}[2h]))2 hours 设置规则间隔?
  • 我不知道我正在使用这样的东西:expr: node_cpu_seconds_total{mode!="idle"} for: 2h
  • 我正在更好地研究你的问题。 for: 2h 表示警报必须触发 2 小时才能发送。您可以将警报管理器与不同的路由树一起使用

标签: alert prometheus


【解决方案1】:

for: 5m 属性用于确保规则在触发警报前连续 X 分钟返回 true。例如,如果 cpu 使用率峰值持续 30 秒,则不会触发警报,因为我们将 for 属性设置为 5 分钟。因此,这不适合您。

相信您可以使用警报管理器的repeat_interval 来设置发送通知的时间间隔。然后您会收到警报,但您会根据您的repeat_interval 触发/触发它。这个link 详细解释了它们。

  • group_wait 设置最初等待多长时间发送特定警报组的通知。
  • group_interval 指示在发送有关新警报的通知之前等待多长时间,这些新警报已添加到之前已发出警报的警报组中
  • repeat_interval 用于确定再次发送已成功发送到接收器的触发警报之前的等待时间。

为了让它们发挥作用,您必须为每个警报定义label。例如,在我的alerts.yml 文件中,我创建标签app_type: serverapp_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_waitgroup_intervalrepeat_interval。然后您可以在不同的routes 叶中使用repeat_interval: 1hrepeat_interval: 24h

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 小时的测试,而是使用了不同的分钟间隔,并且成功了。我认为它也可以长时间工作。

【讨论】:

  • 感谢回复,我之前做过,设置“for:24h”,但是这个“for”似乎超过20分钟都不起作用,我也试了秒和分钟,这是我当前的确切规则:规则:-警报:SSL_expiring expr:(probe_ssl_earliest_cert_expiry - time())
  • 还要检查您的 promQL 在图形仪表板上是否正确。正如您所写,我无法解析您的 promQL。或者尝试一个简单的 promQL 来验证
  • 在我的系统中是正确的,它正在发送警报,但重要的部分是“for:1440m”或“for:24h”不起作用。它每 2 小时发送一次警报,因为我的“evaluation_interval”是 2 小时,我无法增加它,因为我有其他规则应该每 2 小时检查一次,
  • 查看这个问题github.com/prometheus/alertmanager/issues/…。他们删除了scrape_interval: 15s evaluation_interval: 15sscrape_interval: 5s 以使其正常工作。似乎是一个错误:(。也比较普罗米修斯版本
  • 这不是关于repeat_interval 实际上evaluation_interval 效果很好,我只需要为每个警报规则使用不同的evaluation_inteval,我想我可以通过在警报规则文件中使用“for:”来做到这一点,但它只是在“for :time"时间小于20分钟,超过20分钟算20分钟!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 2016-03-15
  • 2021-12-11
  • 2021-11-04
  • 2014-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多