Grafana v9.5.0告警配置:根据告警标签设置动态邮件主题
解决Grafana 9.5.0动态邮件主题配置问题
问题分析
你之前的模板失效主要有两个原因:
- 错误使用了单数的
.Alert上下文,Grafana告警模板中邮件主题的上下文是复数.Alerts(数组类型),单条告警也会被包裹在数组里。 - 遍历标签的语法错误,直接遍历
.Alerts.Labels会因为路径不存在导致输出为空。
正确配置步骤
1. 确保告警规则包含目标标签
先确认你的告警规则中已经添加了serviceName标签,值需从Logstash的日志字段中映射(比如在告警规则的Labels配置里设置:serviceName: {{ $labels.serviceName }},具体字段名根据你的Logstash数据结构调整)。
2. 替换邮件主题模板
使用以下模板实现动态主题,支持单条/多条告警场景,同时处理标签缺失的兜底情况:
{{ define "email.subject" }} {{- with index .Alerts 0 }} {{- if .Labels.serviceName }} {{ .Labels.serviceName }} 出现故障 {{- else }} 未知服务出现故障 {{- end }} {{- else }} 告警通知:服务异常 {{- end }} {{ end }}
如果需要包含环境信息(比如你之前提到的SYST env),可以扩展模板:
{{ define "email.subject" }} {{- with index .Alerts 0 }} {{- if .Labels.serviceName }} {{ .Labels.serviceName }} 在 {{ .Labels.env | default "SYST" }} 环境出现故障 {{- else }} 未知服务在 {{ .Labels.env | default "SYST" }} 环境出现故障 {{- end }} {{- else }} {{ .Labels.env | default "SYST" }} 环境服务异常告警 {{- end }} {{ end }}
3. 模板生效方式
进入Grafana的Alerting -> Contact points,找到对应的邮件联系人点,在Message templates区域的Email subject输入框中替换为上述模板即可。
关键语法说明
index .Alerts 0:从告警数组中取出第一条告警(多数场景下邮件会聚合同类型告警,取第一条即可)with语句:避免空指针异常,当.Alerts为空时执行兜底逻辑.Labels.serviceName:直接引用告警规则中定义的标签键,需与你配置的标签名完全一致
内容的提问来源于stack exchange,提问作者eirugn
相关产品推荐
相关产品推荐

