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

如何绘制忽略重启的Prometheus计数器图表?

问题描述

我有一个带标签的Prometheus计数器应用,应用重启时计数器会被重置(不会在运行间保存值)。我希望在Grafana中绘制出仿佛应用从未重启的计数器图表。目前使用sum by (label) (increase(counter_total[$__range]))能接近效果,但会系统性丢失重启后的第一个样本,同时初始样本值也无法体现。

举个例子:

应用计数器值期望结果sum (increase (...))
55--
772
11116
重启116
3146
81911

可以看到,初始值5和重启后的3都没有在sum (increase (...))的结果中体现。另外,应用无法从0初始化计数器——必须先获取标签信息,此时计数器已经是非零值。

解决方案

要实现忽略重启、完整呈现累计计数的效果,可以使用以下两种PromQL查询方案:

方案1:针对单次重启场景

sum by (label) (
  counter_total
  + sum by (label) (
    last_over_time(counter_total[$__range]) * resets(counter_total[$__range])
  )
)

原理

  • counter_total:当前时刻的计数器原始值;
  • last_over_time(counter_total[$__range]):获取整个时间范围内计数器重启前的最后累计值;
  • resets(counter_total[$__range]):统计时间范围内的计数器重置次数(重启一次返回1,无重启返回0);
  • 两者相乘后与当前计数器值相加,自动将重启前的累计值叠加到重启后的数值上,模拟“从未重启”的效果。

方案2:支持多次重启的通用场景

sum by (label) (
  counter_total
  + sum_over_time(
    increase(counter_total[$__interval])[$__range:-$__interval]
  )
)

原理

  • increase(counter_total[$__interval]):计算每个查询间隔内的计数器增量;
  • sum_over_time(...)[$__range:-$__interval]:累加当前时刻之前所有间隔的增量总和;
  • 与当前计数器值相加后,得到从时间范围起始到当前时刻的完整累计值,自动适配所有重启场景。
补充优化

如果使用Grafana可视化,还可以配合面板的变换功能简化操作:

  1. 先使用基础查询sum by (label) (increase(counter_total[$__interval]));
  2. 在面板的「Transform」选项中添加「Cumulative sum」变换,实现增量的累计叠加,同时需注意在查询中额外处理初始样本值的补充。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.04 05:15:53