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

Alertmanager按标签分组Slack告警失败,求正确配置方法

解决Alertmanager合并不同grouping_tag告警到单条Slack消息的问题

问题原因

你当前的Alertmanager配置中,子路由的group_by: ['grouping_tag']会将每个不同的grouping_tag值单独划分为一个告警组,所以每条告警会对应一条独立的Slack消息。要合并所有不同grouping_tag的告警,需要将group_by设置为所有目标告警共有的标签,确保所有符合条件的告警被归为同一组。

解决方案

1. 修改Alertmanager路由配置

将子路由的group_by改为所有告警共有的标签(比如alertname和type,这两个标签在你的所有test_alert告警中都是相同的):

route:
  group_by: ['alertname', 'service_name']
  repeat_interval: 10s
  group_interval: 10s
  receiver: default

  routes:
    - match:
        type: 'test_alert'
      receiver: 'slack'
      group_by: ['alertname', 'type']  # 使用共有的标签,确保所有test_alert合并为一组
      group_wait: 1m
      group_interval: 10s
      continue: false

2. 调整Slack消息模板

由于现在所有告警被合并到同一组,原模板中{{ .GroupLabels.grouping_tag }}无法获取到值(因为group_by里不再包含这个标签),需要遍历所有告警来展示每个grouping_tag的信息:

receivers:
  - name: 'slack'
    slack_configs:
      - send_resolved: true
        color: "{{ if eq .Status `firing` }}#ffe12b{{ else }}good{{ end }}"
        title: "{{ .CommonLabels.alertname }} - {{ .Status | toUpper }}"
        text: >-
          {{ if eq .Status "firing" }}
          触发时间: {{ .StartsAt.Format "2006-01-02 15:04:05" }}
          ---
          {{ range .Alerts }}
          - 分组标签: {{ .Labels.grouping_tag }}
            描述: {{ .Annotations.description }}
          {{ end }}
          {{ else }}
          恢复时间: {{ .EndsAt.Format "2006-01-02 15:04:05" }}
          ---
          恢复的分组标签: {{ range .Alerts }}{{ .Labels.grouping_tag }} {{ end }}
          {{ end }}

3. 优化Prometheus告警规则(可选)

你的Prometheus规则中,labels里的grouping_tag: "{{ $labels.grouping_tag }}"是冗余的,因为expr: sum by (grouping_tag) (...)已经自动将grouping_tag标签附加到告警中,可以直接删除这一行:

groups:
- name: test alert
  rules:
  - alert: test alert for my metric
    expr: sum by (grouping_tag) (rate(my_metric{}[60s])) == 0
    #for: 120s
    labels:
      severity: disaster
      resolv: true
      type: "test_alert"  # 删除冗余的grouping_tag配置
    annotations:
      summary: "test alert title"
      description: "test text message with {{ $labels.grouping_tag }}"

验证步骤

  1. 重启Alertmanager使配置生效
  2. 触发多个不同grouping_tag的告警,等待group_wait设置的1分钟后,检查Slack是否收到合并后的单条消息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 13:52:46