如何在Grafana图例中显示$__interval倍数的动态间隔值?
解决Grafana别名中实现动态间隔计算的方法
方法1:利用内置间隔变量+模板函数
Grafana内置了$__interval(当前查询间隔,格式如1m)和$__interval_ms(间隔对应的毫秒数值)变量,结合math()模板函数可直接在别名中完成计算:
- 示例别名(将毫秒转换为秒):
访问量 (间隔: ${math($__interval_ms / 1000)}秒) - 示例别名(同时展示原间隔与转换后单位):
CPU使用率 (间隔: ${__interval} = ${math($__interval_ms / 60000)}分钟 = ${math($__interval_ms / 1000)}秒)
方法2:自定义间隔变量+正则提取计算
如果使用了自定义的间隔类型变量(比如命名为custom_interval),可通过正则提取数值后进行运算:
- 先创建自定义间隔变量:类型选「Interval」,设置所需的可选间隔值(如
1m、5m、1h) - 在别名中用正则提取变量中的纯数字部分,再做乘法/除法转换:
注:内存使用率 (间隔: ${custom_interval} = ${math(${regexReplaceAll("[^0-9]", "$custom_interval", "")} * 60)}秒)regexReplaceAll("[^0-9]", "$custom_interval", "")会把5m这类格式的变量提取为纯数字5,再结合math()完成计算。
方法3:通过查询语句传递计算值(适用于PromQL等数据源)
如果是Prometheus这类支持标签的数据源,可在查询中用label_replace函数生成包含计算后间隔值的标签,再在别名中引用:
- 示例PromQL查询:
label_replace(rate(node_cpu_seconds_total[${custom_interval}]), "interval_sec", "${math(${regexReplaceAll("[^0-9]", "$custom_interval", "")} * 60)}", "", "") - 随后将别名设置为:
CPU使用率 (间隔: $interval_sec 秒)
注意:math()模板函数从Grafana 8.0版本开始支持,若使用旧版本可优先考虑升级,或通过字符串拼接的方式间接展示转换后的值。
内容的提问来源于stack exchange,提问作者Denis Rimskii
相关产品推荐
相关产品推荐

