Prometheus Counter重置问题及Grafana断层处理咨询
一、Prometheus实现续接计数
Counter类型指标的特性就是进程重启后会重置为0,这和Prometheus的持久存储无关——持久存储保存的是Prometheus抓取到的样本数据,而非API进程内的Counter状态。要实现续接计数,不需要修改Prometheus配置,而是通过正确的查询函数处理:
计算累计总调用数:使用
increase()函数,它会自动识别Counter的重置事件(当样本值出现下降时,判定为重置,将后续增量累加至之前的总值)。例如你的指标是api_call_count,查询语句为:sum(increase(api_call_count[1m]))这里的
[1m]建议设置为抓取间隔的合理倍数(比如抓取间隔是15s,就用1m覆盖多个抓取周期),确保不会漏掉增量。如果要查看指定时间范围内的累计值,在Grafana中可以用变量$__range代替固定时长:sum(increase(api_call_count[$__range]))实时查看调用速率:如果不需要累计值,只是看调用速率趋势,用
rate()或irate()函数,同样会自动处理重置:rate(api_call_count[5m])
二、Grafana中忽略折线断层
原始Counter指标重启后会从之前的数值跳回0,导致折线出现断层。解决方式有两种:
使用处理后的查询语句:直接用上面提到的
increase()、rate()或irate()函数查询,得到的结果是连续的增量或速率,不会出现断层,这是最彻底的解决方式。面板视觉优化(特殊场景):如果必须使用原始Counter指标(不推荐),可以在Grafana面板的「可视化」选项中,找到「连接非连续点」的设置(不同Grafana版本位置略有差异,通常在「显示」或「选项」标签下),开启后会用折线连接断层两端,但这只是视觉上的修补,不如用PromQL函数从数据层面解决合理。
内容的提问来源于stack exchange,提问作者Semi-okay Coder

