Grafana Slack告警模板问题:多级别告警均显红色需区分
解决Grafana Slack告警颜色区分及多级别共存时统一红色显示问题
当前你的Grafana Slack告警模板无法正确按 severity 区分颜色,且未实现「三类告警同时触发时全部显示红色」的需求,导致所有告警均显示红色。以下是修改后的完整模板,可满足你的需求:
{{ define "slack_title" }} {{ if gt (len .Alerts.Firing) 0 }} 🔥 {{ len .Alerts.Firing }} alert(s) firing {{ end }} {{ if gt (len .Alerts.Resolved) 0 }} ✅ {{ len .Alerts.Resolved }} alert(s) resolved {{ end }} {{ end }} {{ define "slack_message" }} {{ if gt (len .Alerts.Firing) 0 }} {{ range .Alerts.Firing }} {{ template "slack_alert_firing" .}} {{ end }} {{ end }} {{ if gt (len .Alerts.Resolved) 0 }} {{ range .Alerts.Resolved }} {{ template "slack_alert_resolved" .}} {{ end }} {{ end }} {{ end }} {{/* alert */}} {{ define "slack_alert_firing" }} 🔥 Alert Fired Cluster: {{ .Labels.Cluster }} Instance: {{ reReplaceAll ":9100" "" .Labels.instance }} Value: {{ .Annotations.Value }} Node: {{ reReplaceAll "aks-" "" .Labels.nodename }} Severity: {{ .Labels.severity }} {{ end }} {{ define "slack_alert_resolved" }} ✅ Alert Resolved Cluster: {{ .Labels.Cluster }} Instance: {{ reReplaceAll ":9100" "" .Labels.instance }} Value: {{ .Annotations.Value }} Node: {{ reReplaceAll "aks-" "" .Labels.nodename }} Severity: Normal {{ end }} {{/* Color of Slack attachment (appears as line next to alert )*/}} {{ define "slack.monzo.color" -}} {{ if eq .Status "firing" -}} {{/* 检查是否存在Critical级别的告警,存在则统一红色 */}} {{ $hasCritical := false }} {{ range .Alerts.Firing }} {{ if eq .Labels.severity "critical" }} {{ $hasCritical = true }} {{ end }} {{ end }} {{ if $hasCritical -}} danger {{/* 无Critical时检查是否有Warning,显示橙色 */}} {{- else -}} {{ $hasWarning := false }} {{ range .Alerts.Firing }} {{ if eq .Labels.severity "warning" }} {{ $hasWarning = true }} {{ end }} {{ end }} {{ if $hasWarning -}} warning {{/* 仅Normal时显示绿色 */}} {{- else -}} good {{- end }} {{- end }} {{ else -}} good {{- end }} {{- end }}
关键修改说明
- 多级别共存处理:遍历所有触发的告警,优先检查是否存在
critical级别,只要有一个Critical告警,所有通知统一使用danger(红色) - 分级颜色匹配:
- Critical →
danger(红色) - Warning(无Critical时)→
warning(橙色) - Normal(无Critical/Warning时)→
good(绿色)
- Critical →
- 恢复状态保持:告警恢复时仍使用
good(绿色),符合Normal的颜色要求
原模板依赖CommonLabels.severity,但当存在多级别告警时,CommonLabels不会包含severity标签(标签值不统一),导致逻辑匹配错误,现在改为遍历所有触发告警的标签,确保判断准确。
内容的提问来源于stack exchange,提问作者gotothesky
相关产品推荐
相关产品推荐

