使用 proxmox-pve-exporter 监控 Proxmox VE

安装 proxmox-pve-exporter

这里我将 proxmox-pve-exporter 安装到单独的服务器,而不是 pve宿主机,这样可以通过一个 exporter 去监控多台 pve 主机,如果只有一台机器的话直接在pve主机安装就行。

GitHub地址:https://github.com/prometheus-pve/prometheus-pve-exporter

文档中介绍了两种安装方式:pip安装和docker安装

pip安装(需要python3.9以上版本)

安装 exporter,如果没有pip3的话需要先安装python3-pip

pip3 install prometheus-pve-exporter
pve_exporter --help

注意: 在Debian或者Ubuntu系统中,由于apt和pip的包管理器存在冲突,会报错error: externally-managed-environment

解决办法1:在 pip3 install  package 后面加上参数 “--break-system-packages”

解决办法2:使用pipx安装软件包 apt install pipx pipx install prometheus-pve-exporter

解决办法3:使用虚拟环境安装pip包

docker安装

docker run --init --name prometheus-pve-exporter -d -p 127.0.0.1:9221:9221 -v /path/to/pve.yml:/etc/prometheus/pve.yml prompve/prometheus-pve-exporter

配置监控用户

出于安全原因,必须添加具有只读访问权限的用户(PVEAuditor 角色)来收集指标

详细:Proxmox VE Administration Guide

在所有的PVE主机创建一个用户

pveum user add monitor@pve -comment "monitor for exporter" # 创建用户
pveum passwd monitor@pve      # 配置密码

为 prometheus 用户分配 PVEAuditor 监控角色的权限

pveum acl modify / --roles PVEAuditor --users monitor@pve

配置 proxmox-pve-exporter

在安装了 proxmox-pve-exporter 的主机中创建一个配置文件,用于定义PVE主机的用户名,密码,就是上面创建的用户

vi /etc/prometheus/pve.yaml
default:
  user: monitor@pve
  password: your_password
  verify_ssl: false

配置开机自启动

vi /etc/systemd/system/prometheus-pve-exporter.service
[Unit]
Description=Prometheus exporter for Proxmox VE
Documentation=https://github.com/znerol/prometheus-pve-exporter
[Service]
Restart=always
ExecStart=/usr/local/bin/pve_exporter --config.file /etc/prometheus/pve.yaml
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now prometheus-pve-exporter.service

默认端口9221

访问 exporter http://ip:9221

这里会让你访问/pve?target=1.2.3.4,其中 target= 是你的PVE主机IP地址,如果是在pve主机搭建的 prometheus-pve-exporter ip填 127.0.0.1 即可,我这种方法适合需要监控多台PVE主机的场景,官方文档有详细说明

查看监控指标

http://192.168.8.204:9221/pve?target=192.168.8.2

Prometheus 配置

PVE exporter running on PVE node

scrape_configs:
  - job_name: 'pve'
    static_configs:
      - targets:
        - 192.168.1.2:9221  # Proxmox VE node with PVE exporter.
        - 192.168.1.3:9221  # Proxmox VE node with PVE exporter.
    metrics_path: /pve
    params:
      module: [default]
      cluster: ['1']
      node: ['1']

PVE exporter running on Prometheus host

scrape_configs:
  - job_name: 'pve'
    static_configs:
      - targets:
        - 192.168.1.2  # Proxmox VE node.
        - 192.168.1.3  # Proxmox VE node.
    metrics_path: /pve
    params:
      module: [default]
      cluster: ['1']
      node: ['1']
    relabel_configs:           #使用relabel_configs重写目标地址
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 127.0.0.1:9221   # PVE exporter的ip和端口号

配置完成后重启普罗米修斯,并进行验证

配置Grafana仪表盘

这里推荐使用 10347 https://grafana.com/grafana/dashboards/10347-proxmox-via-prometheus/

通过/dashboard/import 导入即可

使用 InfluxDB 和 Grafana 对 PVE 进行监控

除了使用proxmox-pve-exporter外PVE 原生支持添加InfluxDB或者Graphite作为指标数据的存储;在添加配置后,PVE会主动上报相关监控数据,用于记录和监控 PVE的状态。

下面介绍使用 InfluxDB 和 Grafana 对 PVE 进行监控。

安装配置 InfluxDB

当前PVE版本需要使用的 InfluxDB v2 版本,使用 Flux 语法进行查询。方便操作,本次仅提供docker compose部署方式,k8s部署也是类似比较简单。

docker-compose.yaml

services:
  influxdb:
    image: influxdb:2
    container_name: influxdb
    environment:
      DOCKER_INFLUXDB_INIT_MODE: setup
      DOCKER_INFLUXDB_INIT_USERNAME: admin
      DOCKER_INFLUXDB_INIT_PASSWORD: qwert54321..
      DOCKER_INFLUXDB_INIT_ORG: influx
      DOCKER_INFLUXDB_INIT_BUCKET: influx
      DOCKER_INFLUXDB_INIT_ADMIN_TOKEN: Eing5yaew6ujoo9ohd3saeH6neeshei3
    volumes:
      - type: volume
        source: influxdb2-data
        target: /var/lib/influxdb2
      - type: volume
        source: influxdb2-config
        target: /etc/influxdb2
    ports:
      - '8086:8086'
    restart: always
volumes:
  influxdb2-data:
  influxdb2-config:

DOCKER_INFLUXDB_INIT_MODE它用于指定容器启动时运行的初始化模式。该变量有两个有效值:

  • setup: 表示在容器首次启动时,将执行InfluxDB初始化脚本并创建管理员用户。

  • skip:表示跳过初始化脚本的执行,直接启动InfluxDB服务。

DOCKER_INFLUXDB_INIT_PASSWORD 不能设置的太简单,否则 InfluxDB 启动时会报错

DOCKER_INFLUXDB_INIT_ORG 用于指定 InfluxDB 的组织

DOCKER_INFLUXDB_INIT_BUCKET 用于指定初始化使用的 Bucket

DOCKER_INFLUXDB_INIT_ADMIN_TOKEN 用于访问时进行鉴权,后续上报还是grafana获取监控数据都使用这个配置

TOKEN 可以使用pwgen工具生成, 例如:

# 生成一个32位的随机密码
pwgen 32 1

配置 PVE

登录PVE后,PVE 的服务器视图下,选择数据中心 - 指标服务器,选择添加 InfluxDB,输入相关的配置:
协议选择 HTTP,组织添加 DOCKER_INFLUXDB_INIT_ORG 配置的值,插槽添加 DOCKER_INFLUXDB_INIT_BUCKET 配置的 Bucket, 令牌填写 DOCKER_INFLUXDB_INIT_ADMIN_TOKEN 配置的 token

添加后 PVE 就会将监控指标推送到 InfluxDB 的 Bucket 中了。

配置 Grafana (之前安装过grafana的可省略这步)

docker-compose.yaml

services:
  # influxdb ...

  grafana:
    image: grafana/grafana
    container_name: grafana-server
    restart: always
    depends_on:
      - influxdb
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=admin
    links:
      - influxdb
    ports:
      - "3000:3000"
    volumes:
      - grafana:/var/lib/grafana
volumes:
  grafana:

添加 InfluxDB 作为数据源

登陆 Grafana 并添加数据源,使用 InfluDB 作为数据源

在 InfluxDB 2 版本以后,添加到 Grafana 数据源变得不太方便;配置如下:

  • Query Language 选择 Flux

  • URL 填写 InfluxDB 的地址,如 http://192.168.8.204:8086

  • Access选择 Server(default)(高版本的 Grfana 已不包含该选项)

  • Auth下的配置全部关闭,不需要配置

  • Custom HTTP Headers 添加一个新的配置,Header 名称为 Authorization, Value 为 Token+DOCKER_INFLUXDB_INIT_ADMIN_TOKEN 配置的 Token,如 Token Eing5yaew6ujoo9ohd3saeH6neeshei3(需注意Token和值中间有一个空格)

  • OrganizationDOCKER_INFLUXDB_INIT_ORG 配置的值,如 influx

  • Token 不用配置

  • Default BucketDOCKER_INFLUXDB_INIT_BUCKET 配置的值,如 influx

配置完成后,点击 Save and Test,如果提示成功则表示配置正确

添加 Grafana 图表

Grafana Dashboard 中搜索 proxmox,选择支持 Flux 查询语法的图表进行添加,如添加 Proxmox [Flux],根据 ID 导入 Grafana 即可看到 PVE 的监控指标