首页 > 解决方案 > 使用 PromQL 分组

问题描述

我想通过将使用的内核数除以 CPU 限制(可分配的内核数)来计算实际的容器 CPU 使用率。因此,我得到了 4 个 pod 的两个不同指标:

我的问题:

我想获取每个容器的 CPU 使用率(已用内核数/可用内核数)。

我尝试了什么:

这两个查询中的每一个都返回我想要的内容:

  1. 每个 pod 当前使用的核心数:

(我使用 label_replace 是因为一个指标pod_name用作指标名称,而另一个用作指标名称pod

label_replace(sum(rate(container_cpu_usage_seconds_total{pod_name=~"rewe-bd-palantir-vernemq.*", container_name="vernemq"}[1m])) by (pod_name), "pod", "$1", "pod_name", "(.*)")

回复:https ://monosnap.com/direct/6EPuLF59HBJaYsAmKG6CM0fRPyUXDk

  1. 每个 pod 的可用核心数:

sum(kube_pod_container_resource_limits_cpu_cores{pod=~"rewe-bd-palantir-vernemq.*", container="vernemq", job="kubernetes-pods"}) by (pod)

回复:https ://monosnap.com/direct/dRBfitwcxHIrTRYDmYHwV5YkomYJjH

此查询不起作用(未返回任何数据点):

label_replace(sum(rate(container_cpu_usage_seconds_total{pod_name=~"rewe-bd-palantir-vernemq.*", container_name="vernemq"}[1m])) by (pod_name), "pod", "$1", "pod_name", "(.*)") / sum(kube_pod_container_resource_limits_cpu_cores{pod=~"rewe-bd-palantir-vernemq.*", container="vernemq", job="kubernetes-pods"}) by (pod)

我的问题:

如何实现一个查询,返回每个 pod 的 CPU 使用率(已用内核数/可用内核数)?

标签: kubernetesprometheuspromql

解决方案


您还需要使用该on()功能。所以它会是这样的。

label_replace(sum(rate(container_cpu_usage_seconds_total{pod_name=~"rewe-bd-palantir-vernemq.*", container_name="vernemq"}[1m])) by (pod_name), "pod", "$1", "pod_name", "(.*)") / on(pod) sum(kube_pod_container_resource_limits_cpu_cores{pod=~"rewe-bd-palantir-vernemq.*", container="vernemq", job="kubernetes-pods"}) by (pod)

推荐阅读