Skip to content
Go back

在 Proxmox VE 中接入 Prometheus + Grafana 监控

| 0 Views Edit page

前言

Proxmox VE 是我目前本地服务的底层虚拟化平台,上面跑着若干 LXC 容器和 KVM 虚拟机。
随着需要监控的服务越来越多,趁着这次统一接入 Prometheus + Grafana 的机会,也顺带把 PVE 本身的节点状态、虚拟机资源占用以及存储用量一并纳入监控。


方案概述

  1. 搭建 Prometheus + Grafana 监控平台(已完成)
  2. 在 PVE 中创建只读 API 用户并分配权限
  3. 使用 Python3 安装并启动 pve-exporter
  4. 配置 Prometheus 抓取 pve-exporter 的指标
  5. Grafana 中导入 Dashboard 展示 PVE 指标

操作步骤

一、搭建 Prometheus + Grafana 监控平台

直接参考我的另一篇文章:搭建 Prometheus + Grafana 监控平台并使用 Node Exporter 监测服务器状态

二、在 PVE 中创建只读 API 用户并分配权限

pve-exporter 通过调用 PVE 的 REST API 来采集指标,因此需要在 PVE 中先创建一个专用的只读用户。

1、创建用户

在 PVE Web UI 中依次进入 Datacenter > Users > Add

  • User nameprometheus
  • RealmProxmox VE authentication server(即 pve
  • Password:设置一个强密码并记录下来

或者直接在 PVE 宿主机的 Shell 中执行:

pveum user add prometheus@pve --password <your-password>

2、创建只读角色并分配权限

# 创建一个名为 pve-exporter 的角色,仅赋予审计权限
pveum role add pve-exporter --privs "VM.Audit Sys.Audit Datastore.Audit Pool.Audit"

# 将该角色赋予刚才创建的用户,作用范围为整个 Datacenter(/)
pveum acl modify / --user prometheus@pve --role pve-exporter

确认权限配置正确:

pveum acl list

能看到 prometheus@pve 对应的条目即可。

三、使用 Python3 安装并启动 pve-exporter

pve-exporter 的官方仓库:prometheus-pve/prometheus-pve-exporter
这里通过 pip3 直接安装,并使用 systemd 进行管理。

1、安装 pve-exporter

PVE 基于 Debian,新版系统对 pip 有”externally managed”限制,直接 pip install 会报错。这里使用虚拟环境来隔离安装:

# 安装 venv 模块(如果还没有的话)
apt-get install -y python3-venv

# 创建虚拟环境
python3 -m venv /opt/pve_exporter

# 在虚拟环境中安装 pve-exporter
/opt/pve_exporter/bin/pip install prometheus-pve-exporter

安装完成后,验证可执行文件是否存在:

/opt/pve_exporter/bin/pve_exporter --help

2、创建配置文件

mkdir -vp /etc/pve_exporter
nano /etc/pve_exporter/pve.yml
default:
  user: prometheus@pve
  password: <your-password>
  # 如果你的 PVE 使用自签名证书,将此项设置为 false
  verify_ssl: false

这里的 default 是模块名,与后续 Prometheus 抓取配置中的 module 参数对应。
如果你有多套 PVE 环境,可以在此文件中添加多个模块分别配置。

配置文件权限收紧,避免密码泄露:

chmod 600 /etc/pve_exporter/pve.yml

3、创建 systemd 服务

nano /etc/systemd/system/pve_exporter.service
[Unit]
Description=Prometheus PVE Exporter
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/opt/pve_exporter/bin/pve_exporter --config.file /etc/pve_exporter/pve.yml
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

重新加载 systemd 并启动服务:

systemctl daemon-reload
systemctl start pve_exporter
systemctl enable pve_exporter

验证服务状态:

systemctl status pve_exporter

验证 pve-exporter 是否正常采集到数据:

# 将 192.168.1.10 替换为你 PVE 宿主机的实际 IP
curl "http://localhost:9221/pve?target=192.168.1.10&module=default&cluster=1&node=1"

如果能看到大量 pve_* 格式的文本指标,说明 pve-exporter 已经能够正常采集 PVE 的数据了。

四、配置 Prometheus 抓取 pve-exporter 的指标

pve-exporter 的工作方式与普通 Exporter 略有不同:它通过 HTTP 参数接收目标 PVE 地址,再代理去调用 PVE API,因此 Prometheus 这边需要做一些 relabel 处理。

编辑 Prometheus 的配置文件:

nano /opt/prometheus/prometheus.yml

scrape_configs: 下添加如下配置:

  - job_name: 'pve_exporter'
    metrics_path: /pve
    params:
      module: [default]
      cluster: ['1']
      node: ['1']
    static_configs:
      - targets:
        # 填写 PVE 宿主机的 IP 地址
        - 192.168.1.10
    relabel_configs:
      # 将 target 地址作为请求参数传给 pve-exporter
      - source_labels: [__address__]
        target_label: __param_target
      # 将 target 参数的值作为 instance 标签
      - source_labels: [__param_target]
        target_label: instance
      # 将实际的抓取地址替换为 pve-exporter 的地址
      - target_label: __address__
        replacement: <pve-exporter-server-ip>:9221
  • cluster: ['1']:采集集群级别的指标(节点列表、资源汇总等)。
  • node: ['1']:采集每个节点的详细指标(CPU、内存、磁盘、网络等)。
  • __address__ 中填写的是 PVE 宿主机的 IP,而 replacement 中填写的是运行 pve-exporter 容器的主机 IP。
  • 如果有多台 PVE 节点,在 targets 中追加各节点的 IP 即可,pve-exporter 会分别处理。

重新加载 Prometheus 的配置:

curl -X POST http://localhost:9090/-/reload

检查目标状态:

curl -s http://localhost:9090/api/v1/targets | python3 -m json.tool | grep -E '"job"|"health"'

看到 "health":"up" 说明 Prometheus 已经成功拉取到 PVE 的指标数据了。

五、在 Grafana 中导入 Dashboard 展示 PVE 指标

Dashboards > Import dashboard 中输入 Dashboard ID 10347,或直接使用 URL Proxmox via Prometheus (ID: 10347)

导入后选择已配置好的 Prometheus 数据源,保存即可。
Dashboard 中可以看到:

  • 各节点的 CPU、内存、磁盘 I/O、网络流量
  • 虚拟机和 LXC 容器的资源占用汇总
  • 存储池使用情况

PVE Dashboard

结束。


Edit page