如何在Grafana中使用自定义模板按标签分组告警?
按标签分组告警的模板实现
要实现按branch标签分组展示告警,你可以利用Go模板的变量和映射(map)来手动完成分组逻辑,以下是具体的实现方案:
完整模板代码
{{/* 初始化一个map,用来存储每个branch对应的告警列表 */}} {{- $groupedAlerts := dict -}} {{/* 遍历所有触发的告警,将它们按branch分类到map中 */}} {{- range .Alerts.Firing -}} {{- $branch := .Labels.branch -}} {{- if not (index $groupedAlerts $branch) -}} {{- $_ := set $groupedAlerts $branch list -}} {{- end -}} {{- $_ := append (index $groupedAlerts $branch) . -}} {{- end -}} {{/* 遍历分组后的map,输出每个branch的告警 */}} {{- range $branch, $alerts := $groupedAlerts -}} Branch {{ $branch }} -------- {{- range $alerts -}} {{ .Labels.test_plan }}, job: {{ .Labels.id }}, Link: ... {{- end -}} {{- end -}}
代码说明
- 初始化分组映射:用
dict创建空映射$groupedAlerts,键为branch标签值,值为对应分支下的告警列表。 - 填充分组数据:
- 遍历所有触发告警,提取当前告警的
branch值 - 若映射中无该分支的键,用
set初始化一个空列表 - 将当前告警追加到对应分支的列表中
- 遍历所有触发告警,提取当前告警的
- 输出分组内容:
- 遍历映射的键值对,先输出分支标题和分隔线
- 再遍历该分支下的所有告警,仅输出非重复字段(test_plan、job、链接)
效果验证
用你提供的示例数据,模板会输出:
Branch A -------- 1, job: aaa, Link: ... 2, job: bbb, Link: ... Branch B -------- 3, job: ccc, Link: ... 4, job: ddd, Link: ...
内容的提问来源于stack exchange,提问作者Jay Joshi
相关产品推荐
相关产品推荐

