为了账号安全,请及时绑定邮箱和手机立即绑定

利用alertmanager进行告警整理

标签:
Go

prometheus的疑问

前面讲过prometheus告警的坑点,说了很多表达式的技巧,这些都是产生告警的,那么告警产生以后,以什么样的形式发送出来呢。这个就是本文主要讲的内容。

alertmanager和prometheus

prometheus的配置文件中,有alertmanager_config这一项,他配置的就是alertmanager的地址,如果prometheus产生了告警,就会根据这个配置的url,进行发送。告警信息就会发送到alertmanager中,所有prometheus的任务就是产生告警的信息,其余的处理都会在alertmanager中做。

demo

groups:
- name: example
  rules:
  - alert: HighRequestLatency
    expr: job:request_latency_seconds:mean5m{job="myjob"} > 0.5
    for: 10m
    labels:
      severity: high
    annotations:
      summary: High request latency
  - alert: lowRequestLatency
    expr: job:request_latency_seconds:mean5m{job="myjob"} > 0.01
    for: 10m
    labels:
      severity: low
    annotations:
      summary: log request latency

告警的分组

  receiver: xxx
  group_by: ['alertname', 'job']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 3h

告警分组主要围绕上面的的四个属性来。
所有从prometheus来的告警,都会进行分组,告警的发送也是按照分组来的,group_by就是按照标签分组,一般alertname会作为选择,就是告警的名称,其次后面会根据业务来区分,例如我上面写的job。他会按照job再进行一次分组。这样的好处是可以合并告警信息。

group_wait是第一次的告警信息在间隔多长时间后发送给receiver(receiver就是我们的webhook,短信等等)。
group_interval是按照组进行合并,组间的间隔时间。
repeat_interval是告警的再次发送频率。这里主要应对的场景是怕丢数据,例如一个告警触发了,但是一直没解决,那么必须进行再次的提醒。是一个提醒的状态。

告警抑制

正如上面的告警规则,大于0.5是高级别,大于0.01是低级别。当一个值是0.6的时候,满足高级别,进行高级别的告警,也同时满足低级别,所以也会产生一个低级别的告警,这完全是两条不一样的告警信息,但表达的内容是相同的。而且还有包含关系,都是高级别的了,肯定也满足低级别的条件。此时有低级别的告警就不合适了。
符合人们理解的情况是,只报最高级别的告警。这里就需要抑制功能了。

inhibit_rules:
- source_match:
    severity: 'high'
  target_match:
    severity: 'low'
  equal: ['alertname']

抑制的功能其实就是根据label进行去重的操作,上面的配置就会把low的去掉,告警发送的时候只转发high的。下面的equal是合并的条件,其实就是label必须相同的才可以进行抑制。这个根据需求进行相同的选择就行,一般情况alertname能满足条件。例如上面的场景,我可以选择job也相同的。这里的相同的选择一般对应的是分组的label。

告警的静默

告警是可以临时不在发送的。这个需要在alertmanager的图形界面上进行填写。目前只有这么一个地方开放,不可以配置文件配置。

alertmanager的集群

alertmanager有集群模式,是一个ap系统。–cluster.listen-address可以指定监听的端口。–cluster.peer则是选择要监听的alertmanager。他是通过gossip进行传播。这里不详细说gossip,理解为同步消息吧。
prometheus需要配置集群里所有的alertmanager。
这里必须解释他为什么是ap系统。prometheus配置所有的alertmanager。有告警发生的时候就会发给所有的alertmanager。alertmanager会有一个同步的关系。必须在5秒内同步完成。如果是监听成链的,每个链都是5秒。如果5秒内完成同步,则告警信息不会重复发送。如果没有同步完成,就会出现,两个alertmanager同时发送的告警的情况。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
1.6万
获赞与收藏
380

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消