How to Monitor Proxmox with Prometheus and Grafana
February 18, 2025

Monitoring Proxmox
Whether you are running in a simple home lab or an Internet facing production environment, monitoring is an important part of ensuring that your systems are working as intended.
When it comes to Proxmox, this can be easily achieved using Prometheus and Grafana, and some integration with a PVE metric exporter.
Note - the commands and details listed below can also be found in this House of Logic github repo.
Environment Setup
The easiest way to configure Grafana, Prometheus and the Proxmox Exporter is to use Docker containers. The instructions for this part of the setup can be found here.
With the Prometheus and Grafana environment configured, you should be able to add the Proxmox PVE exporter to the setup.
Prometheus Proxmox Virtual Environment Exporter
The Prometheus PVE Exporter interfaces with Proxmox and provides metrics in Prometheus’ format.
The exporter is available on Github and can be found here:
https://github.com/prometheus-pve/prometheus-pve-exporter
To use it in Docker, create a configuration directory, eg:
mkdir pve
cd pve
You should now create a pve.yml file for the pve exporter.
nano pve.yml
Enter the user details for the user you will use to authenticate with Proxmox and export metrics:
# for use with https://github.com/prometheus-pve/prometheus-pve-exporter
default:
user: monitoring@pve # your user
password: Password123 # your password
# Optional: set to false to skip SSL/TLS verification
verify_ssl: false
Note: Unless using signed certificates, set verify_ssl to false.
You can now pull and run the prometheus-pve-exporter container and set this to run as a service (daemon), mapping in the config file you have created and edited.
sudo docker pull prompve/prometheus-pve-exporter
sudo docker run --init --name prometheus-pve-exporter -d -p 0.0.0.0:9221:9221 -v /home/user/pve/pve.yml:/etc/prometheus/pve.yml prompve/prometheus-pve-exporter
You can check if the exporter is running using the following commands.
sudo docker ps
curl localhost:9221
These will confirm if the container is running, and make a call to the exporter to confirm it is responding on the network.
Additionally, you can use a browser to inspect metrics on Promxox by specifying the node IP address / hostname (192.168.2.10 in this example):
http://192.168.2.11:9221/pve?target=192.168.2.10
Prometheus setup
With your PVE Exporter running, you can now configure Prometheus to connect up the exporter.
The steps are similar to those of the exporter - edit the prometheus.yml config file.
cd ..
cd prometheus
nano prometheus.yml
Edit the prometheus.yml file as desired, adding to the scrape configs, eg:
scrape_configs: # only add scrape_configs if it does not already exist - otherwise add jobs to it
- job_name: 'pve'
static_configs:
- targets:
- 192.168.2.10 # Proxmox VE node.
metrics_path: /pve
params:
module: [default]
cluster: ['1']
node: ['1']
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 192.168.2.11:9221 # PVE exporter IP address and port number - use docker host IP, not localhost
You now need to restart the prometheus container to refresh the configuration - if you have followed the example setup, this can be done by running the following:
sudo docker restart prometheus
If not, you will have to identify the prometheus container using the following to find all running containers:
sudo docker ps
A minute or two after the restart, the pve-exporter metrics should be visible.
Demonstration
A demonstration of the setup can be found here - note that the video uses a root user the Prometheus Exporter authentication.
Since I made the video, I would now recommend instead using a read only user, as described here., particularly if you are running in any production context.
Useful links
House of Logic Github Proxmox Repo - featuring example files