如何从 Prometheus 获取命名空间的 CPU 使用率百分比?

如何从 Prometheus 获取命名空间的 CPU 使用率百分比?

我们的产品位于我们服务器上的 Kubernetes 集群中。它尚未投入生产,因此集群中运行着多个用于不同目的的实例,每个实例都在自己的命名空间中。我需要在其中一个命名空间上运行一些负载测试,同时需要监控 CPU 使用率。我们有 Prometheus 和 Grafana 进行监控。
这些测试的目标之一是了解哪些负载会导致 CPU 使用率达到最大值。

因此,我正在寻找一种方法来查询命名空间的 CPU 使用率百分比。

以下是我根据示例总结的内容:

sum (rate (container_cpu_usage_seconds_total{namespace="$Namespace"}[1m])) / sum(kube_pod_container_resource_limits{resource="cpu", unit="core", namespace="$Namespace"}) * 100

但是,这个解决方案肯定有问题,因为仪表板上偶尔会出现超过 100% 的值。我认为单位肯定不同,因此我尝试查找这些指标的确切规格,但没有成功。

(遗憾的是,我甚至不太了解 CPU 使用率是如何计算的,也不太了解 100% 的实际含义。)

我通过一些导出器搜索了可以用于解决此问题的指标:顾问节点kube-状态指标甚至更多。这篇看似详尽的文章引起了我的注意,其中指出我正在寻找的指标很重要,但没有提供查询它的方法。

任何帮助都将不胜感激,谢谢。

答案1

我发现了为什么我不能使用上面提到的指标。这是因为通常只有少数 pod 甚至有 CPU 限制设置。一般来说这是不需要的,而且会使集群变得笨拙。

所以

sum(kube_pod_container_resource_limits{resource="cpu", unit="core", namespace="$Namespace"})

确实会将命名空间中所有现有的 Pod 限制相加,但这并不是命名空间理论上的 100% CPU 使用率。这就是为什么有时会出现超过 100% 的百分比。

但是,我了解到理论上命名空间可能会用尽委托给集群节点的所有资源。我还了解到我们的产品很可能会在与生产中的测试服务器非常相似的机器上运行。因此,要获得 CPU 使用率的百分比,namespace CPU usage / available CPU in cluster在我幸运的情况下进行计算是有效的。

以下是我的方法:

sum (rate (container_cpu_usage_seconds_total{namespace="$Namespace"}[1m])) / sum(machine_cpu_cores) * 100

其中,$Namespace是命名空间的名称。

(内存使用情况同样如此。)

这就是我在运行负载和压力测试时要监控的内容。

答案2

您可以使用 Prometheus 的任意标签来检查命名空间的 CPU 使用率。那篇文章您已充分描述了需要执行的操作。公式看起来类似于:

namespace:container_cpu_usage_seconds_total:sum_rate =
   sum(rate(container_cpu_usage_seconds_total{image!=""}[5m])) by (namespace)

namespace:container_memory_usage_bytes:sum =
   sum(container_memory_usage_bytes{image!=""}) by (namespace)

另一种方法是使用Prometheus 导出器它允许您轻松获取命名空间、节点或节点池的 CPU 使用率。

相关内容