在公司运维的日常里,经常遇到同事问:‘这台虚拟机出问题了,之前的性能记录还能查到吗?’其实这类信息就藏在虚拟机监控数据里。可真正要用的时候,很多人却搞不清这些数据到底存在哪儿。
监控数据不是浮在空中的
虚拟机跑起来以后,CPU使用率、内存占用、磁盘IO这些指标不会自己消失。它们被采集后,必须落到某个具体的存储位置,否则重启一下服务就全没了。常见的落地方案有三种:本地文件系统、专用数据库、以及独立的监控平台存储。
本地文件存放:简单但有限
像 VMware ESXi 这类 hypervisor,默认会把部分运行日志和短周期性能数据存在主机的本地存储中,路径通常是 /vmfs/volumes/<datastore>/<vm-name>/ 下的 .log 或 .csv 文件。这种方式配置省事,适合临时查看。
但问题也很明显——空间有限,过几天就被轮转覆盖了。而且一旦主机挂了,连带监控记录也一起没了。这就跟把重要发票塞抽屉角落一样,用时找不到。
数据库才是长期归档的好去处
真正靠谱的做法是把监控数据导入时间序列数据库。比如 Prometheus 就常用来抓取 vCenter 或者 KVM 节点暴露的 metrics 接口。数据存进去之后,能按天查、按小时回溯,画图也方便。
下面是个简单的 Prometheus 配置片段,指向 vCenter 的 exporter:
scrape_configs:\n - job_name: 'vsphere'\n static_configs:\n - targets: ['vcenter-exporter.internal:9272']
这种结构化存储的好处是,哪怕半年前某次异常波动,也能快速调出来对比。相当于给每台虚拟机动态建了个“健康档案”。
云平台自带的监控服务更省心
如果你用的是阿里云、AWS 或 Azure 上的虚拟机,根本不用手动折腾存储路径。这些平台默认就把监控数据传到后端的集中式存储集群,保留30天以上,还支持导出CSV。
比如你在阿里云控制台看 ECS 实例的 CPU 图表,背后的数据其实来自 Time Series Database 集群,而不是那台ECS本身。你删了实例,图表还能看两周,这就是分离式存储的优势。
备份时别漏掉监控元数据
做数据备份策略时,很多人只盯着虚拟机磁盘和配置文件,忽略了监控系统的元数据。比如 Grafana 的 dashboard 定义、Prometheus 的 recording rules,这些也应该纳入版本管理。
一个实用做法是定期把关键配置推送到 Git 仓库:
git add /etc/prometheus/* \n /etc/grafana/dashboards/*.json\ngit commit -m "backup monitoring config $(date +%F)"\ngit push origin main
这样就算整个监控系统重建,也能快速还原查看界面。
说到底,虚拟机监控数据的位置,决定了你事后能不能说得清问题。把它当成系统的一部分来规划存储,比出事后再到处翻日志强得多。