如何在Prometheus中获取指定时间范围各namespace的CPU最大值?
在指定时间范围内获取每个Namespace的CPU最大值
先搞懂两个函数的核心区别
max():对当前瞬间的多个时间序列取最大值(比如现在所有namespace的CPU使用率里,哪个最大),不是时间范围内的统计。max_over_time(range_vector):对单个时间序列在指定时间范围内的所有样本取最大值(比如某个namespace过去1小时内的CPU峰值),这才是你要的时间范围统计。
正确的查询写法
你需要先按namespace聚合出每个时刻的总CPU使用率,再对这个聚合后的时间序列在指定时间范围内取最大值,最终的查询语句如下(以1小时时间范围为例):
max_over_time( sum(namespace_pod_name_container_name:container_cpu_usage_seconds_total:sum_rate{}) by (namespace) [1h] )
拆解逻辑
- 底层聚合:
sum(...) by (namespace)是你原本的查询,它会计算每个namespace在每个时刻的总CPU使用率(已经用了预聚合的sum_rate,省去了手动写rate()的步骤),输出的是一个即时向量(每个namespace对应一个时间序列,每个序列有当前时刻的CPU值)。 - 时间范围取最大:把上面的即时向量套进
max_over_time(...) [1h],就会对每个namespace的时间序列,统计过去1小时内所有样本的最大值,最终输出每个namespace在该时间段的CPU峰值。
注意事项
- 把
[1h]换成你需要的时间范围,比如[24h]就是过去24小时的峰值。 - 不要搞反顺序:如果先写
max_over_time再sum,会先对每个容器的CPU序列取时间范围最大值,再求和,这和你要的「namespace总CPU的峰值」逻辑完全不同,一定要先聚合到namespace维度,再做时间范围的max统计。
内容的提问来源于stack exchange,提问作者Kucharsky
相关产品推荐
相关产品推荐

