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

如何在Grafana中绘制Prometheus计数器7天累计请求趋势图

解决Grafana中Prometheus计数器的累计请求数图表问题

我来帮你搞定这个问题!首先得明确你之前的查询为什么不符合预期:sum(increase(http_requests_total{...}[7d])) 是每个时间点计算过去7天的总增量,随着时间推进,旧的日期会被移出7天窗口,新的日期加入,所以数值会波动,而你需要的是从图表起始时间开始,到当前时间点的累计总和——也就是一条持续递增的曲线,不会因为旧数据移出窗口而波动。

正确的查询语句

你可以用PromQL的cumulative_sum函数配合increase和聚合操作来实现需求,具体语句如下:

cumulative_sum(
  sum(
    increase(http_requests_total{method="POST",path="/resource/aaa",statusClass="2XX"}[$__interval])
  ) by ()
)

逐部分解释

  1. $__interval:这是Grafana的内置变量,会根据你的图表时间范围和自动计算的分辨率生成合适的时间步长,确保每个数据点的时间窗口既不会太细导致数据冗余,也不会太粗丢失细节。
  2. increase(...)[$__interval]:计算每个应用实例在当前步长窗口内的请求增量,而且会自动处理计数器重置的情况(比如实例重启后计数器从0开始,increase能正确识别并计算真实增量)。
  3. sum(...) by ():把所有实例的增量汇总,得到该时间窗口内的全局总请求数。
  4. cumulative_sum(...):将每个时间窗口的总请求数依次累加,最终得到从图表起始时间到当前点的累计请求总和,完全符合你给出的示例效果。

匹配你的示例场景验证

假设你的图表时间范围是第2天到第8天,步长设为1天:

  • 第2天:increase得到5,cumulative_sum结果为5
  • 第3天:increase得到15,累计总和为5+15=20
  • 第4天:increase得到10,累计总和为30
  • ...以此类推,最终第8天的累计总和为70,和你预期的结果完全一致。

额外注意事项

  • 如果你的Prometheus版本低于2.20,cumulative_sum函数可能不支持,建议升级到较新版本的Prometheus。
  • 如果你希望强制按天分段统计(而不是依赖Grafana自动步长),可以把$__interval替换为1d,这样每个数据点对应一天的增量累计。
  • 确保Prometheus的抓取间隔(scrape_interval)和Grafana的步长匹配,避免出现数据不准确的情况。

内容的提问来源于stack exchange,提问作者GavinE-OVO

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:20:09