在Alertmanager配置文件中,Route是告警的路由配置,它可以让告警根据分组发送给对应的人或者小组。

下面通过Route配置对Alertmanager路由规则进行说明:

route:
  receiver: Default
  group_by:
  - namespace
  - job
  - alertname
  continue: false
  routes:
  - receiver: Watchdog
    matchers:
    - alertname="Watchdog"
    continue: false
  - receiver: Critical
    matchers:
    - severity="critical"
    continue: false
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 12h

从配置文件可以看出,路由配置块的顶级配置由route开始,它是整个路由的入口,称作根路由。每一条告警进来后,都先进入route,之后根据告警自身的标签和route.group_by配置的字段进行分组。比如可以根据job、alertname或者其他自定义的标签名称进行分组,分组后进入子路由(通过route.routes配置子路由),进一步进行更加细粒度的划分,比如job名称包含mysql的发送给DBA组。

除了group_by和routes外,Route还有以下常用的配置:

  • receiver:告警的通知目标,需要和receivers配置中的name进行匹配。需要注意的是,route.routes下也可以有receiver配置,优先级高于route.receiver配置的默认接收人,当告警没有匹配到子路由时,会使用route.receiver进行通知,比如上述配置中的Default。
  • continue:一个可选的字段,用于控制警报在匹配到路由规则后是否继续匹配其他路由规则。它的作用是在警报匹配到一个路由规则后,决定是否继续匹配其他路由规则并发送通知。当设置为true时,表示警报在匹配到当前规则后,会继续匹配其他的路由规则。这意味着一个警报可以匹配到多个路由规则,并发送多个通知,每个通知可能发送给不同的接收者;当设置为false时,表示警报在匹配到当前规则后,不会继续匹配其他的路由规则。这意味着一个警报只会匹配到第一个满足条件的路由规则,并发送一个通知。默认为false。
  • group_by:分组配置,值类型为列表。比如配置成['job', 'severity'],代表告警信息包含job和severity标签的会进行分组,且标签的key和value都相同才会被分到一组。
  • match:一对一匹配规则,比如match配置的为job: mysql,那么具有job=mysql的告警会进入该路由。
  • match_re:和match类似,只不过match_re是正则匹配。
  • matchers:这是Alertmanager 0.22版本新添加的一个配置项,用于替换match和match_re(0.22版本新增,但是不影响match和match_re使用)
  • mute_time_intervals:用于定义在特定时间段内静默(Mute)警报通知,即在指定时间段内暂时屏蔽警报的发送。这个选项可以用于避免在某些时间段内收到不必要的警报通知,例如在维护期间或非工作时间暂时屏蔽警报。
  • active_time_intervals:用于配置活动时间间隔的全局配置选项。它用于定义哪些时间段 Alertmanager 会发送警报通知。