Prometheus/Grafana Counter求和:如何统计应用处理的Kafka消息总量
问题排查与解决方案
原查询错误点
- 误用
rate()函数:rate()作用是计算Counter类型指标在指定时间窗口内的每秒平均增长率,你需要的是累计总量,完全不符合需求 - sum分组规则错误:你在
sum by中加入了processed_count标签,该标签的值会随着计数更新不断变化,按该标签分组会导致每个不同的计数值单独分为一组,无法聚合得到总和 - 注意确认查询的指标名
update_api_call_count_total和你实际推送到Prometheus的Counter指标名一致,避免指标匹配错误
正确查询语句
场景1:获取从指标初始化到当前的总累计处理量
sum by (function_name, job) (update_api_call_count_total{function_name="input_message",job="pushgateway"})
场景2:获取指定时间范围内(例:最近1小时)的新增处理总量
用increase()函数计算Counter在时间窗口内的增量,结果就是这段时间的总处理条数:
sum by (function_name, job) (increase(update_api_call_count_total{function_name="input_message",job="pushgateway"}[1h]))
补充注意事项
从你给出的指标样例来看,你把计数processed_count同时作为标签和指标值上报,这是错误的使用方式:Counter类型的计数值应该直接作为指标值上报,不要设置为标签,否则会产生大量冗余的时间序列,也会导致聚合统计逻辑异常。
内容的提问来源于stack exchange,提问作者Masterbuilder
相关产品推荐
相关产品推荐

