AlertManager中CommonAnnotations仅对DeadMansSwitch生效问题求助
解决AlertManager Slack告警无法显示自定义摘要的问题
我之前也碰到过几乎一模一样的问题,咱们先拆解下根源,再一步步解决:
你在Slack配置里用了{{ .CommonAnnotations.summary }},但CommonAnnotations只有当同组内所有告警都共享这个注解时才会存在。DeadMansSwitch通常是单独触发的告警(组里只有它自己),所以它的私有注解会被自动当成CommonAnnotations,自然能正常显示;但其他告警如果是组内多个触发,或者组内不是所有告警都定义了summary,CommonAnnotations.summary就会是空值,Slack只能 fallback 到默认格式。
核心解决方案:遍历单个告警的私有注解
把alertmanager.yaml里的Slack文本模板改成遍历每个触发的告警,直接引用每个告警自己的Annotations,而非依赖CommonAnnotations。修改后的配置如下:
修改后的alertmanager.yaml关键片段
receivers: - name: 'mail-receiver' slack_configs: - api_url: https://hooks.slack.com/services/XXXXXX/XXXXX1/e7AXXXXXXopzmHNTJmL channel: '#alertmanager-testing' text: | {{ range .Alerts }} *告警名称:* {{ .Labels.alertname }} *摘要:* {{ .Annotations.summary }} *描述:* {{ .Annotations.description }} *触发时间:* {{ .StartsAt.Format "2006-01-02 15:04:05" }} {{ end }} - name: 'critical-mail-receiver' slack_configs: - api_url: https://hooks.slack.com/services/T0XXXXCL/XXX6G4/VUVKZ8CnXXXXXXXzZguoXq channel: '#place' text: | {{ range .Alerts }} ⚠️ *紧急告警:* {{ .Labels.alertname }} *摘要:* {{ .Annotations.summary }} *描述:* {{ .Annotations.description }} *触发时间:* {{ .StartsAt.Format "2006-01-02 15:04:05" }} {{ end }}
额外优化建议
- 移除远程模板依赖:你当前引用的远程
default.tmpl可能会和自定义文本冲突,建议直接删除global.templates里的远程链接,避免模板优先级导致的渲染异常。 - 添加默认值兜底:如果有些告警没定义
summary或description,可以给模板加默认值,比如{{ .Annotations.summary | default "无摘要信息" }},避免消息出现空白。 - 单告警测试验证:可以临时修改某个告警的
expr(比如改成avg(...) < 100)触发测试告警,快速验证Slack消息是否正常显示自定义内容。
这样修改后,不管是单个告警还是组内多个告警,每个告警的自定义摘要、描述都会被正确渲染到Slack频道里了。
内容的提问来源于stack exchange,提问作者Rohit Yadav
相关产品推荐
相关产品推荐

