如何让Cadvisor计算的CPU使用率与docker stats结果一致?
解决Cadvisor数据与docker stats CPU使用率一致的计算方法
核心逻辑说明
docker stats的CPU使用率是容器实际使用的CPU算力占节点总CPU算力的百分比,计算逻辑为:
(容器每秒使用的CPU核数 ÷ 节点总CPU核数) × 100
你之前用rate(container_cpu_usage_seconds_total{name="XXXX"}[1m])得到的是每秒使用的CPU核数(比如结果为2.5表示每秒用2.5核的算力),并非百分比,所以和docker stats结果不符。
针对12核机器的具体查询
方法1:硬编码核心数(适合固定12核的节点)
直接将rate结果除以12(总核数)再乘以100,转换成百分比:
rate(container_cpu_usage_seconds_total{name="XXXX"}[10s]) / 12 * 100
注:将窗口从
[1m]改为[10s],因为docker stats默认基于最近10秒的CPU使用数据计算,这样结果会更匹配。
方法2:动态获取节点核数(通用型,适配不同核数机器)
通过node_cpu_seconds_total指标动态获取节点总核数(每个CPU核心对应一条mode="idle"的时间序列),避免硬编码:
rate(container_cpu_usage_seconds_total{name="XXXX"}[10s]) / on(instance) (count(node_cpu_seconds_total{mode="idle"}) by (instance)) * 100
注:该查询要求你的Prometheus同时采集了node_exporter的指标,否则无法动态获取核数。
验证匹配度
调整后,查询结果的数值应该和docker stats <容器名>输出的CPU %列一致(误差在1%以内属于正常,因为统计窗口的细微差异)。
内容的提问来源于stack exchange,提问作者I Want Sleep Now
相关产品推荐
相关产品推荐

