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

Grafana中如何获取多个Prometheus时序最新非空值的最大值

解决方案

步骤1:调整单查询PromQL,预先取最新非空值

不需要修改查询结构、也不需要合并多个查询,只需要给每个原PromQL套一层last_over_time函数,直接在Prometheus侧返回对应时序的最新非空值,避免全量时序拉取到Grafana后出现时间对齐错位问题:

# 原查询替换为如下格式,时间范围设置为大于你最长的采集间隔即可,比如采集间隔最大为1分钟则设为2m
last_over_time(你的原指标查询表达式[2m])

如果单个查询会返回多台服务器的时序,可以加聚合保留实例维度:

max by (instance) (last_over_time(你的原指标查询表达式[2m]))

这个调整性能损耗极低,last_over_time是Prometheus原生优化的轻量函数,反而比拉取全量时序到Grafana处理性能更高。

步骤2:配置Grafana转换规则

按顺序添加3个转换即可得到符合预期的最大值:

  • 第一个转换选减少(Reduce):模式选择「系列到行」,计算规则选择「最后一个非空值」,作用是把所有查询返回的最新值全部合并到同一行的不同字段中,不会因为采集时间差异出现空值
  • 第二个转换选从计算添加字段(Add field from calculation):模式选择「减少行」,计算规则选择「最大值」,计算所有服务器最新值的最大值
  • 第三个转换选组织字段(Organize fields):仅保留上一步生成的最大值字段,隐藏其他字段,即可直接绑定到Gauge面板展示

按照上述配置,你的示例数据会固定取到10(server1最新值)、26(server2最新值)、23(server3最新值)的最大值26,不会因为采集时间错位出现最大值跳变到23的问题,也不会取到历史最高值49。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:45:03