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

基于Prometheus数据源,在Grafana中实现0起始的增量计数器展示

实现Grafana+Prometheus的0基准计数器增量展示(适配系统重启)

嘿,刚好我前段时间解决过完全一样的需求!要在Grafana里用Prometheus做0基准的计数器增量展示,不用rate(),还得适配系统重启的情况。下面给你直接能用的方案,分精准版和简化版,看你需求来选:

精准版:保证总增量准确(适配多次重启)

如果需要严格统计所选时间范围内的总写入字节数,哪怕中间系统重启多次,最终值都是准确的,用这个PromQL:

written_bytes 
- (last_over_time(written_bytes[$__range_start:$__range_start]) or vector(0)) 
+ sum(resets(written_bytes[$__range_start:$__time])) * (last_over_time(written_bytes[$__range_start:$__range_start]) or vector(0))

逐段拆解逻辑:

  • $__range_start:Grafana自带的内置变量,自动对应你当前选中的时间范围起始时刻,不用手动算时间。
  • last_over_time(written_bytes[$__range_start:$__range_start]):精准获取起始时刻的计数器值——用[start:start]的时间范围,确保哪怕起始时刻没有刚好的采样点,也能拿到最近的一条数据。
  • or vector(0):兜底用的,如果起始时刻进程还没启动(比如系统是在你选的时段内重启的),就用0作为基准值,避免出现NaN。
  • sum(resets(written_bytes[$__range_start:$__time])):统计从起始时刻到当前时刻的计数器重置次数(每次进程重启,计数器从0开始,就会触发一次重置)。
  • 最后那段加法:每次重置相当于之前的增量已经“独立”了,所以要把起始基准值加回来,保证重启后的增量计算不会出现负数,最终总增量是所有重启前后的增量之和。

举个实际例子你就懂了:

  • 起始时刻t0:计数器值=10000
  • t1时刻:计数器涨到15000,此时增量是15000-10000=5000
  • t2时刻:进程重启,计数器重置为0,resets返回1,计算结果是0-10000 +1*10000=0,和0基准要求一致
  • t3时刻:计数器涨到500,计算结果是500-10000 +1*10000=500,总增量就是5000+500=5500,完全准确

简化版:仅避免负数(适合无需精准总增量的场景)

如果你的场景只需要展示增量趋势,不用严格统计总写入量,重启后从0开始计数就行,用这个更简洁的写法:

max(written_bytes - (last_over_time(written_bytes[$__range_start:$__range_start]) or vector(0)), 0)

这个逻辑很简单:用max(...,0)把重启后可能出现的负数直接转为0,保证图表不会出现向下跳的异常线条,重启后从0开始继续展示增量。

Grafana配置小提示

  • 确保你的Prometheus是2.0+版本(resets函数是2.0之后才支持的,大部分场景都满足)
  • 图表选折线图或者面积图,开启填充效果的话,增量变化的过程会更直观
  • 不用手动改任何变量,Grafana会自动把$__range_start和$__time替换成你当前选的时间范围参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 18:42:48