OpenStack/KVM环境下如何用Prometheus Node-exporter测量CPU Steal Time
如何通过Prometheus Node-exporter测量CPU Steal Time(OpenStack/KVM环境)
核心指标说明
Node-exporter通过node_cpu_seconds_total暴露CPU时间的累计统计,其中mode="steal"标签对应CPU窃取时间——也就是在虚拟化环境中,宿主机的物理CPU被其他租户虚拟机或宿主机进程占用,导致当前虚拟机等待CPU的时间。在OpenStack/KVM场景下,这个指标直接反映计算节点(宿主机)层面的CPU窃取占比。
计算窃取时间占比的PromQL查询
因为node_cpu_seconds_total是累计值,必须用rate()函数计算一段时间内的速率,再换算为百分比:
单CPU核心的窃取时间占比
100 * rate(node_cpu_seconds_total{mode="steal"}[5m]) / rate(node_cpu_seconds_total[5m])这个查询会返回每个CPU核心的steal时间占该核心总CPU时间的百分比。
整台宿主机的平均窃取时间占比
如果需要计算整个计算节点的平均占比,用sum by聚合所有核心的数值:100 * sum by (instance) (rate(node_cpu_seconds_total{mode="steal"}[5m])) / sum by (instance) (rate(node_cpu_seconds_total[5m]))这里的
instance对应你的计算节点(宿主机)标识,结果会返回每台宿主机的整体CPU窃取时间占比。
注意事项
- 时间窗口
[5m]是常用的统计区间,你可以根据监控需求调整(比如[1m]更敏感,[15m]更平滑)。 - 如果你需要监控虚拟机内部的窃取时间,只需在虚拟机内部署Node-exporter,用同样的查询即可——但你问题中关注的宿主机/虚拟化管理程序层面,直接用宿主机的Node-exporter数据就足够。
- 窃取时间占比过高通常意味着宿主机CPU资源不足,或者租户虚拟机的CPU配额设置不合理,需要结合OpenStack的资源调度策略排查。
内容的提问来源于stack exchange,提问作者Milad Jahandideh
相关产品推荐
相关产品推荐

