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

Grafana Slack告警模板动态显示指标值失败求助

Grafana v10.3.1 通用Slack告警指标值提取解决方案

问题核心

你当前的困境是:只能在告警规则的Annotations.Description中硬编码{{ humanize $values.B.Value }}%来显示指标值,但想做一个通用的Current Value注解/模板,让所有告警复用、无需逐个配置变量名,尝试后一直失败。

从你的Payload分析关键数据

从你提供的告警Payload能看到,每个告警都自带两个关键字段,可用于动态提取指标值:

  • __values__:结构化的JSON字符串,存储所有告警变量的键值对(比如{"B":25.516..., "C":1})
  • __value_string__:字符串格式的变量列表,可作为备选,但结构化的__values__更易处理

两种通用解决方案

方案1:在告警规则中配置通用currentValue注解

直接在告警规则的Annotations里添加currentValue,用动态模板替代硬编码的变量名:

{{- $keys := keys $values -}}
{{- $targetVal := index $values (index $keys 0) -}}
{{- humanize $targetVal.Value }}%
  • 逻辑:先获取所有告警变量的键名列表,取第一个键对应的数值,用humanize格式化后加百分号
  • 优势:一次配置到告警规则模板(如果用告警规则组的话),所有同组告警自动复用

方案2:在Slack模板中直接动态解析(无需修改告警规则)

如果不想改动告警规则,直接在Slack模板的slack.text部分替换原来的currentValue判断块,添加动态处理逻辑:

{{ if .Annotations.__values__ }}
  {{- $valuesObj := parseJson .Annotations.__values__ -}}
  {{- $firstKey := index (keys $valuesObj) 0 -}}
  {{- $formattedVal := humanize (index $valuesObj $firstKey) -}}
  *Current Value:* `{{ $formattedVal }}%`
{{ end }}
  • 逻辑:解析__values__为JSON对象,取第一个键对应的数值,格式化后显示
  • 优势:无需修改任何告警规则,直接在Slack全局模板中生效

为什么之前的通用尝试失败?

你之前的问题大概率是硬编码了变量名(比如$values.B.Value),但不同告警的变量名可能不同(比如有的是A、B,有的是metric),而通用方案的核心是动态遍历/获取变量,而非指定固定变量名。

额外优化(针对多变量场景)

如果告警存在多个变量(比如Payload里的B和C),需要过滤无效值(比如状态值1),可以在模板中加判断逻辑:

{{- $keys := keys $values -}}
{{- range $key := $keys -}}
  {{- $val := index $values $key -}}
  {{- if gt $val.Value 1 -}} {{/* 过滤数值小于等于1的状态变量 */}}
    {{- humanize $val.Value }}%
  {{- end -}}
{{- end -}}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:27:38