Installation of Prometheus Node exporter in production environment consists from following high level steps:
-
Install exporter;
-
Configure exporter;
-
Configure authentication and tls encryption;
-
Configure firewall;
-
Configure service for autostart and restart;
-
Check access to exporter from I&B monitoring platform.
1. Install Prometheus Proxmox VE Exporter.
-
Check latest version available platforms on node_exporter GitHub page and make necessary changes in variables on next step.
-
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
-
Install exporter on all OSs
python3 -m pip install prometheus-pve-exporter
-
Now exporter binary is available on path.
/opt/prometheus-pve-exporter/bin/pve_exporter
-
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
-
Make Prometheus user owner of pve_exporter file
sudo chown -hR prometheus:prometheus /opt/prometheus-pve-exporter/bin/pve_exporter
2. Configure exporter
-
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.
-
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
-
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
-
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
-
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:
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.