监控方案总览
可以从三个层面实施:在虚拟机内部采集系统与应用指标,在宿主机/KVM侧获取虚拟化层指标,以及搭建集中可视化与告警(如 Grafana + InfluxDB/时间序列库)。下面给出可直接落地的工具与配置要点。
一 虚拟机内部的实时监控
- 系统资源总览:使用 Nmon(交互式按 c/m/d/n 切换 CPU、内存、磁盘、网络,适合临时排查与性能测试)。
- 深度性能分析:使用 perf(如
perf top、perf record/report)定位 CPU 热点函数与内核路径。
- 资源与 I/O:使用 vmstat、iostat、free、sar、top 观察 CPU、内存、磁盘、网络与负载趋势。
- 快速安装示例(CentOS 7/8):
yum install -y nmon perf(或 dnf install -y nmon perf)
- 运行:
nmon、perf top、vmstat 1 10、iostat -x 1 10、free -m、sar -n DEV 1 10
这些工具覆盖日常排障所需的关键维度,适合在虚拟机内做“第一现场”诊断。
二 宿主机与虚拟化层的监控
- 虚拟化概览与图形化:使用 Virtual Machine Manager(virt-manager) 的“性能”页查看 CPU、内存、磁盘 I/O、网络 I/O,并在“首选项—轮询”中设置采集间隔。
- 宿主机实时视图:使用 virt-top 观察各 qemu-kvm 域的 CPU/内存占用,快速定位“哪台虚机在吃资源”。
- 内核级分析:在宿主机用 perf kvm 对虚机进行记录与报告,需先从虚机拷贝 /proc/modules 与 /proc/kallsyms 到宿主机,再执行如:
perf kvm --host --guest --guestkallsyms=guest-kallsyms --guestmodules=guest-modules record -a -o perf.data
随后用 perf kvm report 分析。
- 虚机进程与名称映射:用
virsh list --all 获取虚机名,结合 ps -eo pid,cmd | grep qemu-kvm 与 virsh domid/domname 建立 PID ↔ 虚机 的对应关系,便于定位具体实例。
以上方法覆盖“图形化概览—实时列表—内核级追踪—进程映射”的完整链路。
三 集中监控与可视化
- 轻量自建链路(TSDB + 采集 + 可视化):在宿主机部署 collectd + InfluxDB + Grafana。
- collectd 启用 virt 插件(通过 libvirt API)采集虚机的 CPU、内存、磁盘、网络 等指标;
- InfluxDB 作为时间序列存储;
- Grafana 配置面板展示趋势与告警阈值。
- 企业级监控:在虚机内安装 Zabbix Agent,上报 CPU/内存/磁盘/网络 等至 Zabbix Server,结合模板实现批量监控与阈值告警。
这两种方式分别适合“轻量自建”和“平台化运维”的场景。
四 快速排查与优化建议
- 先判定瓶颈维度:
- CPU:看 %CPU、load average、st(被宿主机抢占);
- 内存:看 available/free、swap、buff/cache;
- 磁盘:看 await、r/s/w/s、%util;
- 网络:看 带宽、pps、丢包/重传。
- 常用命令组合:
- 虚机内:
vmstat 1 10、iostat -x 1 10、nmon、perf top;
- 宿主机:
virt-top、virsh list --all、ps -eo pid,cmd | grep qemu-kvm;
- 需要内核路径时:
perf kvm 配合从虚机拷贝的 kallsyms/modules。
- 虚拟化优化方向(结合监控数据):
- 网络:优先 vhost-net,高性能场景考虑 SR-IOV;
- 块 I/O:启用 AIO,必要时做 磁盘 I/O 限流;
- 内存:大页与 NUMA 亲和;
- vCPU:合理规划并避免过度超配。
以上步骤能在“指标—定位—优化”之间形成闭环,快速提升虚机与宿主机的稳定性与性能。