如何在应用重启后计算Prometheus Counter的数值总和?
解决Prometheus Counter重启后在Grafana计算总和的方案
用
sum_over_time+increase组合(官方推荐)
针对Counter类型指标,最省心的方式是先通过increase()计算每个时间窗口的增量(它会自动识别并处理Counter重置的情况),再用sum_over_time()把整个查询时间范围内的所有增量加总。比如你的指标是my_counter,查询语句可以这么写:sum_over_time(increase(my_counter[1m])[$__range:1m])这里
increase(my_counter[1m])负责每1分钟算一次增量,sum_over_time(...)[$__range:1m]把整个时间范围内的所有1分钟增量累加起来,就能得到重启后的总累计值。resets()函数做精细修正
如果对标签维度有严格要求,可以用resets()函数识别Counter的重置次数,手动补全重置前的数值。示例语句:sum( my_counter + ignoring(instance, pod) group_left() (sum_over_time(my_counter[1m] offset 1m) * resets(my_counter[$__range])) )这个逻辑会把每次重置前的最后值加到当前数值上,适合需要精准对齐标签的场景。
Grafana动态变量适配K8s场景
如果是监控K8s Pod的Counter,可以用Grafana的Pod动态变量,先获取所有目标Pod,再对每个Pod的指标分别计算增量后求和:sum(increase(my_counter{pod=~"$pod"}[$__interval]))配合Grafana的时间范围变量,能自动适配不同查询周期,同时处理Pod重启导致的Counter重置。
这些都是2019年后PromQL和Grafana功能迭代后的实用方案,相比早期的土方法,现在的组合方式是官方认可的标准做法,不用额外加自定义指标或外部存储,就能可靠处理Counter重置问题。
内容的提问来源于stack exchange,提问作者leotim
相关产品推荐
相关产品推荐

