Prometheus动态Pod指标求和:多折线合并为单折线的查询方法
解决动态Pod指标求和问题
针对你遇到的动态Pod指标聚合需求,这里提供两种场景的PromQL解决方案:
场景1:统计时间区间内所有Pod的消息增量总和
如果application_my_messages_total是计数器类型(以_total结尾的指标通常为计数器),更合理的做法是统计每个时间区间内的消息增量总和,包含已被删除的Pod在其存在期间的贡献:
sum(increase(application_my_messages_total{namespace="my_namespace"}[$__interval]))
increase()计算单个Pod指标在指定时间区间内的增量sum()将所有符合条件的Pod增量求和,自动忽略podUUID标签的差异$__interval是Grafana自动适配图表时间粒度的变量,非Grafana环境可手动替换为固定区间(如5m、1m)
场景2:统计每个时间点所有Pod的指标绝对值总和(包含已删除Pod的最后值)
如果需要获取每个时间点所有Pod的指标绝对值总和,且包含已删除Pod的最后一次记录值:
sum(last_over_time(application_my_messages_total{namespace="my_namespace"}[$__range]))
last_over_time()获取每个Pod在图表整个时间范围内的最后一个样本值sum()将所有Pod的最后值求和,确保已删除Pod的历史数据也被计入
为什么原始查询会显示多条折线?
原始查询application_my_messages_total{namespace="my_namespace"}会保留所有标签组合,每个Pod的pod UUID是唯一标签,因此Prometheus会为每个Pod生成单独的折线。使用sum()聚合后,会自动去除不参与聚合的标签(如pod),将所有时间序列合并为单条折线。
内容的提问来源于stack exchange,提问作者Ann-Christin Lindras
相关产品推荐
相关产品推荐

