You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Alertmanager按job标签正则匹配分发告警到不同渠道配置方法

问题根因

配置存在两处核心错误,导致所有告警全被路由到pre-dev接收方:

  1. match_re语法完全错误:Alertmanager的match_re字段是键值对映射结构,YAML格式要求为标签名: 正则表达式。你的写法有两个问题:一是在匹配规则前加了-,把match_re从映射结构改成了列表结构;二是把标签和正则的分隔符写成了=而非YAML规定的:,最终导致子路由的匹配规则完全失效。Alertmanager路由默认按顺序匹配、命中即终止,第一个子路由因为没有有效匹配条件,会命中所有进入路由树的告警,所有告警直接发往pre-dev接收方,根本不会走到第二个dev路由。
  2. 根路由配置的默认接收方mail-receiver-dev没有在receivers列表中定义,属于无效配置,后续如果有告警不匹配任何子路由会直接抛错。
  3. 正则写法存在误匹配风险:当前dev路由的.*dev.*会匹配所有包含dev字符的job标签,就算语法正确,也可能因为job名其他位置带dev字符出现错路由。
修复步骤
  1. 修正match_re的YAML格式,去掉规则前的-,把=换成:,改成标准键值对写法
  2. 收紧正则规则,用后缀匹配避免误匹配:pre-dev类job匹配以-pre-dev结尾的标签值,普通dev类job匹配以-dev结尾的标签值
  3. 把根路由的默认接收方改成已经定义的合法接收方,用mail-dev作为兜底即可
修正后的完整配置
global:
  smtp_smarthost: 'mail.server.com:25'
  smtp_from: 'dev@server.com'
  smtp_require_tls: false
templates:
- '/etc/alertmanager/template/*.tmpl'
route:
  receiver: mail-dev
  group_by: ['alertname']
  group_wait: 3s
  group_interval: 5s
  repeat_interval: 1h
  routes:
  - receiver: 'mail-pre-dev'
    group_wait: 10s
    match_re: 
      job: '.*-pre-dev$'
  - receiver: 'mail-dev'
    group_wait: 10s
    match_re:
      job: '.*-dev$'

receivers:
- name: 'mail-dev'
  email_configs:
  - to: 'dev-group@server.com'
    send_resolved: true
- name: 'mail-pre-dev'
  email_configs:
  - to: 'pre-dev-group@server.com'
    send_resolved: true
匹配逻辑说明

路由严格按从上到下的顺序执行匹配:

  • 告警进入后先匹配第一个子路由,job标签以-pre-dev结尾的告警直接发往pre-dev邮件组,终止后续匹配
  • 未命中pre-dev规则的告警继续匹配第二个子路由,job标签以-dev结尾的告警发往dev邮件组,终止后续匹配
  • 两个规则都不命中的告警,由根路由兜底发往dev邮件组

配置修改完成后,执行amtool check-config /etc/alertmanager/alertmanager.yml验证语法正确性,确认无报错后重启Alertmanager加载配置即可。

内容的提问来源于stack exchange,提问作者Amir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 03:39:23