基于标签的告警处理路由

在 Alertmanager 的配置中会定义一个基于标签匹配规则的告警路由树,以确定在接收到告警后 Alertmanager 需要如何对其进行处理。route 中主要定义了告警的路由匹配规则,以及 Alertmanager 需要将匹配到的告警发送给哪一个receiver。route 的完整定义如下:

route: 
  [ receiver: <string> ]
  [ continue: <boolean> | default = false ]

  match:
    [ <labelname>: <labelvalue>, ... ]

  match_re:
    [ <labelname>: <regex>, ... ]

  [ group_by: '[' <labelname>, ... ']' ]
  [ group_wait: <duration> | default = 30s ]
  [ group_interval: <duration> | default = 5m ]
  [ repeat_interval: <duration> | default = 4h ]

  routes:
    [ - <route> ... ]

一个最简单的 route 定义如下所示:

route:
  group_by: ['alertname']
  receiver: 'web.hook'
receivers:
- name: 'web.hook'
  webhook_configs:
  - url: 'http://127.0.0.1:5001/'

上面的配置只定义了一个路由,这意味着所有由 Prometheus 产生的告警在发送到 Alertmanager 之后都会通过名为web.hook的 receiver 接收,这里的 web.hook 定义为一个 webhook 地址。

路由匹配

每一个告警都会从配置文件中顶级的 route 进入路由树,每一个路由都可以定义自己的接收器以及匹配规则。

  • 默认情况下,告警进入到顶级 route 后会遍历所有的子节点,直到找到最深的匹配 route,并将告警发送到该 route 定义的 receiver 中。

  • 如果 route 中设置 continue 的值为 false,那么告警在匹配到第一个子节点之后就直接停止如果 continue 为 true,报警则会继续进行后续子节点的匹配。

告警的匹配有两种方式可以选择:

  • 基于字符串:通过设置 match 规则判断当前告警中是否存在标签 labelname 并且其值等于labelvalue。

  • 基于正则表达式:通过设置 match_re 验证当前告警标签的值是否满足正则表达式的内容。

顶级的 route 必须匹配所有告警,即不能有任何的设置 match 和 match_re。

告警分组

Alertmanager 可以对告警通知进行分组,将多条告警合合并为一个通知。

  • 使用 group_by 来定义分组规则:基于告警中包含的标签,根据 group_by 中定义的标签名称,可以将那些标签值相同的告警合并为一个通知发送给接收器。

  • 通过 group_wait 参数设置等待时间:如果在等待时间内当前 group 接收到了新的告警,这些告警将会合并为一个通知向 receiver 发送。

  • group_interval 用于定义相同的 Group 之间发送告警通知的时间间隔。

最后更新于