如何用PromQL按Namespace聚合两类CPU指标最大值获取有效使用率?
关于PromQL计算平均有效CPU使用率的问题解答
不能直接取这两个查询的最大值来得到按Namespace统计的平均有效CPU使用率,原因如下:
- 实际CPU使用率是Pod真实消耗的CPU资源,CPU请求量是Pod声明的最小资源保障,二者含义完全不同。
- 所谓“有效CPU使用率”,核心逻辑是实际消耗的CPU占请求CPU的比例,反映的是资源请求的利用率;而取两者的最大值会无意义地取到请求量(当请求量高于实际使用率时),完全偏离了“有效使用率”的统计目的。
正确的做法是将两个查询做除法运算,按Namespace聚合得到平均有效CPU使用率,PromQL语句如下:
sum by (namespace) ( avg_over_time(namespace:container_cpu_usage:sum{namespace=~"$namespace"}[$__range]) ) / sum by (namespace) ( avg_over_time(kube_pod_resource_request{resource="cpu", namespace=~"$namespace"}[$__range]) )
如果要避免出现除以0的异常(比如某个Namespace没有配置CPU请求),可以用clamp_min函数给分母设置一个极小的最小值,示例如下:
(sum by (namespace) ( avg_over_time(namespace:container_cpu_usage:sum{namespace=~"$namespace"}[$__range]) )) / clamp_min(sum by (namespace) ( avg_over_time(kube_pod_resource_request{resource="cpu", namespace=~"$namespace"}[$__range]) ), 1e-9)
内容的提问来源于stack exchange,提问作者wwillfred
相关产品推荐
相关产品推荐

