使用 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和值中间有一个空格)Organization
为DOCKER_INFLUXDB_INIT_ORG
配置的值,如influx
Token
不用配置Default Bucket
为DOCKER_INFLUXDB_INIT_BUCKET
配置的值,如influx
配置完成后,点击 Save and Test
,如果提示成功则表示配置正确
添加 Grafana 图表
在 Grafana Dashboard 中搜索 proxmox,选择支持 Flux 查询语法的图表进行添加,如添加 Proxmox [Flux],根据 ID 导入 Grafana 即可看到 PVE 的监控指标