如何让Grafana时间序列面板展示时间区间内的Delta值(从0起始)
在Grafana时间序列面板展示相对起始点的Delta值
以下是两种可行的实现方式,无需依赖「Visual mapping」板块,解决你要从0开始统计时间区间首尾值差值的需求:
1. 数据源查询层面直接计算(推荐)
根据你使用的数据源类型,用对应函数直接计算每个点相对于时间区间起始值的差值:
- Prometheus:使用表达式
metric - first_over_time(metric[$__range]),其中$__range是Grafana内置变量,自动匹配当前面板选择的时间区间长度。这个表达式会把区间内第一个值作为基准(0),后续每个点的值都减去该基准,最终生成从0开始的增量序列,最后一个点的数值就是首尾值的总差值。 - InfluxDB:通过子查询先获取起始值,再计算差值,示例SQL:
SELECT ("value" - (SELECT FIRST("value") FROM "metric" WHERE time >= now() - $__range)) AS "delta_value" FROM "metric" WHERE time >= now() - $__range - Graphite:使用函数组合
subtractSeries(metric, keepLastValue(shift(metric, $__range))),通过shift平移序列获取起始值,再用subtractSeries完成差值计算。
2. 利用Grafana Transform转换实现
如果不想修改原始查询,可在面板「Transform」标签页按以下步骤操作:
- 添加「Reduce」转换,聚合方式选择「First」,生成当前时间区间的起始值字段。
- 再添加「Add field from calculation」转换,选择「Binary operation」,操作数分别选原始值字段和刚生成的起始值字段,运算符选「Subtract」,得到每个点相对于起始值的差值字段。
- 最后隐藏原始值字段和起始值字段,只保留计算出的delta字段即可。
内容的提问来源于stack exchange,提问作者alex747
相关产品推荐
相关产品推荐

