Prometheus - 将cpu_user_seconds转换为CPU使用率%?

M15*_*156 14 performance cpu-usage performance-testing prometheus

目前我正通过Prometheus.io监控码头集装箱.我的问题是我只是得到"cpu_user_seconds_total"或"c​​pu_system_seconds_total".我的问题是如何将这个不断增加的值转换为CPU百分比?

目前我在查询:

rate(container_cpu_user_seconds_total[30s])
Run Code Online (Sandbox Code Playgroud)

但我不认为它是正确的(与顶部相比).

如何将cpu_user_seconds_total转换为CPU百分比?(就像在顶部)

bri*_*zil 18

Rate返回每秒的值,因此乘以100将得出一个百分比:

rate(container_cpu_user_seconds_total[30s]) * 100

  • 对于像我这样的白痴来说。cpu 秒计数器上的速率函数读取“cpu 每秒工作多少秒?”。1 个核心上每秒 1 秒将是 100%。3 个核心处于 50% 时将是每秒 1.5 秒,依此类推...括号是平均窗口,较长的周期将使图表变平。根据您的 CPU 使用率的不稳定程度进行调整。 (17认同)
  • 这里您使用的值是“[30s]”。在您的博客文章 (https://www.robustperception.io/understanding-machine-cpu-usage) 中,您提到了“[1m]”的值。一些用户使用相当大的值。有什么区别以及如何找到正确的值?`100 - (avg by (instance)` 有什么影响? (2认同)

val*_*ala 14

请注意,container_cpu_user_seconds_totalcontainer_cpu_system_seconds_total是每个容器的计数器,它们相应地显示特定容器使用的 CPU 时间user spacekernel space有关更多详细信息,请参阅这些文档)。Cadvisor公开了额外的指标 - container_cpu_usage_seconds_total. 该指标等于 和 的总和container_cpu_user_seconds_totalcontainer_cpu_system_seconds_total例如,它显示每个容器使用的总体 CPU 时间。请参阅这些文档以了解更多详细信息。

container_cpu_usage_seconds_total是一个计数器,例如它随着时间的推移而增加。对于确定特定时间的 CPU 使用情况,这并不能提供太多信息。Prometheus 提供了rate()函数,该函数返回计数器每秒的平均增长率。container_cpu_usage_seconds_total例如,以下查询返回过去 5 分钟内每个容器指标的平均每秒增量(请5m参阅方括号中的后向窗口):

rate(container_cpu_usage_seconds_total[5m])
Run Code Online (Sandbox Code Playgroud)

这基本上是过去 5 分钟内使用的 CPU 核心的平均数量。只需将其乘以 100 即可获得 CPU 使用率百分比。请注意,如果容器在过去 5 分钟内使用多个 CPU 核心,则结果值可能会超过 100%。

在生产 Kubernetes 中,通常rate(container_cpu_usage_seconds_total[5m])会返回大量带有许多长标签的时间序列,因此最好使用以下查询:

每个 Pod 在过去 5 分钟内使用的平均 CPU 核心数:

sum(rate(container_cpu_usage_seconds_total{container!=""}[5m])) by (pod)
Run Code Online (Sandbox Code Playgroud)

每个节点最近 5 分钟使用的平均 CPU 核心数:

sum(rate(container_cpu_usage_seconds_total{container!=""}[5m])) by (node)
Run Code Online (Sandbox Code Playgroud)

每个命名空间在过去 5 分钟内使用的平均 CPU 核心数:

sum(rate(container_cpu_usage_seconds_total{container!=""}[5m])) by (namespace)
Run Code Online (Sandbox Code Playgroud)

过滤container!=""器删除与层次结构相关的多余指标cgroups-有关更多详细信息,请参阅此答案。


Chr*_*lma 10

我还发现这种方式可以使CPU使用率准确:

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

来自:http://www.robustperception.io/understanding-machine-cpu-usage/

  • 对于 0.16 及以上版本的节点导出器,对于 0.15 及以下版本,您可以使用 ```100 * (1 - avg by(instance)(irate(node_cpu{job='node',mode='idle'}[5m]) )))``` (2认同)
  • 它是否汇总了所有 CPU 核心?为什么 Node Exporter Full Grafana 仪表板使用这个?(((count(count(node_cpu_seconds_total{instance=~"$node:$port",job=~"$job"}) by (cpu))) - avg(sum by (mode)(irate(node_cpu_seconds_total{mode= 'idle',instance=~"$node:$port",job=~"$job"}[5m])))) * 100) / count(count(node_cpu_seconds_total{instance=~"$node:$port" ,job=~"$job"}) 由 (cpu)) (2认同)