如何在服务器重启后获取正确的Prometheus Counter类型指标数据?
问题解答
1. 获取目标统计结果的PromQL查询
要得到总属性计数19、success总数14、failed总数5的统计结果,可使用以下PromQL:
- 总属性计数:
sum(attribute_count_total) - 按success/failed分组统计:
sum by(attr2) (attribute_count_total)
这两个查询会将所有标签组合下的attribute_count_total指标值分别求和,其中sum by(attr2)会按attr2标签(success/failed)分组聚合。
2. 应用重启后保留Counter计数的方案
Counter类型指标在应用重启后会重置为0,可通过两种方式解决:
应用层面处理
在应用内部将Counter的当前值持久化到本地文件、数据库或缓存中,应用启动时从持久化存储读取并恢复计数,确保Counter的连续性。
PromQL层面处理
利用Prometheus内置函数自动处理Counter重置:
- 使用
increase(attribute_count_total[1m])计算每分钟的增量(该函数会自动识别Counter重置,从0开始计算增量) - 若要统计累计值,可结合
sum_over_time累加所有时间段的增量:sum(sum_over_time(increase(attribute_count_total[1m])[∞:1m])) - 在Grafana中展示时,可将面板的显示模式设置为Cumulative(累计),基于增量数据自动累加得到总计数。
3. 给定查询的正确性判断
- 总属性计数:
sum(attribute_count_total)
该查询正确,前提是你需要统计所有标签组合下Counter当前值的总和(即所有历史累计次数的总和)。 - 按success/failed统计:
sum by(attr2) (attribute_count_total)
该查询正确,它会按attr2标签分组,聚合所有对应标签下的Counter当前值总和,正好匹配你需要的success和failed总数。
内容的提问来源于stack exchange,提问作者Robin
相关产品推荐
相关产品推荐

