Skip to content

Proxmox Datacenter Manager

The console that federates several Proxmox VE clusters and Proxmox Backup Server instances: which instances it reaches, the whole estate at a glance, the tasks that failed anywhere, and the console’s own health.

From the DumbMonit server (or its relay agent) to the device:

PortProtocolPurpose
8443TCPAPI (HTTPS, default)

One monitor for the estate, or one monitor per cluster?

Section titled “One monitor for the estate, or one monitor per cluster?”

A Datacenter Manager monitor is not a replacement for Proxmox VE and Proxmox Backup Server monitors. It answers a different question.

Datacenter Manager monitorOne monitor per cluster and per backup server
Monitors to createoneone per cluster, one per backup server
Credentials to manageone token, on the consoleone token per instance
Load on each clusternone of ours: we read the console’s own cacheone probe per interval, per cluster
What you getreachability, version, guest and node counts, CPU, memory and storage totals, failed tasksall of that plus guests one by one, snapshots, backup jobs, HA, Ceph, replication, disks and SMART, ZFS pools, the 30-day backup calendar
What you cannot getper-guest series, per-datastore detail, disks, snapshots, task logsa single estate-wide total
Headline failurethe console cannot reach an instancethe cluster does not answer us

Our recommendation. Add the Datacenter Manager monitor when you already run a console and want one page that says whether the estate is whole — it is the cheapest way to notice that a remote site dropped off, and it costs the clusters nothing. Add a dedicated monitor for every cluster and backup server you actually operate: that is where the depth is, and it is what tells you which VM stopped or which backup failed. The two overlap without conflicting; a failed backup then raises one alert from the PBS monitor (with the task log) and one from the console (naming the instance). Silence the console’s task rule if you find that redundant, or scope it to the instances you have no dedicated monitor for.

If you do not run a console at all, do not install one just for monitoring: dedicated monitors see strictly more.

Beyond the generic charts, a Datacenter Manager monitor shows three panels, read from what the probe stored — opening the page queries neither the console nor the clusters it manages:

  • Federated instances — a strip of estate totals (instances, nodes online, guests running and stopped, cores, memory, storage), then one row per federated instance. Instances the console cannot reach sort first, then those with failed tasks, then those behind on version. Each row gives the product (Proxmox VE or Backup Server), the version, node and guest counts, memory and storage usage, the subscription state, the configured address, when the console last collected from it — and, when it failed, the message the console itself received. That message is the only thing that explains the outage, so it is shown verbatim.
  • Failures — every task that failed across the estate in the last 14 days, newest first, with the instance it ran on, the kind of task, when it started, how long it took and the error message. The task log itself stays on the instance: open it there, or add that cluster as its own monitor, where Show log fetches it.
  • Console host — the machine that runs the console: CPU, memory, root filesystem, uptime and kernel, its certificates with the days left before expiry, the packages waiting for an update, and the subscription status of the managed nodes. The whole panel is optional: a token without Sys.Audit reads none of it and the panel says so, rather than showing zeros.

Task history is kept in SQLite (pdm_task_history, 19 days, at most 5000 tasks per monitor) so the failure list survives restarts even though each probe only looks at the task window.

All metrics are prefixed dumbmonit_pdm_.

FamilyMetricsLabels
Estateremotes_total, remotes_failed, nodes_online, nodes_offline, cpu_used_cores, cpu_total_cores, memory_used_bytes, memory_total_bytes, memory_used_percent, storage_used_bytes, storage_total_bytes, storage_used_percent, datastores_total
Estate guestsguests_running, guests_stoppedguest_type (qemu, lxc)
Instancesremote_reachable (1 the console got an answer, 0 it did not), remote_version_info (presence series, label version), remote_version_behind, remote_nodes_online, remote_nodes_offline, remote_guests_running, remote_guests_stopped, remote_cpu_used_cores, remote_cpu_total_cores, remote_cpu_used_percent, remote_memory_used_bytes, remote_memory_total_bytes, remote_memory_used_percent, remote_storage_used_bytes, remote_storage_total_bytes, remote_storage_used_percent, remote_datastores, remote_subscription_active, remote_updates_pending, remote_last_collection_age_seconds, remote_tasks_failedremote, type (pve, pbs)
Tasks in the windowtasks_total, tasks_failed, tasks_running
Console hostnode_cpu_percent, node_cpu_count, node_iowait_percent, node_load1, node_memory_used_bytes, node_memory_total_bytes, node_memory_used_percent, node_swap_used_bytes, node_swap_total_bytes, node_rootfs_used_bytes, node_rootfs_total_bytes, node_rootfs_percent, node_uptime_seconds, node_kernel_info, node_updates_pending, version_info
Console certificatesnode_certificate_expiry_days (negative once expired)file (proxy.pem)
Subscriptionsubscription_active (label status), subscription_active_nodes, subscription_total_nodes
Skipped optionsfeature_skipped_info: 1 while an optional call is refused (403) for lack of a privilege, absent otherwise. The monitor page shows it as a discreet note naming the privilege; it is neither a probe error nor an alertfeature, privilege
Collectionup, scrape_errors, scrape_duration_seconds

A task that ends in WARNINGS: n counts as successful. Only GET /version failing condemns the whole probe; any other call failing is counted in scrape_errors, and an instance the console cannot reach is a measurement (remote_reachable = 0), not a scrape error.

remote_version_behind compares the federated instances with each other, product by product: it is 1 when another Proxmox VE cluster — or another backup server — in the same estate runs a newer version. It is not a comparison against what Proxmox publishes; a probe has no business reaching out to the internet. The series only exists for an instance whose version was read, so an unreachable instance never passes for up to date.

Storage totals count each storage name once per instance: a storage shared by five nodes of a cluster is counted once, not five times.

Built-in rules that apply: Monitor unreachable, Federated instance unreachable, Federated instance behind, Task failed on a federated instance, Datacenter console disk almost full, Datacenter console certificate expiring, Datacenter console updates pending. Notifications name the instance concerned.

What to prepare in Proxmox Datacenter Manager

Section titled “What to prepare in Proxmox Datacenter Manager”
  1. Open Configuration → Access Control → Users → Add, enter the user name dumbmonit with the realm pdm and no password, then click Add.

    dumbmonit@pdm
  2. Open Configuration → Access Control → API Tokens → Add, pick that user and name the token monitor. Copy the Secret now, it is shown only once.

    dumbmonit@pdm!monitor
  3. Open Configuration → Access Control → Permissions → Add → User Permission: path /, user dumbmonit@pdm, role Auditor.

  4. Add a second permission with Add → API Token Permission: path /, token dumbmonit@pdm!monitor, role Auditor. A token has its own permissions, so both are needed.

  5. In DumbMonit, enter the console address (for example dc.lan:8443), the Token ID and the Secret.

  • Auditor on /: Read-only: instances, tasks, console health
  • Resource.Modify on /resource (optional): Only for the update summary of the instances

Vendor documentation: Proxmox Datacenter Manager access control

Do not reuse the account you log in with: a leaked token would then control every cluster the console federates at once. The Auditor role can only read.

  • Auditor on / (the top of the tree, so the whole estate) carries System.Audit, Resource.Audit and Access.Audit, and can change nothing.
  • A token never has more rights than its user, and its permissions are computed from ACL entries carrying its own id: the permission is therefore granted twice, to the user and to the token.
  • Two items need more than Auditor and are simply skipped without it: the per-instance metric collection status, and the update summary of the federated instances.

Prefer the command line? proxmox-datacenter-manager-admin manages remotes, not users; create the account, the token and the two permissions in the web interface.

CredentialFields
API token (recommended)Token ID: user, realm and token name as the console shows them, dumbmonit@pdm!monitor. Secret: the UUID shown once when the token was created. DumbMonit sends them as the PDMAPIToken=user@pdm!name:secret header the console expects.

There is no username / password option, and that is deliberate: since its first release the console returns its session ticket only in an HttpOnly cookie — the JSON body carries an unusable ticket-info. A login would buy nothing over a token while opening a logged session on every probe. Tokens are what Proxmox recommends for automation anyway.

Rights, read-only. Simplest and sufficient: the built-in Auditor role on /, granted to the user and to the token. Per endpoint:

EndpointNeeds
GET /versionany authenticated user
GET /remotes/remotereturns the instances the caller may audit
GET /remotes/remote/{id}/versionResource.Audit on /resource/{id}
GET /resources/status, GET /resources/listResource.Audit on /resource
GET /resources/subscriptionResource.Audit on /resource
GET /remotes/tasks/listResource.Audit on /resource/{remote}, per instance
GET /nodes/{node}/statusSystem.Audit on /system/status
GET /nodes/{node}/certificates/info, GET /nodes/{node}/subscriptionany authenticated user
GET /nodes/{node}/apt/updateSystem.Audit; a 403 is tolerated: no node_updates_pending series, no scrape error
GET /remotes/metric-collection/statusmore than Auditor; a 403 is tolerated: no remote_last_collection_age_seconds series, no scrape error
GET /remotes/updates/summaryResource.Modify — a write privilege. Off by default (remote_updates) for that reason

Note that the console redacts the access tokens it holds for its instances (GET /remotes/remote returns an empty token), and DumbMonit never reads that field anyway: no instance secret ever passes through the collector, the stored view or the API.

Address: 10.0.0.40, dc.lan, dc.lan:8443, [fd00::2] or a full URL. The https scheme and port 8443 are added if missing.

KeyLabelDefaultHelp
portAPI port8443Used if the address does not give a port.
insecure_tlsAccept an unverifiable certificatefalseProxmox Datacenter Manager ships with a self-signed certificate by default: enable this if the connection is refused for that reason.
request_timeout_secondsTimeout per request (seconds)20Time allowed for each API call, from 1 to 120. The console relays calls to every federated instance, so one slow site holds the whole answer.
nodeConsole node namelocalhostName of the node that runs the console. A Datacenter Manager has a single node and calls it “localhost”.
task_lookback_hoursTask window (hours)24Older tasks are not counted among the failures, from 1 to 8760.
max_age_secondsAccepted cache age (seconds)60How stale the console’s own inventory may be before it queries the federated instances again, from 0 to 3600. Zero asks for fresh data on every probe, which puts every cluster back on the line.
remotesMonitored instances(empty)Names of the federated instances to monitor, separated by commas. Empty: every instance.
max_remotesInstance version limit100Maximum number of instances asked for their version on each probe, from 1 to 1000.
versionsRead each instance versiontrueOne call per federated instance, to report its version and to flag the ones left behind their peers. An instance that does not answer counts as unreachable.
tasksWatch tasks across instancestrueReads the task list of every federated instance to report the failures.
node_statusWatch the console hosttrueReads the CPU, memory, root filesystem, uptime, certificates and subscription of the machine running the console.
updatesCount pending updatestrueLists the packages waiting for an update on the console itself.
remote_updatesCount updates on each instancefalseReads the console’s update summary for the federated instances. Off by default: the console guards that path with Resource.Modify, a write privilege a monitoring account has no reason to hold.

max_age_seconds is the one worth understanding. The console keeps its own inventory, refreshed by its own collection loop. Asking for fresh data on every probe makes the console call every cluster again, on top of its normal rhythm — exactly the load a single console monitor is supposed to avoid. Sixty seconds is still fresher than the default probe interval.

SymptomLikely cause
Certificate errorSelf-signed certificate: install a trusted one (ACME is built into the console) or enable insecure_tls.
Authentication errorSecret pasted into Token ID (or the other way round), or the permission was granted to the user but not to the token — a token never has more rights than its user, and the two ACLs are separate entries.
Every instance shows as unreachable, but the console’s own page is fineThe token has Auditor on the user but not on the token, or only on /system: Resource.Audit on /resource is what lets the console answer for its instances.
An instance is unreachable and the message mentions a fingerprintThe console verifies the certificate of each instance it manages; fix it in the console (Remotes → the instance), not here.
No remote_last_collection_age_seconds seriesGET /remotes/metric-collection/status needs more than Auditor and is skipped silently. Nothing else is affected.
No remote_updates_pending seriesremote_updates is off by default because that path needs Resource.Modify. Turn it on only if you are willing to grant a write privilege.
No console host panelThe token lacks System.Audit on /system/status, or node_status is off.
“Federated instance behind” never firesIt compares instances of the same product with each other. A console that federates a single Proxmox VE cluster has nothing to compare it to.
Estate totals are all em dashesThe console answered but counted nothing — usually because every instance is unreachable. The instance rows say why.