匹配器语法是什么
Alertmanager 的路由、抑制与静默都靠匹配器(matchers)挑选告警,运算符有四种:等值、不等、正则匹配、正则不匹配。关键特性是正则默认锚定,也就是正则必须匹配整个标签值,而不是其中的一段;想表达「以某前缀开头」必须显式在正则里补上通配收尾。这一点与多数检索语法相反,是配置写对了却匹配不到告警的首要原因。
基本信息
| 适用平台 | Alertmanager 0.22 及以上支持新式字符串列表写法 |
|---|---|
| 写法位置 | route.matchers、inhibit_rules、silences |
| 四种运算符 | 等于、不等于、正则匹配、正则不匹配 |
| 校验工具 | amtool check-config 与 config routes test |
典型使用场景
- 严重级别分流:severity 为 critical 的路由发到电话通道
- 按团队归属分发:按 service 标签把告警发到对应值班组
- 批量排除测试环境:用不匹配条件过滤掉 dev 与 test 的标签值
- 正则归类:把同一业务线前缀的多个服务归到一个接收器
- 抑制关联:上游故障出现时压下同一集群的衍生告警
匹配器写法
匹配器写法
route:
routes:
- matchers:
- severity="critical" # 等值:最常用也最安全
- env!="dev" # 不等:排除环境
- service=~".*-api" # 正则默认锚定:整值匹配
- job!~"test|legacy" # 正则不匹配
receiver: pager
# 校验:amtool check-config alertmanager.yml
# 预演:amtool config routes test --config.file=alertmanager.yml severity=critical运算符对照
| 写法 | 含义 | 注意 |
|---|---|---|
| 标签="值" | 精确相等 | 值里含空格要加引号 |
| 标签!="值" | 不相等 | 标签缺失时的行为要实测确认 |
| 标签=~"正则" | 正则匹配,整值锚定 | 想表达包含必须加通配 |
| 标签!~"正则" | 正则不匹配 | 取反条件先放少量告警验证 |
| 多条件并列 | 逻辑与 | 同一层级全部满足才命中 |
同一配置里新旧两种匹配写法混用时校验会失败:旧式是 match / match_re 字典,新式是字符串列表,迁移期间逐个路由替换并用校验工具确认。
正则里的点号是元字符,匹配 IP 或域名时要转义,否则点号会匹配任意字符;写完用 config routes test 打一批样本标签验证匹配结果。