2. 路由(Route)基础概念

Alertmanager 的路由(Route)是告警通知分发的核心决策引擎。它基于一棵树形结构,将接收到的告警按照预定义的匹配规则逐层分发到对应的接收器(Receiver)。理解路由的树形结构、匹配规则以及其在配置文件中的位置,是进行路由审计与优化的前提。

2.1 路由树结构

Alertmanager 的路由采用单根多叉树模型。整棵树只有一个根节点(root route),根节点之下可以嵌套任意深度的子节点。告警从根节点进入,沿着树向下遍历,直到找到第一个匹配的叶子节点或最深的匹配节点,然后发送给该节点绑定的接收器。

关键特性:路由树是深度优先、首次匹配的。一旦告警在某层节点匹配成功,就会停止向下搜索(除非该节点设置了 continue: true)。
Alertmanager 路由树结构 根路由 (Root Route) receiver: 'default-receiver' 子路由 A match: severity="critical" 子路由 B match_re: env="prod|staging" 子路由 C match: team="platform" 孙路由 A1 match: service="api" 孙路由 A2 match: service="web" 孙路由 B1 match: team="infra" 孙路由 C1 match: alertname=".*Down" 说明: 告警从根节点进入,按顺序匹配子路由。匹配到子路由A后,继续匹配其子节点A1/A2;若A1匹配成功,则停止遍历,发送给A1绑定的接收器。

2.2 路由匹配规则

路由匹配规则决定了告警如何被分发。Alertmanager 提供三种匹配方式,按优先级从高到低排列:

匹配方式 配置字段 匹配逻辑 示例
精确匹配 match 告警标签必须与 map 中的所有键值对完全相等(大小写敏感) match: { severity: "critical" }
正则匹配 match_re 告警标签的值必须匹配指定的正则表达式 match_re: { env: "prod|staging" }
无匹配(默认) 不设置 match/match_re 该路由作为 catch-all,匹配所有未被父节点精确匹配的告警 根路由通常不设置匹配条件
审计要点:正则匹配(match_re)性能开销较大,且容易因正则表达式错误导致匹配失效。在生产环境中,优先使用精确匹配(match);仅在需要模糊匹配或多值匹配时使用正则。

2.3 路由配置在 alertmanager.yml 中的位置与作用

路由配置位于 Alertmanager 主配置文件 alertmanager.yml 的顶级字段 route 下。该字段是整棵路由树的根节点定义。其基本结构如下:

# alertmanager.yml 顶级结构
global:
  # 全局配置(如 SMTP、Slack API 等)

route:
  receiver: 'default-receiver'      # 根路由默认接收器
  group_wait: 30s                   # 分组等待时间
  group_interval: 5m                # 分组间隔
  repeat_interval: 4h               # 重复发送间隔
  routes:                           # 子路由列表(数组)
    - receiver: 'critical-receiver'
      match:
        severity: critical
      routes:                       # 嵌套子路由
        - receiver: 'pagerduty-critical'
          match:
            service: api
    - receiver: 'warning-receiver'
      match_re:
        severity: warning|info

receivers:
  - name: 'default-receiver'
    # 接收器配置...

2.3.1 路由配置的作用域

配置层级 作用 是否可继承
route(根节点) 定义全局默认路由行为,所有告警首先进入此节点 —
routes[](子节点) 定义特定匹配条件下的路由分支,可嵌套多层 子节点可覆盖父节点的 receiver、group_wait 等参数
continue(布尔值) 若为 true,匹配后继续向同级后续路由遍历(默认 false) 仅影响当前节点

2.3.2 路由配置的关键参数

  • receiver:必填。指定该路由匹配成功后,告警发送到的接收器名称。
  • group_wait:首次发送告警前等待的时间,用于聚合同一分组内的告警。
  • group_interval:发送告警后,等待新告警加入分组的时间间隔。
  • repeat_interval:告警已发送且未解决时,重复发送通知的时间间隔。
  • continue:默认 false。若为 true,告警在匹配当前路由后,会继续尝试匹配同级后续路由(可用于多路分发)。
常见陷阱:子路由如果不显式设置 group_wait、group_interval、repeat_interval,会继承父路由的对应值。审计时需注意,某些子路由可能无意中继承了不合适的间隔参数,导致告警通知延迟或重复。
告警路由匹配与分发流程 告警进入路由树 根路由:默认分组/接收器 匹配子路由? 是 否 匹配子路由 使用子路由接收器 未匹配任何子路由 使用父路由接收器 告警发送至接收器

2.4 路由审计的核心关注点

  • 树深度与复杂度:过深的路由树(超过 5 层)会增加排查难度,建议控制在 3 层以内。
  • 匹配条件冲突:检查同级路由的 match 条件是否存在重叠,可能导致告警被错误路由。
  • continue 滥用:continue: true 会导致告警被多次处理,需确认是否真的需要多路分发。
  • 默认接收器覆盖:确保所有可能的告警最终都能匹配到某个接收器,避免告警丢失。
实战建议:在审计路由配置时,建议先绘制路由树结构图(可参考本章 SVG),然后逐层检查每个节点的匹配条件、接收器以及继承参数,确保路由逻辑与告警治理策略一致。