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

如何在Prometheus中对一系列Gauge指标求和并在Grafana中展示为单一标量?

解决Statsd Gauge转Prometheus后时间范围内总请求数的标量计算问题

你的场景很典型:Statsd里每分钟重置的Gauge代表当分钟请求数,Prometheus每15秒抓取一次,导致每个分钟内有4个重复的数值点。现在要把时间范围内的所有分钟请求数求和成单一标量,其实只需要调整PromQL的聚合方式即可。

直接可用的查询语句

sum by () (avg_over_time(my_requests[1m]))

为什么这个查询能解决问题?

拆解一下逻辑:

  • avg_over_time(my_requests[1m]):对每个1分钟的时间窗口计算平均值。因为每个窗口内的4个抓取点都是同一个数值(比如第一分钟的67),所以平均值正好等于该分钟的请求数。在3分钟的时间范围内,这个子查询会生成3个数据点:67、70、55。
  • sum by () (...):把这些分钟级的数据点全部求和,最终输出一个单一的标量值(192),完美匹配你的需求。

备选方案(用sum_over_time实现)

如果你更习惯用sum_over_time,也可以这样写:

sum by () (sum_over_time(my_requests[1m]) / 4)

原理是每个1分钟窗口有4个重复的数值,sum_over_time会得到67*4这样的结果,除以4就还原出当分钟的请求数,再求和即可。

Grafana面板设置提示

要让这个数值以单一标量展示,记得把Grafana的面板类型改成Stat(或者旧版的Single Stat),这样面板就会直接显示求和后的总数值,而不是折线图。如果你的时间范围包含不完整的分钟(比如3分10秒),可以给查询加上对齐参数,确保只计算完整分钟的数据:

sum by () (avg_over_time(my_requests[1m] align 1m))

align 1m会让窗口严格按分钟边界对齐,避免包含不完整分钟的无效数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 14:57:36