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

如何在Prometheus中为告警设置多值标签以指定接收人群?

嘿,这个定向告警的需求在Prometheus生态里太常见了!我之前帮团队搭建告警系统时也遇到过一模一样的问题——确实,Prometheus的单个标签只能存单一字符串值,没法直接塞多个团队进去,但咱们有好几种靠谱的解法,我给你详细说说:

方案1:在告警规则中添加目标团队标签

最直观的方式是在Prometheus的告警规则里,给不同服务的告警打上目标团队的组合标签(用逗号分隔多个团队),然后在Alertmanager里通过模板解析这个标签来分发告警。

比如在你的prometheus/rules.yml里配置告警规则:

groups:
- name: service_down_alerts
  rules:
  # 招聘团队专属服务的down告警
  - alert: ServiceDown
    expr: up == 0 and service =~ "^recruit-.*"
    for: 5m
    labels:
      severity: critical
      target_teams: "recruiters"
    annotations:
      summary: "招聘服务 {{ $labels.service }} 已宕机"
      description: "{{ $labels.service }} 持续宕机超过5分钟,请排查"

  # 销售团队专属服务的down告警
  - alert: ServiceDown
    expr: up == 0 and service =~ "^sales-.*"
    for: 5m
    labels:
      severity: critical
      target_teams: "sales"
    annotations:
      summary: "销售服务 {{ $labels.service }} 已宕机"
      description: "{{ $labels.service }} 持续宕机超过5分钟,请排查"

  # 需要同时通知招聘和销售的service1告警
  - alert: ServiceDown
    expr: up == 0 and service == "service1"
    for: 5m
    labels:
      severity: critical
      target_teams: "recruiters,sales"
    annotations:
      summary: "核心服务 service1 已宕机"
      description: "service1 持续宕机超过5分钟,招聘和销售团队请关注"

然后在Alertmanager的配置里,用模板拆分target_teams标签来发送邮件:

receivers:
- name: 'multi-team-alert'
  email_configs:
  - to: '{{ range split $labels.target_teams "," }}{{ . }}@yourcompany.com{{ end }}'
    subject: '[告警] {{ .Annotations.summary }}'
    html: '{{ .Annotations.description }}'

route:
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 1h
  receiver: 'multi-team-alert'

方案2:用Alertmanager路由树实现多团队分发

如果不想修改Prometheus的告警规则,也可以直接在Alertmanager里通过**路由规则+continue: true**来实现同一个告警发给多个团队。

首先定义各个团队的接收者:

receivers:
- name: 'recruiters-team'
  email_configs:
  - to: 'recruiters@yourcompany.com'
    subject: '[招聘团队告警] {{ .Annotations.summary }}'
- name: 'sales-team'
  email_configs:
  - to: 'sales@yourcompany.com'
    subject: '[销售团队告警] {{ .Annotations.summary }}'
- name: 'vendor-team'
  email_configs:
  - to: 'vendors@yourcompany.com'
    subject: '[供应商告警] {{ .Annotations.summary }}'

然后配置路由树,利用continue: true让告警匹配多个路由:

route:
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 1h
  receiver: 'default-receiver' # 可选,默认接收者

  routes:
  # service1告警同时发给招聘和销售
  - match:
      service: 'service1'
    receiver: 'recruiters-team'
    continue: true # 开启后,告警会继续匹配后续路由
  - match:
      service: 'service1'
    receiver: 'sales-team'

  # 招聘团队专属服务告警
  - match_re:
      service: '^recruit-.*'
    receiver: 'recruiters-team'

  # 销售团队专属服务告警
  - match_re:
      service: '^sales-.*'
    receiver: 'sales-team'

这里的continue: true是关键——默认告警匹配到第一个路由后就会停止,开启这个参数后,会继续往下匹配其他符合条件的路由,从而实现同一个告警发给多个团队。

小技巧:批量匹配服务

如果你的服务命名有规律(比如前缀区分团队),用match_re正则匹配可以减少重复配置,比如service: '^recruit-.*'就能匹配所有招聘团队的服务,不用逐个写service名称。

这两种方案都能完美解决你的需求,具体选哪种看场景:如果服务和团队的对应关系很少变动,方案1更简洁;如果需要经常调整告警接收规则,方案2的路由配置更灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 21:47:34