优先使用虚拟化平台自带工具掌握全局健康度,再用第三方开源工具做深度剖析,最后通过应用层监控补齐业务视角。这套组合拳,能覆盖从底层资源到用户体验的全链路,下文按工具选型、实操方法、场景诊断三个维度展开,告诉你每一步具体怎么做。
虚拟机监控的三大主流路径与选型对比
不同规模的虚拟化环境,监控工具选型差异很大,中小型环境追求轻量高效,大型数据中心侧重集中管理和告警联动,先看当前最常用的三类方案。
| 监控层级 | 代表工具 | 核心优势 | 适用场景 |
|---|---|---|---|
| 平台自带 | vCenter Performance、Hyper-V Manager | 零成本、与虚拟化层深度集成 | 日常巡检、快速定位物理机故障 |
| 开源全家桶 | Prometheus + Grafana + Node Exporter | 数据模型灵活、告警规则可编程 | 需要自定义指标、长期趋势分析 |
| 商业重器 | Datadog、Zabbix 企业版、SolarWinds | 开箱即用的仪表盘、智能基线告警 | 大规模混合云环境、跨部门协作 |
选型关键判断点:如果虚拟机数量少于50台,平台自带工具加脚本完全够用;超过200台,建议直接上Prometheus全家桶;如果涉及混合云或容器化改造,商业工具对多集群的统一纳管能力更省心,下面分别拆解。
虚拟化平台自带工具:最可靠的体检医生
vCenter Performance Monitor与esxtop的配合使用
VMware环境的监控,vCenter的Performance选项卡是入口,它能直接看到CPU就绪时间、内存交换率、磁盘延迟三大核心指标,在vSphere Client中选择目标虚拟机,进入“监控”>“性能”图表,默认展示CPU和内存使用率,点击“更改图表”可以叠加磁盘和网络指标。
但显示在图表里的数据粒度太粗,esxtop是诊断瓶颈的显微镜,通过SSH登录ESXi主机,运行esxtop命令,按v键进入虚拟机视图,重点关注%RUN(CPU运行时间)、%RDY(就绪时间,超过10%说明CPU竞争严重)、%MLMTD(内存限额导致的节流),按d键切换到磁盘视图,关注DAVG/cmd(设备平均延迟),超过25毫秒意味着存储阵列可能成为瓶颈,按n键查看网络视图,MCMDS/s和MDRV/s数值异常波动时,大概率是网卡队列溢出或丢包。
Hyper-V的Perfmon计数器与PowerShell监控命令
微软环境下的Hyper-V,性能监视器(Perfmon)是主力,在“运行”框中输入perfmon /sys,直接加载Hyper-V专用计数器集,找到“Hyper-V Hypervisor Virtual Processor”对象,重点观察% Total Run Time和% Total Wait Time,这两个计数器一个表示CPU实际运行占比,一个表示等待被调度的占比,两者相加如果长期大于85%,说明物理核数已经不够分。
PowerShell命令则更适合批量巡检场景,以下命令获取所有虚拟机CPU使用率、内存压力和磁盘活动:
Get-Counter -Counter "\Hyper-V Dynamic Memory Balancer\","\Hyper-V Hypervisor Virtual Processor()\"

配合Get-VM | Get-VMReplication能查看复制状态是否正常,这比逐台打开虚拟机连接窗口高效得多,在Windows Server 2026和2026环境中,Perfmon数据采集间隔默认是5秒,实际排查问题时建议改为2秒刷新,避免错过瞬时峰值。
开源监控组合拳:Prometheus与Grafana的实战部署
基础采集链路搭建:node_exporter + cAdvisor + 探针
开源方案的核心思路是“三路采集、统一汇总”。node_exporter负责虚拟机宿主机层指标,包括CPU、内存、磁盘、文件系统、网络带宽。cAdvisor负责容器内指标(如果虚拟机内部跑了Docker),探针负责外部可达性检测。
完整的部署流程分四步:
- 在宿主机上安装node_exporter:下载二进制包解压至
/opt/node_exporter,创建systemd服务文件,暴露端口9100,Prometheus配置文件中添加该节点。 - 在虚拟机内部部署cAdvisor(如虚拟机上运行容器),暴露端口
8080,Prometheus按container:标签发现目标。 - 在Prometheus配置文件中定义告警规则,比如
disk_usage > 80%持续15分钟触发Warning级别,node_cpu_seconds_total空转占比过高则触发Critical。 - Grafana导入ID为
8919的Node Exporter Full模板,以及ID为893的Docker容器监控模板,即可拥有可视化仪表盘。
告警规则设计的反直觉陷阱
很多新手在Prometheus里配置CPU告警时,直接用100 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) 100 > 85,这个规则放在物理机上没问题,但用在虚拟机上会频繁误报,原因是云服务商的CPU Steal时间(宿主机争抢导致虚拟机等待的时间)会计入非空闲状态,但业务侧并无感知。
行业共识认为,虚拟机CPU告警应该拆成两条:一条看node_cpu_seconds_total{mode="steal"}占比是否长期超过10%,另一条看node_load1是否持续三倍于cpu_cores,内存告警则更复杂,node_memory_MemAvailable_bytes除以总内存小于15%才值得报警,因为Linux页面缓存在回收前并不算真实压力。
应用层监控补齐业务短板
从黑盒探针到日志挖掘的进阶路径
虚拟机层面的指标一切正常,不代表业务没故障。黑盒探针验证的是“虚拟机能通不能通”:用Prometheus的blackbox_exporter模块做HTTP探活、TCP端口探测、ICMP ping检测,配置探针时注意设置HTTP_2xx之外的200状态码过滤规则,并开启follow_redirects功能,否则目标URL发生301跳转时会报错。
白盒监控则是从应用日志中挖掘JVM堆内存使用量、数据库连接池占用率、消息队列积压量等指标,在Java应用虚拟机中推荐接入micrometer注册表,它能自动将JVM指标暴露为Prometheus格式,如果业务团队暂时没精力改造代码,退而求其次的方案是部署filebeat采集应用日志,再用Logstash过滤出关键词计数,换算成业务层指标。
日志监控里最容易被忽略的磁盘空间问题
大型虚拟机集群日志量增长速度远超预期,这是运维事故的高发区,建议分三层控制日志磁盘开销:

- 日志轮转策略:全局统一设置为
daily+rotate 7组合,且单文件大小上限设为100MB。 - 采集端丢弃规则:Promtail或Filebeat的配置里直接过滤
DEBUG级别日志,生产环境保留INFO、WARN、ERROR三挡。 - 宿主机层兜底:日志目录所在磁盘空间低于30%时,系统日志守护进程会优先清理旧日志,但这会导致审计记录缺失风险。
多数情况下,日志监控的告警阈值应设定在磁盘使用率的80%,具体数值取决于日志单日生产量,实测中,一台承载每分钟5万次请求的Nginx虚拟机,单日日志量约2GB,按此推算轮转周期能覆盖一周业务量。
工作负载与容量规划的预测性监控
利用历史趋势识别滥用资源的“钉子户”虚拟机
预测性监控的核心价值,在于主动发现未来两周可能耗尽资源的虚拟机,Grafana的“趋势预测”功能可以对时间序列数据应用线性回归算法,把CPU使用率的预测线延伸至未来14天窗格内,如果预测线在周期末跨越90%上限,就应当提前为该虚拟机增加vCPU配额或迁移至更高规格宿主机。
在vCenter环境中,利用capirc脚本工具收集历史性能数据,支持输出CSV报告用于跨虚拟机横向对比,以CPU Ready值为例,批量对比后,数值稳定超过20%的3-5台“钉子户”虚拟机,贡献了整个集群40%的调度开销,处理方式通常是先为该虚拟机绑定CPU亲和性,限制其只能使用特定物理核;如果后续还出现争抢,再考虑资源热添加。
容量规划里的三个常见估算误区
第一,只看峰值不看持续值,某虚拟机CPU峰值冲到95%但只持续5分钟,这并不一定需要扩容,关键看CPU使用率在P95分位数上的表现,第二,内存指标只看已用内存不看回收风险,Windows系统下内存使用率低并不代表没问题,要考虑缓存提交量(Commit Charge)是否逼近物理内存上限,第三,低估存储IOPS的增长速度,数据库类虚拟机的IOPS需求会在三年内呈线性增长,容量规划时预留30%的IOPS缓冲比较稳妥。
虚拟机性能监控工具哪个好?不同规模环境选型指南
小型环境:开源免费方案最强
50台虚拟机以内的测试开发环境,搭建Prometheus加Grafana足矣,资源消耗极小,单机2核4G内存即可跑完全套监控,配合Shell脚本定时采集vmstat和iostat输出,用于事后审计已经足够,但要注意环境本身不能出问题,否则监控自身也会挂掉,建议自动化脚本设置失败重试机制。
中大型环境:商业工具与平台自带功能深度整合
超融合架构或成规模的虚拟化集群,基于组织的预算和运维人力,需在开源可选方案与商业方案之间做选择,使用Zabbix企业版时,可以利用其内置的VMware监控模板,自动关联虚拟机与宿主机之间的依赖关系,Datadog这类SaaS方案,优势在于免运维,价格按主机数计费,适合预算充足但希望缩短部署周期的团队。
多云异构环境:统一监控平面是硬需求
当虚拟机同时分布在VMware、OpenStack、公有云三个环境中,排障效率往往取决于能否在一张图上对比所有指标,行业共识是采用Fluentd做数据采集端标准化,将所有环境的监控数据统一转化为Prometheus格式后汇入同一套Grafana看板,这为核心故障排查节省约一半的上下文切换时间。

常见故障场景的诊断排查思路与操作路径
虚拟机卡顿但宿主机资源有余量
这种情况优先排查三块区域:
- 查看存储延迟,在vCenter中定位到该虚拟机的磁盘视图,观察
平均延迟是否超过10毫秒,如果宿主机的硬盘是机械阵列,则要排查RAID组中是否有坏盘。 - 查看网络丢包率,在虚拟机内部执行
ping -f 网关IP,统计丢包率是否超过0.1%,若超出,用ethtool -S eth0查网卡rx_dropped计数是否持续递增。 - 查看内存气球驱动是否生效,在ESXi的esxtop内存视图中查看
MEMSZ和MEMCTL,如果MEMCTL列数值持续大于0,说明宿主机正在强制回收该虚拟机内存。
虚拟机频繁重启或迁移
排查思路按顺序执行:
- 用
esxcli vm process list查看虚拟机的worldId状态变化,确认是否发生了HA主机故障转移。 - 查看vCenter事件日志,筛选
Migration或Relocate关键字,如果是VMotion引起的,检查目标宿主机是否处于维护模式或DRS规则导致。 - 排查数据存储心跳线,在vSphere高级设置中确认
das.heartbeatDsPolicy是否配置正确,否则隔离响应会误触发虚拟机关机。
关键问题回应
Q:虚拟机性能监控工具哪个好,有确切推荐排序吗?
A:没有绝对最好,只有相对合适,个人使用或测试验证场景,Prometheus与Grafana组合排在首位,灵活性和社区活跃度碾压其他选项,生产环境且有SLA压力,Zabbix企业版在传统监控领域资历更老,更成熟,厂商锁定的情况可以考虑平台自带工具,但跨平台或混合云的场景中仍建议推广开源方案保持一致性。
Q:虚拟机Windows系统里的性能计数器与宿主机数据为何对不上?
A:这是常见现象,根本原因在于数据的语义不同,虚拟机内部看到的CPU使用率,表示的是虚拟CPU(vCPU)在自身视角下的运行状态;宿主机看到的客机CPU统计,则包含了物理资源分配的调度开销,在超卖场景下,虚拟机内统计的“空闲”其实有一部分是CPU就绪等待时间,所以两边的数据描述的不是同一个层面的问题,对不上时以宿主机数据为基准排查物理资源压力。
Q:怎么监控虚拟机性能?有哪些命令可以快速定位到问题?
A:先登录宿主机用uptime查看负载均值,再用vmstat 1 5确认上下文切换和中断队列长度,若发现软中断较高,下钻到cat /proc/softirqs判断是否属于网络收发瓶颈,同时用ss -s查看套接字统计,建立连接数过多时优先扩展临时端口范围,这几条命令连用,能在两分钟内划分责任边界。
最后巩固一次方法论:监控虚拟机,先定边界,再选工具,后定阈值,平台自带工具看底层拼争,开源工具看趋势变化,应用探针看业务体感,三者构成的立体监控体系,才能让虚拟化运维从被动救火转向主动治理。