prometheus中每个节点的CPU使用率

Ani*_*ita 5 cpu percentage prometheus promql

理想情况下,我必须找出每个节点上 Pod 的 CPU 使用率百分比。但我试图找出每个节点的CPU使用率。我已经编写了查询,但它给了我超过 100%(可以是 150% - 200%),即使包含多个 cpu 的情况(我取了平均值)。您能帮我理解下面的查询有什么问题吗?

(1 - avg(irate(node_cpu_seconds_total{mode="idle"}[1m])) by (instance)) * 100 / scalar(sum(machine_cpu_cores))
Run Code Online (Sandbox Code Playgroud)

通过阅读多本书和解决方案,我还发现该查询仅适用于多个节点(container_spec_cpu_quota不适用于AWS ECS上的某些实例)

avg(rate(container_cpu_usage_seconds_total{name!~".*prometheus.*", image!="", instance=""}[1m])) by (pod) / scalar(sum(container_spec_cpu_quota{name!~".*prometheus.*", image!="", instance=""} / container_spec_cpu_period{name!~".*prometheus.*", image!="", instance=""}))
Run Code Online (Sandbox Code Playgroud)

val*_*ala 7

以下查询返回[0 ... 100]%过去 5 分钟每个节点的平均 CPU 使用率(以百分比表示):

100 * avg(1 - rate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance)
Run Code Online (Sandbox Code Playgroud)

此查询假设每个受监控主机都运行一个node_exporter ,并且 Prometheus 已正确配置为抓取所有这些节点导出器。

该查询按以下方式工作:

  • 计算过去 5 分钟内每个 CPU 核心的空闲 CPU 使用率的rate(node_cpu_seconds_total{mode="idle}[5m])每秒增长率[5m]参见方括号中)。这基本上是过去 5 分钟内给定 CPU 核心每秒空闲的平均秒数。例如,该值在 范围内[0 .. 1],其中0表示 CPU 核心在过去 5 分钟内 100% 繁忙,而1表示 CPU 核心在过去 5 分钟内 100% 空闲。
  • 计算1 - rate(...)每个主机每个 CPU 核心的 CPU 使用率。
  • 计算每个实例avg(...) by (instance)的平均CPU 使用率(也称为Prometheus 生态系统host
  • 100 * ...每台主机的平均 CPU 使用率乘以 100,以获得该范围的百分比[0 ... 100]%

现代主机通常有多个 CPU 核心。有时CPU核心之间的负载可能不均匀。例如,如果一个只能使用单个 CPU 核心的应用程序运行在具有 2 个 CPU 核心的主机上,则该主机的 CPU 使用率永远不会超过 50%,因为第二个 CPU 核心始终处于空闲状态,而该应用程序无法使用扩大规模。在这些情况下,监视每个主机的可用 CPU 核心之间的最大CPU 使用率可能会很有用:

100 * max(1 - rate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance)
Run Code Online (Sandbox Code Playgroud)

此查询可以帮助您识别 CPU 负载不均匀的主机,其中某些应用程序无法扩展到更多 CPU 核心。


小智 5

以下查询返回每个节点的 CPU 使用情况:

100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100)
Run Code Online (Sandbox Code Playgroud)