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

如何在应用重启后保留Prometheus TSDB中的指标值?

应用重启后计数器指标重置问题的解决办法

首先得明确:Prometheus的计数器指标本身就是内存级的单调递增计数器,应用重启后内存清空,计数器自然会回到初始值,这是标准行为。但要实现重启后基于TSDB的最后值继续累加,或者查询时得到正确的累计结果,有两种核心思路:

一、让应用启动时加载Prometheus中的历史值

如果需要应用本身的计数器从历史值开始累加,得在应用启动逻辑里加一步:

  • 调用Prometheus的HTTP API,用PromQL查询对应指标的最后记录值,比如针对你的示例数据,查询/api/abc的200状态计数器:
    last_over_time(api_request_count{api="/api/abc", status="200"}[1d])
    
  • 把查询到的数值作为计数器的初始值,替代默认的0,之后应用的计数就会从这个值开始累加
  • 注意:要处理查询不到结果的情况(比如第一次启动),此时还是用默认初始值

另外,也可以在应用本地用文件、数据库(比如Redis、SQLite)持久化计数器值:每次计数器更新时同步保存到本地存储,应用启动时先读取本地存储的数值初始化计数器,这种方式不需要依赖Prometheus,更可靠。

二、用PromQL自动处理计数器重置(无需修改应用)

如果只是需要在查询时得到正确的累计结果,不需要应用本身持有历史值,直接用Prometheus的内置函数即可:

  • 用increase()函数:它会自动识别计数器的重置(比如应用重启导致的数值下降),计算指定时间范围内的增量总和,比如查询过去24小时的总请求数:
    increase(api_request_count{api="/api/abc", status="200"}[24h])
    
  • 用sum_over_time()结合offset计算总累计:如果要获取从指标开始采集到现在的总次数,可以用这个组合,自动抵消重启的影响:
    sum(
      sum_over_time(api_request_count[1d])
      - on(api, status) group_left()
      sum_over_time(api_request_count offset 1d[1d])
    )
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:52:38