I&B Monitoring Platform documentation

Prometheus Proxmox VE exporter

Installation of Prometheus Node exporter in production environment consists from following high level steps:

  1. Install exporter;

  2. Configure exporter;

  3. Configure authentication and tls encryption;

  4. Configure firewall;

  5. Configure service for autostart and restart;

  6. Check access to exporter from I&B monitoring platform.

1. Install Prometheus Proxmox VE Exporter.

  1. Check latest version available platforms on node_exporter GitHub page and make necessary changes in variables on next step.

  2. Prepare Python3 and pip environment.

Fedora (RHEL, CentOS)

sudo dnf install python3
sudo dnf install python3-pip

Debian (Ubuntu)

sudo apt install python3
sudo apt install python3-pip
  1. Install exporter on all OSs

python3 -m pip install prometheus-pve-exporter
  1. Now exporter binary is available on path.

/opt/prometheus-pve-exporter/bin/pve_exporter
  1. Create Prometheus user. If it already exists - go to step 6.

Fedora (RHEL, CentOS)

sudo useradd -M -s /sbin/nologin prometheus
  • -M (or --no-create-home): This option prevents the creation of a home directory for the new user;

  • -s /sbin/nologin: This option sets the user's login shell to /sbin/nologin. This effectively prevents the user from interactively logging into the system. While the user won't have a password set, this further ensures they cannot log in.

Debian (Ubuntu)

sudo useradd -s /sbin/nologin prometheus --no-create-home
  1. Make Prometheus user owner of pve_exporter file

sudo chown -hR prometheus:prometheus /opt/prometheus-pve-exporter/bin/pve_exporter

2. Configure exporter

  1. Create a Dedicated Proxmox User on proxmox web interface:

1.1. Navigate to Datacenter > Permissions > Users in the Proxmox VE web interface;

1.2. Add a new user (e.g., prometheus@pve) and set a strong password. This user will be used by the exporter to access Proxmox data;

1.3. Still in Datacenter > Permissions, select the newly created user;

1.4. Add a User Permission for the path / and assign the PVEAuditor role. This role provides read-only access to necessary information without allowing modifications.

  1. Configure exporter to connect to proxmox with created account

2.1 Create dir to save config;

sudo mkdir -p /etc/prometheus 

2.2 Create config file;

sudo nano /etc/prometheus/pve.yml

2.3 Paste in to this file config with username and password created proxmox user.

default:
    user: prometheus@pve
    password: password
    verify_ssl: false
  1. For test run use following command

sudo /opt/prometheus-pve-exporter/bin/pve_exporter --config.file /etc/prometheus/pve.yml

if you see

[2025-09-26 14:54:57 +0300] [737065] [INFO] Starting gunicorn 23.0.0
[2025-09-26 14:54:57 +0300] [737065] [INFO] Listening at: http://[::]:9221 (737065)
[2025-09-26 14:54:57 +0300] [737065] [INFO] Using worker: gthread

its good, press ctrl+c to exit

3. Configure firewall

Configure firewall on resource

  1. PVE exporter uses default port 9221, and 443 port uses nginx reverse proxy so allow it in firewall on resource.

Fedora (RHEL, CentOS)

sudo firewall-cmd --zone=public --add-port=9221/tcp --permanent
sudo firewall-cmd --zone=public --add-port=443/tcp --permanent
sudo systemctl reload firewalld

Check firewall configuration

sudo firewall-cmd --list-all

You should see in output:

ports: 9221/tcp

ports: 443/tcp

Debian (Ubuntu)

sudo ufw allow 9221
sudo ufw allow 443

You should see in output:

Rules updated
Rules updated (v6)

Check firewall configuration

sudo ufw status

You should see in output:

To                             Action          From
--                             ------          ----
9221                           ALLOW           Anywhere
443                            ALLOW           Anywhere

its good

3. Configure authentication and TLS encryption for exporter with nginx reverse proxy

Do the steps described in Exporters configuration → NGINX as reverse proxy section.

4. Check configuration

  1. Run pve_exporter

sudo /opt/prometheus-pve-exporter/bin/pve_exporter --config.file /etc/prometheus/pve.yml

In output you should see:

[2025-09-26 14:54:57 +0300] [737065] [INFO] Starting gunicorn 23.0.0
[2025-09-26 14:54:57 +0300] [737065] [INFO] Listening at: http://[::]:9221 (737065)
[2025-09-26 14:54:57 +0300] [737065] [INFO] Using worker: gthread

Check with browser if it is accessible at:

https://resource-hostname-or-ip/pve?target=proxmox-node-hostname-or-ip

After entering exporter’s user name and password you should see page like this:

# HELP pve_up Node/VM/CT-Status is online/running
# TYPE pve_up gauge
pve_up{id="node/proxmox"} 1.0
...

Stop node exporter with Ctrl-C in terminal where you run it.

Make node_exporter service for autostart and restart.

Create file with your preferred text editor, for example nano …

sudo nano /etc/systemd/system/prometheus_pve_exporter.service

… and paste following text into it.

[Unit]
Description=Prometheus exporter for Proxmox VE

[Service]
Restart=always
User=prometheus
ExecStart=/opt/prometheus-pve-exporter/bin/pve_exporter --config.file /etc/prometheus/pve.yml

[Install]
WantedBy=multi-user.target

Save file and exit editor.

Start service …

sudo systemctl daemon-reload
sudo systemctl start prometheus_pve_exporter
sudo systemctl enable prometheus_pve_exporter

… and check

sudo systemctl status prometheus_pve_exporter

You should see following output similar to:

image-20250926-121510.png


In case of any problem, you should view log entries for service:

journalctl -u prometheus_pve_exporter.service -e

Now node exporter is ready to accept data and then expose it to Prometheus.