You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Prometheus、cAdvisor在Grafana中获取容器CPU使用率的问题

解决PromQL自动获取总CPU核心数计算容器CPU使用率的问题

正确的查询语句

如果你的环境中machine_cpu_cores是按每个核心生成一条指标,可使用以下查询自动获取总核心数并计算百分比:

sum(rate(container_cpu_usage_seconds_total{name=~".+"}[$__rate_interval])) by (name)
/
sum(machine_cpu_cores) without (cpu)
* 100

如果你的环境有多台机器,需要按机器实例关联指标(避免跨机器核心数混用):

sum(rate(container_cpu_usage_seconds_total{name=~".+"}[$__rate_interval])) by (name, instance)
/
sum(machine_cpu_cores) by (instance)
* 100

问题原因解释

  1. machine_cpu_cores的指标结构:这个指标默认是每个CPU核心对应一条时间序列,带有cpu标签(比如cpu="0"、cpu="1")。直接用sum(machine_cpu_cores)会因为标签不匹配,无法和左边带有name标签的容器指标进行除法运算。
  2. 标签对齐:PromQL要求运算两边的时间序列标签集能对齐,通过without(cpu)聚合掉machine_cpu_cores的cpu标签,得到单台机器的总核心数;多实例场景下则用by(instance)保留实例标签,确保和容器指标的instance标签匹配。
  3. 百分比转换:最后乘以100,将使用率转换为0-100%的范围,符合你的展示需求。

额外注意事项

  • 如果是Kubernetes环境,可能没有machine_cpu_cores,可以替换为节点可分配CPU核心数指标kube_node_status_allocatable_cpu_cores,查询调整为:
    sum(rate(container_cpu_usage_seconds_total{name=~".+"}[$__rate_interval])) by (name, node)
    /
    sum(kube_node_status_allocatable_cpu_cores) by (node)
    * 100
    
  • 确保你的监控采集器(比如Node Exporter)已经正确采集了机器核心数相关指标。

内容的提问来源于stack exchange,提问作者David Glass

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 00:25:42