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

Grafana v11.2.0告警注释描述中展示查询详情的实现方案

在Grafana 11.2.0告警描述中按entry_type分组展示entry_id(无需修改SQL)

问题背景

我有一个Grafana告警包含两个查询:

  1. 阈值查询:当返回结果大于0时触发告警,SQL如下:
SELECT COUNT(DISTINCT(dt.entry_id))
FROM database_table_process dt
  JOIN entities e using(entry_id)
WHERE $__timeFilter(dt.started)
  1. 详情查询:用于在告警描述中展示分组后的entry_id,SQL如下:
SELECT e.entry_id, COUNT(*)
FROM database_table_process dt
  JOIN entities e using(entry_id)
WHERE $__timeFilter(dt.started) 
GROUP BY dt.entry_type

预期告警描述输出:

Alert: 14 entries are affected.

Type simple_entry: 1231, 1245, 1245
Type complex_entry: 6555, 2424, 09767

此前尝试用range、series等方法获取第二个查询的数据未成功,直接展示查询值仅显示整数,使用len、range等方法后描述中无变量值填充。当前使用Grafana v11.2.0版本,希望找到无需调整SQL即可实现该需求的方法。

解决方案

1. 为查询设置唯一ID

在告警规则的「Queries」标签页中,给两个查询分别设置自定义ID:

  • 阈值查询ID设为main(可自定义,后续模板中对应引用即可)
  • 详情查询ID设为details

2. 编写告警描述模板

切换到「Notification templates」标签页,编辑告警消息的「Description」部分,使用以下Grafana模板语法:

Alert: {{ .Values.main }} entries are affected.

{{ range $type, $entries := groupBy .Data.details.Series "entry_type" }}
Type {{ $type }}: {{ range $index, $entry := $entries }}{{ if $index }}, {{ end }}{{ index $entry.Labels "entry_id" }}{{ end }}
{{ end }}

模板语法说明

  • {{ .Values.main }}:引用阈值查询(ID为main)的返回结果,即受影响的总条目数
  • groupBy .Data.details.Series "entry_type":将详情查询的所有数据按entry_type标签分组
  • 内层range遍历分组后的每个条目,提取entry_id标签值并以逗号分隔拼接

关键注意事项

  • 确保详情查询的SQL执行后,Grafana能将entry_type和entry_id识别为数据系列的标签(这是Grafana对SQL GROUP BY结果的默认处理逻辑,只要每条返回数据对应唯一的entry_type+entry_id组合即可)
  • 如果你的详情查询ID不是details,需将模板中的.Data.details.Series替换为对应的查询ID

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 17:42:44