PromQL 正确获取 CPU 使用百分比
Posted
技术标签:
【中文标题】PromQL 正确获取 CPU 使用百分比【英文标题】:PromQL to correctly get CPU usage percentage 【发布时间】:2020-04-27 05:45:48 【问题描述】:我很难理解有关 cAdvisor 指标(被 Prometheus 抓取时)特别是 cpu 使用指标的一些概念。
它提供了以下三种有关 CPU 使用率的指标类型:
container_cpu_system_seconds_total:累计系统cpu时间 consumed container_cpu_user_seconds_total:累计用户cpu时间 consumed container_cpu_usage:累计使用cpu时间消耗当我计算它们的速率时,我想得到相应 CPU 的百分比 (* 100)。例如使用以下 PromQL:
sum by (pod) (container_cpu_usage_seconds_total)
但是,cpu_user 和 cpu_system 百分比值的总和不等于 cpu_usage 的百分比值。如果这是预期的差异,这种差异代表什么?
【问题讨论】:
【参考方案1】:我不知道 cAdvisor 究竟是如何工作的,但与 Node_Exporter 的工作方式类似,我认为除了“用户”和“系统”之外还有更多的 CPU 模式可以加起来总 CPU 使用率。
查看所有可用的 Node_Exporter CPU 模式:
# HELP node_cpu_seconds_total Seconds the cpus spent in each mode.
# TYPE node_cpu_seconds_total counter
node_cpu_seconds_totalcpu="0",mode="idle" 5.96744154e+06
node_cpu_seconds_totalcpu="0",mode="iowait" 6523.35
node_cpu_seconds_totalcpu="0",mode="irq" 0
node_cpu_seconds_totalcpu="0",mode="nice" 936.5
node_cpu_seconds_totalcpu="0",mode="softirq" 8087.39
node_cpu_seconds_totalcpu="0",mode="steal" 21.29
node_cpu_seconds_totalcpu="0",mode="system" 33360.63
node_cpu_seconds_totalcpu="0",mode="user" 862602.25
【讨论】:
【参考方案2】:对*_total
指标求和是不正确的 - 您应该将rate
应用于它们,然后对结果求和:
sum by (pod) (rate(container_cpu_usage_seconds_total[5m]))
此查询应返回过去 5 分钟内每个 pod 使用的 CPU 内核数。
见this blog post explaining why sum(rate())
should be used instead of rate(sum())
【讨论】:
以上是关于PromQL 正确获取 CPU 使用百分比的主要内容,如果未能解决你的问题,请参考以下文章
获取与 powershell 计数器一起使用的 cpu 百分比