首页 > 解决方案 > 用于获取集群范围内的命名空间 CPU 使用情况的 PromQL 查询

问题描述

我在不同的命名空间中运行我们应用程序的不同版本,并且我已经设置了一个 prometheus 和 grafana 堆栈来监控它们。我使用下面的 promql 来获取不同 pod 的 cpu 使用率(占 1 个核心的百分比),它返回的值与我从以下位置获得的值匹配kubectl top pods -n namespace

sum (rate (container_cpu_usage_seconds_total{id!="/",namespace=~"$Namespace",pod=~"^$Deployment.*$"}[1m])) by (pod)*100

问题是我想获取命名空间集群范围内所有 pod 的总 cpu 使用率,我尝试了不同的查询,但它们返回的值与我从上述 promql 或kubectl top pods -n namespace.

我尝试过的 promql 查询:

sum (rate (container_cpu_usage_seconds_total{namespace=~"$Namespace",pod=~"^$Deployment.*$"}[1m])) by (namespace)
sum (rate (container_cpu_usage_seconds_total{namespace=~"$Namespace",pod=~"^$Deployment.*$"}[1m]))

我正在Singlestat为此使用,并且在visualizationValue部分中我尝试了不同的show方法,例如平均,总计,当前但未返回正确的值。

我的问题是如何获得命名空间集群范围内所有 pod 的总 cpu 使用率?

标签: kubernetesgrafanaprometheuspromql

解决方案


我进行了一些研究,发现很少有可以满足您需求的答案:

  1. 为了简单地监控集群级别的 CPU 使用情况,请使用: sum (rate (container_cpu_usage_seconds_total{id="/"}[1m])) / sum (machine_cpu_cores) * 100

  2. 如果您想查看命名空间的 %CPU 使用率,您需要先计算命名空间 CPU 使用率,然后将其除以集群中的可用 CPU。它看起来像这样: sum (rate (container_cpu_usage_seconds_total{namespace="$Namespace"}[1m])) / sum(machine_cpu_cores) * 100

  3. 您还可以使用 Prometheus 的任意标签来计算命名空间的 CPU 使用率。更多细节可以在这里找到。

  4. 最后你可以试试Prometheus exporter

请让我知道这是否有帮助。


推荐阅读