如何用PromQL查询Pod指定时段内的最大活跃CPU核心数?
获取Pod同时使用的CPU核心最大数量的PromQL查询
你的原查询max_over_time(sum by(pod)(irate(container_cpu_usage_seconds_total{pod="..."}[5s]))[1h:])计算的是平均使用的CPU核心数(总CPU使用时间/采样周期),所以会出现6个核心各用50%时间时返回3的情况——这和你需要的「同时活跃核心数最大值」不是同一个统计维度。
正确查询语句
max_over_time( count by(pod) ( irate(container_cpu_core_usage_seconds_total{pod="你的Pod名称"}[5s]) > 0 ) [1h:] )
逻辑说明
container_cpu_core_usage_seconds_total:这个指标按单个CPU核心维度统计容器的累计CPU使用时间,每个物理核心对应一条独立的时间序列。irate(...) > 0:计算每个核心的瞬时使用率,筛选出当前采样周期内有被调度使用的核心(使用率>0即代表核心处于活跃状态)。count by(pod):统计当前Pod下同时活跃的CPU核心数量。max_over_time([1h:]):在指定的1小时时间范围内,取活跃核心数的最大值,即为你需要的「同时使用的CPU核心最大数量」。
替代方案(无单核心指标时)
如果你的监控组件(如cAdvisor)未暴露container_cpu_core_usage_seconds_total指标,可通过CPU使用率峰值间接判断资源是否超配:
max_over_time( sum by(pod)( irate(container_cpu_usage_seconds_total{pod="你的Pod名称"}[5s]) ) [1h:] ) / on(pod) group_left kube_pod_container_resource_limits_cpu_cores{pod="你的Pod名称"}
该查询返回Pod的CPU使用率峰值:若峰值接近100%,说明当前分配的核心已被充分利用;若峰值远低于100%,则存在减少核心分配的空间。
内容的提问来源于stack exchange,提问作者Ravi Shende
相关产品推荐
相关产品推荐

