Try it free

Proxmox Virtual Environment extension

  • Latest Dynatrace
  • Extension
  • Published Sep 24, 2026

Monitor Proxmox VE clusters, nodes, QEMU virtual machines, LXC containers, storage, and Ceph with metrics, topology, dashboards, and alerts in Dynatrace.

Get full-stack observability for your Proxmox virtualization estate.

Get started

Overview

Proxmox Virtual Environment (Proxmox VE) is an open-source platform for running QEMU virtual machines and LXC containers on clustered hosts. This extension connects to the Proxmox REST API with a Proxmox API token and collects metrics, topology, dashboards, alerts, and unified analysis pages for your clusters, nodes, virtual machines, containers, storage, and Ceph. It runs remotely on an ActiveGate and doesn't install any agent on the Proxmox hosts.

The extension maps the whole estate as Dynatrace entities—clusters, nodes, virtual machines, containers, and storage—and links nodes and virtual machines to their corresponding hosts, so you can navigate from a cluster down to an individual guest.

Use cases

  • Monitor the health, quorum, and capacity of your Proxmox clusters and nodes from one place.
  • Track CPU, memory, disk, and network usage across QEMU virtual machines and LXC containers.
  • Detect node CPU saturation, lost high-availability quorum, and failed node tasks with prebuilt alerts.
  • Analyze Ceph storage health, OSD state, placement-group state, and per-pool utilization.
  • Investigate the relationships between clusters, nodes, guests, and storage in Smartscape.

Requirements

  • A Proxmox VE API token in user@realm format, with a token name and secret, granting read access to the monitored resources. The PVEAuditor role on / is sufficient.
  • Network reachability from the ActiveGate to the Proxmox API (port 8006 by default).

Compatibility information

  • Dynatrace version 1.343+.
  • Environment ActiveGate version 1.313+.

Activation and setup

Prerequisites

  • An ActiveGate to host the extension. The extension monitors Proxmox remotely; it doesn't run on the Proxmox hosts.
  • A Proxmox API token, as described in Requirements.

To start monitoring:

  1. In Proxmox, create an API token for a user that holds the PVEAuditor role, and copy the token secret.
  2. In Dynatrace, go to Dynatrace Hub, find Proxmox Virtual Environment, and select Add to environment.
  3. Create a monitoring configuration and select the ActiveGate group that can reach the Proxmox API.
  4. Enter the Proxmox host, port, username, token name, and token secret. Optionally store the token secret in the Dynatrace credential vault and reference it instead.
  5. Select the feature sets you want to collect, then save the configuration.

Monitoring configurations

A monitoring configuration defines one Proxmox connection:

  • Host and Port: the address of a Proxmox cluster node and its API port (default 8006).
  • Username, Token name, and Token value—the API token credentials, or a credential-vault reference to the token.
  • Verify SSL certificate: off by default, because self-hosted Proxmox typically uses self-signed certificates. Turn it on when the API presents a trusted certificate.
  • Collection interval: how often the extension polls the Proxmox API.
  • Monitored systemd services: the node services whose state is reported. A default set covers the core Proxmox services; you can customize the list.

Details

This extension package contains:

  • Custom entity types for Proxmox clusters, nodes, QEMU virtual machines, LXC containers, and storage, plus the relationships between them, in both classic topology and Smartscape.
  • A Proxmox VE overview dashboard.
  • Metric events that alert on node CPU saturation, lost high-availability quorum, and failed node tasks.
  • Unified analysis pages for clusters, nodes, virtual machines, containers, and storage.

Metrics

Metrics are namespaced under proxmox. across six domains—proxmox.cluster, proxmox.node, proxmox.vm, proxmox.container, proxmox.storage, and proxmox.ceph—and grouped into feature sets so you can collect only what you need. Recommended feature sets are enabled by default; the extended and Ceph feature sets are opt-in.

Licensing and costs

There is no charge to use the extension. You are only charged for the data that the extension ingests.

The Proxmox Virtual Environment extension ingests custom metrics, which consume Davis data units (DDUs) (Dynatrace classic license) or Metrics powered by Grail (DPS), according to your license model.

By default, this extension queries for data every minute. You can change the polling frequency in the monitoring configuration with the Collection interval setting, so keep your configured interval in mind when you estimate cost: a longer interval produces the same datapoints less often and lowers consumption proportionally. To estimate the number of metric datapoints produced by your extension configuration, use the following list, which gives you a number of metrics per feature set and a multiplier value depending on which entity the metric is split by. Add all of these up to get the total datapoints per collection cycle (every minute at the default interval).

  • Cluster 14 × number of Proxmox clusters
  • Ceph 22 × number of Proxmox clusters + 1 × number of Proxmox clusters × number of Ceph flags + 2 × number of Proxmox clusters × number of Ceph pools
  • Node 20 × number of Proxmox nodes
  • Node-Extended 12 × number of Proxmox nodes + 2 × number of Proxmox nodes × number of physical disks + 1 × number of Proxmox nodes × number of physical disks × number of SMART attributes
  • Node-Services 3 × number of Proxmox nodes × number of monitored services
  • Node-Storage 7 × number of Proxmox storage volumes
  • VM 16 × number of Proxmox virtual machines
  • VM-Extended 15 × number of Proxmox virtual machines + 2 × number of Proxmox virtual machines × number of guest filesystems + 6 × number of Proxmox virtual machines × number of guest network interfaces
  • Container 13 × number of Proxmox containers
  • Container-Extended 15 × number of Proxmox containers

Dynatrace Platform Subscription

In the Dynatrace Platform Subscription, metric ingestion consumes Metrics powered by Grail according to the number of ingested metric data points.

To calculate the approximate yearly consumption, apply the following calculation: <metric data points per minute> * 60 minutes * 24 hours * 365 days.

For example, at 64 metric data points per minute: 64 * 60 * 24 * 365 = 33,638,400 metric data points per year.

Dynatrace classic license

In the classic licensing model, metric ingestion consumes Davis data units (DDUs) at the rate of 0.001 DDUs per metric data point. Multiply the annual data point formula by 0.001 to estimate annual DDU usage.

For example, at 64 metric data points per minute: 64 * 60 * 24 * 365 * 0.001 = 33,638.4 DDUs per year.

The DDU cost doesn't include any log events or custom events the extension triggers. For more information, see DDU events.

Feature sets

When activating your extension using a monitoring configuration, you can limit monitoring to one of the feature sets. To work properly, the extension has to collect at least one metric after the activation.

In highly segmented networks, feature sets can reflect the segments of your environment. Then, when you create a monitoring configuration, you can select a feature set and a corresponding ActiveGate group that can connect to this particular segment.

All metrics that aren't categorized into any feature set are considered to be the default and are always reported.

A metric inherits the feature set of a subgroup, which in turn inherits the feature set of a group. Also, the feature set defined on the metric level overrides the feature set defined on the subgroup level, which in turn overrides the feature set defined on the group level.

Node-Extended
Metric nameMetric keyDescription
Node Subscription Activeproxmox.node.subscription.active1 if the node has an active Proxmox subscription
Node Updates Pendingproxmox.node.updates.pendingTotal pending APT package updates
Node Proxmox Updates Pendingproxmox.node.updates.pending_proxmoxPending updates originating from the Proxmox repositories
Node Tasks Failedproxmox.node.tasks.failedTasks in the recent history that ended in FAILED status
Node Tasks Runningproxmox.node.tasks.runningTasks currently in progress
Physical Disk Sizeproxmox.node.disk.sizeRaw physical disk capacity
Physical Disk SMART Healthproxmox.node.disk.smart_passed1 if SMART overall health is PASSED
Physical Disk SMART Attributeproxmox.node.disk.smart_attributeRaw value of a tracked SMART attribute
Node Memory Availableproxmox.node.memory.availableUsable memory including reclaimable page cache
Node ZFS ARC Sizeproxmox.node.zfs.arc_sizeZFS adaptive replacement cache size (0 on non-ZFS hosts)
Node CPU Pressure (some)proxmox.node.pressure.cpu.someLinux PSI: share of time some task was stalled on CPU
Node I/O Pressure (some)proxmox.node.pressure.io.someLinux PSI: share of time some task was stalled on I/O
Node I/O Pressure (full)proxmox.node.pressure.io.fullLinux PSI: share of time all tasks were stalled on I/O
Node Memory Pressure (some)proxmox.node.pressure.memory.someLinux PSI: share of time some task was stalled on memory
Node Memory Pressure (full)proxmox.node.pressure.memory.fullLinux PSI: share of time all tasks were stalled on memory
VM
Metric nameMetric keyDescription
VM Statusproxmox.vm.status1 if the VM is running
VM CPU Usageproxmox.vm.cpu.usageCPU utilization
VM vCPU Countproxmox.vm.cpu.countAllocated virtual CPUs
VM Memory Usedproxmox.vm.memory.usedMemory currently in use
VM Memory Totalproxmox.vm.memory.totalMaximum allocated memory
VM Memory Freeproxmox.vm.memory.freeEstimated free memory (maxmem - mem). When the balloon driver is active this may overstate available memory, since the balloon reports how much the host has reclaimed rather than what the guest OS considers free.
VM Memory Used %proxmox.vm.memory.used_pctPercentage of allocated memory in use (mem / maxmem × 100). Only reported when maxmem > 0.
VM Disk Readproxmox.vm.disk.readCumulative bytes read since the VM started
VM Disk Writeproxmox.vm.disk.writeCumulative bytes written since the VM started
VM Disk Sizeproxmox.vm.disk.sizeAllocated root disk size
VM Network Inproxmox.vm.network.inCumulative bytes received since the VM started
VM Network Outproxmox.vm.network.outCumulative bytes sent since the VM started
VM Uptimeproxmox.vm.uptimeTime since the VM last started
VM QMP Statusproxmox.vm.qmp_status1 if the QEMU Machine Protocol monitor reports the VM running
VM Lockproxmox.vm.lock1 if the VM has an active configuration lock, 0 if unlocked. The lock type (e.g. "backup", "migrate", "snapshot") is stored in the vm_lock dimension. A value of "none" means no lock is held. Locked VMs cannot be started, stopped, or reconfigured until the operation completes.
VM HA Stateproxmox.vm.ha.stateAlways 1 for each reporting interval; the HA service state (e.g. "started", "stopped", "error", "migrate") is captured in the vm_ha_state dimension. Only reported for VMs registered with the Proxmox HA manager. Use vm_ha_state == "error" to alert on HA failures.
Container-Extended
Metric nameMetric keyDescription
Container Configured Coresproxmox.container.config.coresConfigured CPU cores
Container Configured Memoryproxmox.container.config.memoryConfigured maximum memory
Container Configured Swapproxmox.container.config.swapConfigured maximum swap
Container CPU Limitproxmox.container.config.cpu_limitConfigured CPU limit (0 = unlimited)
Container CPU Priority Unitsproxmox.container.config.cpu_unitsConfigured relative CPU scheduling weight
Container Start On Bootproxmox.container.config.start_on_boot1 if the container is configured to start on node boot
Container Unprivilegedproxmox.container.config.unprivileged1 if the container runs unprivileged
Container Snapshot Countproxmox.container.snapshot.countSnapshots currently held
Container Disk Used (actual)proxmox.container.disk.usedActual disk space consumed, distinct from allocated size
Container Host Memory Usedproxmox.container.memory.hostHost-side memory held by this guest
Container CPU Pressure (some)proxmox.container.pressure.cpu.someLinux PSI: share of time some task was stalled on CPU
Container CPU Pressure (full)proxmox.container.pressure.cpu.fullLinux PSI: share of time all tasks were stalled on CPU
Container I/O Pressure (some)proxmox.container.pressure.io.someLinux PSI: share of time some task was stalled on I/O
Container Memory Pressure (some)proxmox.container.pressure.memory.someLinux PSI: share of time some task was stalled on memory
Container Memory Pressure (full)proxmox.container.pressure.memory.fullLinux PSI: share of time all tasks were stalled on memory
Node
Metric nameMetric keyDescription
Node Onlineproxmox.node.online1 if the node is online in the cluster
Node CPU Usageproxmox.node.cpu.usageCPU utilization
Node CPU I/O Waitproxmox.node.cpu.waitCPU time spent waiting on I/O
Node CPU Countproxmox.node.cpu.countLogical CPUs available to the node
Node CPU Socketsproxmox.node.cpu.socketsPhysical CPU sockets
Node Load Average (1m)proxmox.node.loadavg.1m1-minute load average
Node Load Average (5m)proxmox.node.loadavg.5m5-minute load average
Node Load Average (15m)proxmox.node.loadavg.15m15-minute load average
Node Memory Usedproxmox.node.memory.usedPhysical memory in use
Node Memory Totalproxmox.node.memory.totalTotal physical memory
Node Memory Freeproxmox.node.memory.freeFree physical memory
Node Memory Usageproxmox.node.memory.used_pctPhysical memory utilisation as a percentage (memory.used / memory.total × 100)
Node Swap Usedproxmox.node.swap.usedSwap space in use
Node Swap Totalproxmox.node.swap.totalTotal swap space
Node Swap Freeproxmox.node.swap.freeFree swap space
Node Root FS Usedproxmox.node.rootfs.usedRoot filesystem space used
Node Root FS Totalproxmox.node.rootfs.totalRoot filesystem capacity
Node Root FS Availableproxmox.node.rootfs.availRoot filesystem space available
Node Uptimeproxmox.node.uptimeTime since the node last booted
Node KSM Shared Memoryproxmox.node.ksm.sharedMemory de-duplicated by Kernel Samepage Merging
Node-Services
Metric nameMetric keyDescription
Node Service Activeproxmox.node.service.active1 if the monitored systemd service is active (active-state == "active"), 0 otherwise. The state dimension holds the derived value ("active" or "inactive").
Node Service Stateproxmox.node.service.stateAlways 1 for each reporting interval; the raw systemd active-state string (e.g. "active", "inactive", "failed", "activating") is captured in the service_state dimension. Filter on service_state to isolate services in a particular state.
Node Service Enabledproxmox.node.service.enabled1 if the service is configured to start on boot (unit-state is "enabled" or "enabled-runtime"), 0 otherwise. The raw unit-state string is stored in the service_unit_state dimension. A value of 0 with state "active" indicates a service that is running but will not survive a reboot.
Ceph
Metric nameMetric keyDescription
Ceph Healthproxmox.ceph.health2=HEALTH_OK, 1=HEALTH_WARN, 0=HEALTH_ERR, -1=unknown
Ceph OSDs Totalproxmox.ceph.osd.totalTotal OSDs in the cluster
Ceph OSDs Upproxmox.ceph.osd.upOSDs currently up
Ceph OSDs Inproxmox.ceph.osd.inOSDs currently in the CRUSH map
Ceph OSDs Downproxmox.ceph.osd.downOSDs that are not up (total minus up). Derived as num_osds - num_up_osds.
Ceph OSDs Outproxmox.ceph.osd.outOSDs removed from the CRUSH map (total minus in). Derived as num_osds - num_in_osds.
Ceph Placement Groupsproxmox.ceph.pg.totalTotal placement groups
Ceph Active PGsproxmox.ceph.pg.activePlacement groups currently in an active state (sum of all PG states containing "active")
Ceph Degraded PGsproxmox.ceph.pg.degradedPlacement groups with reduced redundancy (sum of all PG states containing "degraded"). Non-zero indicates data protection loss.
Ceph Recovering PGsproxmox.ceph.pg.recoveringPlacement groups currently recovering data (sum of all PG states containing "recovering")
Ceph Undersized PGsproxmox.ceph.pg.undersizedPlacement groups with fewer replicas than required (sum of all PG states containing "undersized")
Ceph Bytes Usedproxmox.ceph.bytes.usedRaw bytes used across the Ceph cluster
Ceph Bytes Availableproxmox.ceph.bytes.availRaw bytes available across the Ceph cluster
Ceph Bytes Totalproxmox.ceph.bytes.totalRaw capacity across the Ceph cluster
Ceph Capacity Used %proxmox.ceph.bytes.used_pctPercentage of raw Ceph cluster capacity used. Derived as bytes_used / bytes_total * 100.
Ceph Read Throughputproxmox.ceph.io.read_bpsCluster-wide read throughput
Ceph Write Throughputproxmox.ceph.io.write_bpsCluster-wide write throughput
Ceph Recovery Throughputproxmox.ceph.io.recovering_bpsData movement rate during recovery/backfill
Ceph Read IOPSproxmox.ceph.io.read_opsCluster-wide read operations per second
Ceph Write IOPSproxmox.ceph.io.write_opsCluster-wide write operations per second
Ceph Monitor Countproxmox.ceph.mon.countNumber of Ceph monitors
Ceph Monitors in Quorumproxmox.ceph.mon.quorumNumber of Ceph monitors participating in quorum. Quorum loss (drops below majority) causes full cluster outage.
Ceph Flag Activeproxmox.ceph.flag1 if the named Ceph cluster flag is set
Ceph Pool Used Bytesproxmox.ceph.pool.used_bytesBytes used by this pool. Dimension pool_name identifies the pool.
Ceph Pool Used %proxmox.ceph.pool.used_pctPercentage of pool quota used. Dimension pool_name identifies the pool.
Container
Metric nameMetric keyDescription
Container Statusproxmox.container.status1 if the container is running
Container CPU Usageproxmox.container.cpu.usageCPU utilization
Container vCPU Countproxmox.container.cpu.countAllocated virtual CPUs
Container Memory Usedproxmox.container.memory.usedMemory currently in use
Container Memory Totalproxmox.container.memory.totalMaximum allocated memory
Container Swap Usedproxmox.container.swap.usedSwap space in use
Container Swap Totalproxmox.container.swap.totalMaximum allocated swap
Container Disk Readproxmox.container.disk.readCumulative bytes read since the container started
Container Disk Writeproxmox.container.disk.writeCumulative bytes written since the container started
Container Disk Sizeproxmox.container.disk.sizeAllocated root disk size
Container Network Inproxmox.container.network.inCumulative bytes received since the container started
Container Network Outproxmox.container.network.outCumulative bytes sent since the container started
Container Uptimeproxmox.container.uptimeTime since the container last started
Cluster
Metric nameMetric keyDescription
Cluster Nodes Totalproxmox.cluster.nodes.totalTotal nodes registered in the cluster
Cluster Nodes Onlineproxmox.cluster.nodes.onlineNodes currently online
Cluster Nodes Offlineproxmox.cluster.nodes.offlineNodes currently offline (total minus online)
Cluster CPU Usageproxmox.cluster.cpu.usageCluster-wide CPU utilisation as a weighted average across all online nodes. Calculated as sum(node_cpu_fraction × node_cpu_count) / sum(node_cpu_count) × 100, so nodes with more CPUs contribute proportionally more to the result.
Cluster Memory Usedproxmox.cluster.memory.usedTotal memory used across all online cluster nodes in bytes
Cluster Memory Totalproxmox.cluster.memory.totalTotal memory capacity across all online cluster nodes in bytes
Cluster Memory Usageproxmox.cluster.memory.usageCluster-wide memory utilisation as a percentage (memory.used / memory.total × 100)
Cluster Quorateproxmox.cluster.quorate1 if the cluster has quorum (majority of nodes online for Corosync decisions), 0 if not
SDN Statusproxmox.cluster.sdn.status1 if all SDN zones are applied and clean, 0 if any zone is in a pending or error state
HA Quorateproxmox.cluster.ha.quorate1 if the HA manager reports quorum
HA Resource Runningproxmox.cluster.ha.resource.running1 if the HA-managed resource is started
HA Resource Errorproxmox.cluster.ha.resource.error1 if the HA-managed resource is in an error state
HA Resource Stoppedproxmox.cluster.ha.resource.stopped1 if the HA-managed resource is stopped
Guests Without Backupproxmox.cluster.backup.unprotected_guestsVMs/containers with no backup job covering them
VM-Extended
Metric nameMetric keyDescription
VM Configured Coresproxmox.vm.config.coresConfigured CPU cores
VM Configured Socketsproxmox.vm.config.socketsConfigured CPU sockets
VM Configured Memoryproxmox.vm.config.memoryConfigured maximum memory
VM Configured Balloon Minimumproxmox.vm.config.balloon_minConfigured minimum balloon memory
VM CPU Limitproxmox.vm.config.cpu_limitConfigured CPU limit (0 = unlimited)
VM CPU Priority Unitsproxmox.vm.config.cpu_unitsConfigured relative CPU scheduling weight
VM Start On Bootproxmox.vm.config.start_on_boot1 if the VM is configured to start on node boot
VM Snapshot Countproxmox.vm.snapshot.countSnapshots currently held
VM Disk Used (actual)proxmox.vm.disk.usedActual disk space consumed, distinct from allocated size
VM Host Memory Usedproxmox.vm.memory.hostHost-side memory held by this guest (balloon perspective)
VM CPU Pressure (some)proxmox.vm.pressure.cpu.someLinux PSI: share of time some task was stalled on CPU
VM CPU Pressure (full)proxmox.vm.pressure.cpu.fullLinux PSI: share of time all tasks were stalled on CPU
VM I/O Pressure (some)proxmox.vm.pressure.io.someLinux PSI: share of time some task was stalled on I/O
VM Memory Pressure (some)proxmox.vm.pressure.memory.someLinux PSI: share of time some task was stalled on memory
VM Memory Pressure (full)proxmox.vm.pressure.memory.fullLinux PSI: share of time all tasks were stalled on memory
VM Guest Disk Usedproxmox.vm.agent.disk.usedIn-guest filesystem space used, reported by the guest agent
VM Guest Disk Totalproxmox.vm.agent.disk.totalIn-guest filesystem capacity, reported by the guest agent
VM Guest NIC RX Bytesproxmox.vm.agent.network.rx_bytesIn-guest NIC receive bytes, reported by the guest agent
VM Guest NIC TX Bytesproxmox.vm.agent.network.tx_bytesIn-guest NIC transmit bytes, reported by the guest agent
VM Guest NIC RX Errorsproxmox.vm.agent.network.rx_errorsIn-guest NIC receive errors, reported by the guest agent
VM Guest NIC TX Errorsproxmox.vm.agent.network.tx_errorsIn-guest NIC transmit errors, reported by the guest agent
VM Guest NIC RX Droppedproxmox.vm.agent.network.rx_droppedIn-guest NIC receive drops, reported by the guest agent
VM Guest NIC TX Droppedproxmox.vm.agent.network.tx_droppedIn-guest NIC transmit drops, reported by the guest agent
Node-Storage
Metric nameMetric keyDescription
Storage Totalproxmox.storage.totalTotal storage capacity
Storage Usedproxmox.storage.usedStorage space used
Storage Availableproxmox.storage.availStorage space available
Storage Used %proxmox.storage.used_pctPercentage of storage capacity consumed (used / total x 100). Only reported when total > 0.
Storage Enabledproxmox.storage.enabled1 if the storage is enabled
Storage Activeproxmox.storage.active1 if the storage is currently active
Storage Backup Countproxmox.storage.backup_countBackup archives held on this storage

FAQ

A virtual machine has no IP address. Why?

The extension reads virtual machine IP addresses from the QEMU guest agent. If the guest agent isn't installed and running inside the virtual machine, the IP dimension is empty for that virtual machine; all other metrics are unaffected. Install and start qemu-guest-agent inside the virtual machine to populate it.

No high-availability metrics are reported.

High-availability metrics require an HA-enabled Proxmox cluster. On clusters without HA configured, the corresponding API returns an error, which the extension logs and skips. Other metrics are unaffected.

No Ceph metrics are reported.

The Ceph feature set collects data only when Ceph is deployed on the cluster, and it's opt-in. Enable the Ceph feature set in the monitoring configuration on a cluster that runs Ceph.

Hub

Explore in Dynatrace Hub

Monitor Proxmox VE clusters, nodes, QEMU virtual machines, LXC containers, storage, and Ceph with metrics, topology, dashboards, and alerts in Dynatrace.

Related tags
VirtualizationPythonHypervisorProxmoxInfrastructure Observability