How to Monitor Proxmox with Grafana and Prometheus
Proxmox’s built-in web interface shows current resource usage, but it doesn’t easily answer questions like “how did CPU load trend over the last month” or “which VM’s memory usage has been slowly creeping up.” Setting up a way to monitor Proxmox with Grafana and Prometheus fills that gap, turning raw metrics into historical dashboards you can actually analyze over time.
Why Add Dedicated Monitoring to Proxmox
The native Proxmox dashboard is great for a quick glance at current status, but lacks long-term trend visualization, custom alerting rules, and the ability to correlate metrics across multiple nodes in a single view — exactly what Prometheus and Grafana are built for.
Architecture Overview
- Prometheus – a time-series database that periodically scrapes metrics from configured targets and stores them for querying
- Node Exporter / Proxmox VE Exporter – an agent that exposes system and Proxmox-specific metrics in a format Prometheus can scrape
- Grafana – the dashboard layer, querying Prometheus and rendering the results as customizable, historical graphs
Installing Prometheus
Prometheus is commonly run as its own dedicated VM or container within your homelab, separate from the Proxmox hosts it monitors:
yaml
version: '3'
services:
prometheus:
image: prom/prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- ./prometheus-data:/prometheus
ports:
- '9090:9090'
docker compose up -d
Installing the Proxmox VE Exporter
A dedicated exporter designed specifically for Proxmox exposes metrics that the generic Node Exporter wouldn’t capture, such as per-VM resource usage and Proxmox-specific cluster status. Install it as a container or directly on a monitoring VM, configuring it with API credentials (an API token is recommended over the root account) to query your Proxmox cluster’s status via its own API.
Configuring Prometheus to Scrape Proxmox Metrics
Edit prometheus.yml to add the exporter as a scrape target:
yaml
scrape_configs:
- job_name: 'proxmox'
static_configs:
- targets: ['proxmox-exporter:9221']
Restart Prometheus to apply the new configuration.
Installing Grafana
Add Grafana alongside your existing Prometheus setup:
yaml
grafana:
image: grafana/grafana:latest
ports:
- '3000:3000'
volumes:
- ./grafana-data:/var/lib/grafana
Access Grafana at http://your-server-ip:3000.
Connecting Grafana to Prometheus
- In Grafana, go to Connections → Data Sources → Add data source.
- Select Prometheus.
- Enter your Prometheus server’s URL (e.g.,
http://prometheus:9090). - Click Save & Test.
Importing a Pre-Built Proxmox Dashboard
Rather than building panels from scratch, the Grafana community maintains ready-made dashboard templates specifically designed for Proxmox VE metrics. Import one via Dashboards → Import, entering the dashboard ID from Grafana’s public dashboard library, and select your Prometheus data source when prompted.
What You Can Track
A properly configured Proxmox monitoring dashboard typically shows:
- CPU, memory, and disk usage trends per node and per VM over time
- Cluster-wide resource utilization at a glance
- Storage pool capacity trends, useful for anticipating when you’ll need to expand storage
- Network throughput across nodes
Setting Up Alerts
Beyond visualization, configure Grafana alert rules for conditions worth being notified about — for example, triggering an alert if any node’s disk usage crosses 85%, or if a specific VM’s memory usage sustains an unusually high level for an extended period, sending notifications through email, Discord, or another configured channel.
Combining with Existing Monitoring
If you’re already running Netdata (covered in an earlier guide) for general server health or Loki for centralized logging, Prometheus and Grafana specifically for Proxmox-level cluster metrics complement rather than duplicate that coverage — each tool focuses on a different layer of visibility across your homelab.
Final Thoughts
Setting up a system to monitor Proxmox with Grafana and Prometheus transforms your homelab from “checking the dashboard when something feels wrong” into genuine historical visibility and proactive alerting. For anyone running a Proxmox cluster with more than a couple of nodes, this kind of dedicated monitoring quickly becomes indispensable for spotting slow-building problems before they turn into real outages.