KVM宿主机监控,libvirt_exporter接入

很多刚接触虚拟化运维的同学会问:宿主机上的虚拟机状态怎么统一监控?
KVM本身没有自带Web界面,但通过libvirt_exporter可以把每台虚拟机的CPU、内存、磁盘、网络流量等指标暴露给Prometheus,再用Grafana展示。
本文就是一套完整可落地的接入方案,从零开始带你完成部署和验证。

一、准备工作:确认环境依赖

开始操作前,先确认宿主机满足以下条件:

  • 操作系统为Linux,推荐CentOS 7/8、Ubuntu 20.04及以上版本
  • KVM虚拟化正常使用,宿主机已安装libvirt相关组件
  • Prometheus服务已部署(部署方式不限,可以是二进制或Docker)
  • 宿主机可以访问外网,或本地有libvirt_exporter安装包

检查libvirt是否正常,可执行:

virsh list --all

能列出虚拟机列表就说明libvirt工作正常。
如果提示virsh命令不存在,先安装libvirt客户端:

# CentOS/RHEL
yum install -y libvirt-client
# Ubuntu/Debian
apt install -y libvirt-clients

二、部署libvirt_exporter:两种方式任选

libvirt_exporter是一个轻量级采集器,它通过libvirt API读取虚拟机信息,然后以Prometheus标准格式输出指标。
下面提供二进制和Docker两种部署方式。

方式一:二进制安装(适合不使用Docker的环境)

先到GitHub Releases页面下载对应架构的压缩包。
这里以libvirt_exporter-1.8.2.linux-amd64.tar.gz为例(版本号以实际发布为准):

wget https://github.com/kumina/libvirt_exporter/releases/download/1.8.2/libvirt_exporter-1.8.2.linux-amd64.tar.gz
tar -xzf libvirt_exporter-1.8.2.linux-amd64.tar.gz
cd libvirt_exporter-1.8.2.linux-amd64

将二进制文件复制到系统目录并启动:

sudo cp libvirt_exporter /usr/local/bin/
# 使用普通用户运行,避免权限过高
sudo useradd -r -s /bin/false libvirt_exporter
sudo -u libvirt_exporter /usr/local/bin/libvirt_exporter --libvirt.uri qemu:///system

默认监听端口为9273
建议配合systemd管理,创建/etc/systemd/system/libvirt_exporter.service

[Unit]
Description=Libvirt Exporter
After=libvirtd.service

[Service]
User=libvirt_exporter
ExecStart=/usr/local/bin/libvirt_exporter --libvirt.uri qemu:///system
Restart=always

[Install]
WantedBy=multi-user.target

启动并设置开机自启:

sudo systemctl daemon-reload
sudo systemctl enable --now libvirt_exporter

方式二:Docker运行(适合已有容器环境)

如果宿主机装了Docker,可这样启动:

docker run -d --name libvirt-exporter \
  --restart=always \
  -v /var/run/libvirt/libvirt-sock:/var/run/libvirt/libvirt-sock \
  -p 9273:9273 \
  --user 0 \
  kumina/libvirt-exporter

注意挂载本机libvirt socket,否则容器内无法连接宿主机虚拟化服务。

三、接入Prometheus:修改抓取配置

在Prometheus的配置文件prometheus.yml中增加一个job,指向宿主机IP和Exporter端口:

scrape_configs:
  - job_name: 'kvm-host'
    static_configs:
      - targets: ['192.168.1.10:9273']
        labels:
          instance: 'kvm-01'   # 自定义名称,便于区分多台宿主机

改完后执行:

promtool check config prometheus.yml   # 检查配置格式
curl -X POST http://localhost:9090/-/reload  # 热加载配置

如果Prometheus使用Docker部署,挂载配置后也需要docker restart prometheus或调用reload接口。

四、验证监控数据:从Exporter到Grafana

1. 检查Exporter输出

直接在宿主机上访问指标接口:

curl http://127.0.0.1:9273/metrics | head -20

正常会看到以libvirt_开头的指标,例如:

libvirt_domain_meta
libvirt_domain_cpu_time_seconds_total
libvirt_domain_memory_stats_available_bytes
libvirt_domain_block_stats_write_bytes_total
libvirt_domain_interface_stats_receive_bytes_total

2. 在Prometheus中查询

打开Prometheus Web界面,进入Status -> Targets,确认kvm-host状态为UP。
然后在查询框输入:

libvirt_domain_memory_stats_available_bytes

点击Execute,能看到每个虚拟机对应的内存可用值,说明采集链路已打通。

3. 配置Grafana看板

Grafana中添加Prometheus数据源,然后导入现成的KVM Dashboard。
社区推荐ID为13500(KVM / Libvirt Exporter)的看板,导入后即可看到CPU、内存、网络、磁盘等维度图表。
如果该ID不可用,也可以按指标名自己创建面板。

五、避坑指南与常见问题

整个接入过程不难,但有几个坑容易让人卡住:

  • 权限不足导致连不上libvirt。运行libvirt_exporter的用户需要能访问/var/run/libvirt/libvirt-sock。建议将用户加入libvirt组:
  sudo usermod -aG libvirt libvirt_exporter

然后重启服务。
若用Docker,必须在启动命令中加--user 0或指定组ID。

  • Exporter启动后立即退出。先看日志:
  sudo journalctl -u libvirt_exporter -e

通常提示failed to connect to libvirt,确认libvirtd服务是否运行:systemctl status libvirtd

  • Prometheus抓取超时。如果虚拟机数量很多,建议调大抓取间隔,在job中加scrape_interval: 30s,避免每次抓取耗时过长。
  • 指标重复标签。多台宿主机接入时,务必给不同宿主机的target设置不同的instance标签,否则Grafana上会混淆。

如果验证时发现某些虚拟机指标缺失,先检查该虚拟机是否处于运行状态。libvirt_exporter默认只采集运行中的虚拟机,关机状态的不存在对应的运行时指标。

搭好这套链路后,后续再新增KVM宿主机,只需重复第二步和改一下Prometheus里的target配置。
监控数据统一进Prometheus,告警规则也可以直接针对libvirt_指标编写,非常方便。
建议你先把基础抓取跑通,再看板调整,不要一上来追求完整大屏。
如有其他问题,欢迎在评论区描述你的环境和具体报错。

分享到:
上一篇
Redis生产持久化RDB+AOF
下一篇
Redis连接数打满,客户端泄漏
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意