分析 Alertmanager 发送告警消息的逻辑

本文使用 Prometheus v2.18.1 ,Alertmanager v0.20.0
本文主要分析 Alertmanager 什么情况下会发送告警消息,避免对用户造成消息轰炸。

Alertmanager 的一般工作流程

  1. Prometheus 每隔 interval 时长执行一次 alert rule 。如果执行结果包含 n 个时间序列,则认为存在 n 个警报,通过 HTTP 通信发送 alerting 状态的消息给 Alertmanager 。
  2. Alertmanager 收到之后,
    • 先根据 route 判断它属于哪个 group 、应该发送给哪个 receiver 。
    • 再判断该 group 当前是否处于冷却阶段、是否被 Silence 静音、是否被 Inhibit 抑制。如果都没有,则立即发送告警消息给用户。
  3. 如果 Prometheus 再次执行 alert rule 时,发现执行结果为空,则认为警报已解决,立即产生 resolved 状态的消息,发送给 Alertmanager 。
  4. Alertmanager 收到之后,立即发送给用户。

如何控制发送 resolved 消息?

  • 如果一个指标不再满足告警条件,或者 Prometheus 不再抓取相应的指标,或者不再执行相应的 alert rule ,都会让 Prometheus 认为该警报已解决,产生一个 resolved 状态的消息,发送给 Alertmanager 。
  • 目前在 Prometheus 端并不能控制是否产生 resolved 消息,只能在 Alertmanager 端控制是否发送 resolved 消息。
  • 如下,在 Alertmanager 端配置是否对某个 receiver 发送 resolved 消息:
    receivers:
    - name: 'email_to_leo'
      email_configs:
      - to: '123456@qq.com'
        send_resolved: true  
    

发送频率?

route 示例:

route:
  receiver: 'email_to_leo'
  group_wait: 1m
  group_interval: 1m
  repeat_interval: 24h
  group_by:
    - alertname

Alertmanager 根据 route 将警报分组管理,分为多个 group 。然后以 group 为单位发送告警消息。

  • 每次发送一个 group 的消息时,总是会将该 group 内现有的所有警报合并成一个告警消息,一起发送。
  • 当一个 group 中出现第一个警报时,会先等待 group_wait 时长再发送该 group 。
    • 延长 group_wait 时间有利于收集属于同一 group 的其它警报,一起发送。
  • 当一个 group 的警报一直存在时,要至少冷却 repeat_interval 时长才能重复发送该 group 。
    • 实际上,是要求当前时刻与上一次发送时刻的差值大于 repeat_interval 。
      因此,即使重启 Alertmanager ,也不会影响 repeat_interval 的计时。
      不过,在配置文件中修改 group_wait、repeat_interval 等参数的值时,会立即生效。
  • 当一个 group 处于冷却阶段时:
    • 如果收到一个属于该 group 的新警报,则会等待 group_interval 时长之后让该 group 解除冷却,发送一次消息,并且从当前时刻开始重新计算 repeat_interval 。
    • 如果一个警报被解决了,也会让该 group 解除冷却,发送一次 resolved 消息。
    • 如果一个被解决的警报再次出现,也会让该 group 解除冷却,发送一次消息。
    • 因此,如果一个警报反复被解决又再次出现,则会绕过 repeat_interval 的限制,导致 Alertmanager 频繁发送消息给用户。

特殊情况

  • 假设 Prometheus 与 Alertmanager 正常连接,且存在一些警报:

    • 如果两者断开连接,则大概两分钟之后 Alertmanager 会自行认为所有警报已解决,发送 resolved 状态的消息给用户。
    • 如果两者重新连接,则 Alertmanager 会认为这些警报的 group 是新出现的,立即发送 alerting 状态的消息给用户。
    • 因此,如果两者反复断开连接又重新连接,则会绕过 repeat_interval 的限制,导致 Alertmanager 频繁发送消息给用户。
  • 假设一个新警报出现,Alertmanager 正常地发送一次告警消息给用户。

    • 如果此时用 Silence 隐藏该警报,则 Alertmanager 的首页上不会显示该警报,但并不会发送 resolved 消息给用户。
    • 如果接着在 Prometheus 端解决该警报,则 Alertmanager 也不会发送 resolved 消息。
    • 如果接着取消 Silence ,则 Alertmanager 依然不会发送 resolved 消息。
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Alertmanager 是 Prometheus 的一个组件,用于处理来自 Prometheus 服务器的告警信息。Alertmanager 磁盘告警规则是用来监控 Alertmanager 服务器磁盘空间的使用情况,并在磁盘空间不足时生成告警Alertmanager 的磁盘告警规则通常包括以下几个方面: 1. 磁盘空间阈值设置:规定了磁盘空间使用的阈值,当磁盘空间使用超过该阈值时将触发告警。 2. 告警通知方式:可以通过设置告警通知方式,如邮件、短信、PagerDuty 等,将告警信息发送给相应的接收者。 3. 重复告警规则:可以设置告警的重复频率和间隔时间,以避免频繁发送重复的告警信息。 4. 告警级别和标签:可以根据不同的告警级别和标签,对不同的告警信息进行分类和处理。 5. 告警处理逻辑:可以设置告警的处理逻辑,如静音某类告警、聚合相同类型的告警等。 Alertmanager 磁盘告警规则可以通过配置文件进行设置。在 Prometheus 的配置文件中,可以指定 Alertmanager 的地址和端口,并设置磁盘告警规则。当 Alertmanager 启动后,即可开始监控磁盘空间的使用情况,并根据规则生成告警信息。 总之,Alertmanager 磁盘告警规则是用来监控 Alertmanager 服务器磁盘空间使用情况的规则,通过设置阈值、告警通知方式、重复告警规则、告警级别和标签等,可以及时地发现并处理磁盘空间不足的情况,确保 Alertmanager 的正常运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值