Monitoring Proxmox VE

Node64 monitors Proxmox VE systems – a single node or a whole cluster – read-only via the Proxmox API: nodes, VMs and containers, crashes, restarts and thresholds for CPU, RAM and disk. Node64 never starts, stops or changes anything in Proxmox.

Overview

Monitoring is part of Health checks and lives under Health checks → Proxmox VE. It only runs while the Health checks module is switched on.

  • State per guest: running, backup, locked (migration, snapshot …), paused, suspended, stopped, crashed (via qmpstatus), unknown.
  • CPU, RAM, disk, network and uptime per node and guest, graphs for 1 h, 24 h, 7 and 30 days.
  • Rules with inheritance system → node → guest and alerts through your existing notification channels.
  • You can keep single guests or nodes as a regular check – with status pages, uptime bars and sync with ipv64.
Data stays on the node

Measurements, history, graphs and Prometheus values stay local. Only the state of guests you keep “as a check” goes to ipv64 – like any other health check.

Setup

1. Create a read-only token in Proxmox

Most common mistake: only the node, no VMs and containers

If Node64 shows only the node but no guests, and the system page shows the yellow notice “The token lacks read permissions”, the token was created with privilege separation. That is the default – also when creating it in the Proxmox UI and also for root@pam. Such a token has no permissions of its own, not even root's.

Fix: give the token and its user the PVEAuditor role on / – with privilege separation only what both may do counts (adjust the IDs):

bash
pveum acl modify / --users '<user@realm>' --roles PVEAuditor
pveum acl modify / --tokens '<user@realm!token>' --roles PVEAuditor

Or in the UI: Datacenter › Permissions › Add › API Token Permission – path /, select the token, role PVEAuditor, tick Propagate. The guests appear within 30 seconds. PVEAuditor can only read – Node64 cannot start, stop or change anything with it.

If only the Sys.Audit permission on / is missing, a cluster appears as “Cluster – quorum unknown”: cluster name, quorum and node state are missing. Check the token's effective permissions on a Proxmox node with pveum user token permissions <user> <token> --path / – Sys.Audit has to be included.

Run as root on a node, for example under Datacenter → Node → Shell:

bash
pveum user add node64@pve
pveum aclmod / -user node64@pve -role PVEAuditor
pveum user token add node64@pve monitor --privsep 0

Proxmox shows the secret only once – copy it right away. The token ID is then node64@pve!monitor.

With privilege separation (--privsep 1, the default in the Proxmox UI) the token has no permissions of its own, even if the user does – and only the intersection of user and token permissions applies. In that case the token itself needs the role, in addition to its user's (already set above):

bash
pveum user token add node64@pve monitor --privsep 1
pveum aclmod / -token 'node64@pve!monitor' -role PVEAuditor

Newer versions also accept pveum acl modify / --tokens 'node64@pve!monitor' --roles PVEAuditor. The PVEAuditor role on / covers everything Node64 reads. If the token sees no guests, Test connection warns you; the notice on the system page shows the matching commands for user and token.

2. Add a system

  1. Address(es)
    https://<node>:8006 – one is enough. In a cluster Node64 learns the other nodes itself and falls back to them if one fails. Additional addresses (one per line) are fixed fallbacks.
  2. Token ID and secret
    The secret is stored encrypted on the node and never shown again. When editing, an empty field keeps the stored secret. The stored secret only applies to the same addresses and the same pin – if you change the target, enter the secret again.
  3. Test connection
    Shows version, cluster, nodes, number of guests and the certificate's SHA-256 fingerprint. For self-signed certificates (the Proxmox default) compare it in Proxmox under Node → System → Certificates and confirm Fingerprint matches – pin it. With certificates from a known CA, such as Let's Encrypt via ACME, pinning is optional. There is no “skip verification” option. Node64 never sends the token to an unconfirmed certificate: confirm the fingerprint first, then run Test connection again.
  4. Interval
    15–300 seconds, default 30. The cluster status is queried every minute, the qmpstatus of running VMs every 2 minutes.

If the certificate is reissued in Proxmox, the query reports certificate mismatch. Then edit the system, run Test connection and confirm the new fingerprint.

Overview and system

Proxmox VE lists all systems with state (OK, partly impaired, unreachable, error, off), version, cluster and quorum, nodes online, guests running or faulty and the last query. From here you edit, switch and delete systems. Tiles above it show the state across all systems: systems, nodes online, guests running and faulty, CPU and RAM load and the last incident.

A system shows tiles at the top – nodes online with cluster and quorum, guests, running, faulty (clickable as a filter) and CPU, RAM and core load – and below them nodes and guests as a table: name, ID, type (VM or container), node, state including backup, lock and crash, CPU, RAM, disk, network, uptime, CPU history of the last hour and the as a check switch. You can filter by state (including “faulty”), node, type and search by name, ID or tags. The system's rules are listed below.

Templates and guests with the Proxmox tag nomonitor are not monitored. A stopped guest with a hanging lock counts as stopped after 4 hours.

On the dashboard a Proxmox card sums up all systems. A system only counts as faulty there with a problem of its own – unreachable, node offline or quorum lost; faulty guests are counted separately under “guests faulty”.

If a system shows token secret cannot be decrypted or token secret missing, the key for the secret is missing, for example after an import without a password. The system is not queried then – enter the secret again.

Guest and node in detail

The detail page of a guest or node shows current values and graphs for 1 h, 24 h, 7 days and 30 days: CPU with peak, RAM and disk, network in and out, disk read and write. The rules of that level are listed below.

1-minute values are kept for 48 hours, 5-minute values as long as Keep single measurements and hourly values as long as Keep hourly values – the same local settings as for health checks.

Rules and notifications

Rules apply with inheritance system → node → guest; the lower level overrides the upper one. Each row shows what applies without an own value and where it comes from (“default”, “inherited from system”, “inherited from node”).

RuleDefaultMeaning
Crashonqmpstatus internal-error, guest-panicked or io-error – immediately, without delay
Stoppedononly if the guest is expected to run: automatically once it has run; can be fixed per guest
Paused / suspendedonguest paused or suspended
Node offlineonnode offline according to the cluster status; its guests don't alert individually then
System unreachableonno address answers; reported only after the delay, which is also waited out in time
Restartonuptime jumps back although the guest keeps running (notice)
CPU / RAM / disk above90 % 10 min / 95 % 10 min / 90 %above the limit for at least that long; 0 % switches it off. Disk only for containers and VMs with guest agent
Delay2 queriesonly alert once the state lasts that many queries – the same for recovery
Channelsdefault channelswhere alerts go – chosen like in the check form, see below

Channels

At system level you pick specific channels just like for a check; without a selection alerts go to the default channels. Node and guest inherit the selection – shown as “inherited from system” or “inherited from node” – or get their own selection (nothing ticked = default channels). Deleted channels are skipped when sending; if none of the selected ones remain, alerts go to the default channels. For guests kept as a check, outage and recovery use the check's channels; when created, the check takes over the channels from the Proxmox rules.

Mute, quiet hours and maintenance

Mute silences alerts for a system, node or guest. Quiet hours apply to all Proxmox alerts, crashes included: like check alerts they are held back during quiet hours and then sent as one summary – per guest or node with the latest state (still faulty or above the threshold, faulty in between and fine again, restart) and a link to the Proxmox page. During a maintenance window for all checks there are no Proxmox alerts; a window for specific checks applies to guests kept as a check. Proxmox alerts have their own kinds:

KindWhen
proxmox_downsystem unreachable, node offline, guest stopped, paused, suspended or crashed
proxmox_uprecovery, with duration
proxmox_threshold / proxmox_threshold_okthreshold exceeded / back below
proxmox_restartedrestart detected

Reported incidents survive a node restart: no second alert afterwards, just the recovery once everything is fine again.

Keep as a check

The as a check switch (per guest and node) creates a regular health check of type proxmox – name “System – guest”, group “Proxmox VE”, interval as the system. That brings status pages, uptime bars, sync with ipv64 and the check's settings such as channels, reminders and “critical”. The same works under Health checks → New check with the type Proxmox VE (VM, container, node) – see Check from a monitored system. The check does not query Proxmox itself but reads the latest query result:

  • up: running, backup, locked (guest) or online (node)
  • down: pve_stopped, pve_paused, pve_suspended, pve_crashed, pve_offline, pve_unknown, pve_missing (guest no longer exists), pve_unreachable (system unreachable, off or data too old)

Outage and recovery alerts then come only from the check; restarts and thresholds still come from Proxmox VE. Like Docker checks, proxmox checks run only locally on the node that queries the system – not online and not movable to other nodes. Switching the system off pauses its checks; deleting it removes them. If the system is switched off when you enable “as a check”, the check is created paused. There are no duplicate alerts.

API

Under /api/healthchecks/proxmox, authenticated like the rest of the API:

MethodPathPurpose
GET, POST/systemslist with state (without secret) / create; returns Proxmox systems only, with ?kind=docker or ?kind=all also Docker hosts
GET, PUT, DELETE/systems/{id}read / partial update (empty secret keeps it) / delete; changed addresses or pin without a new secret: 422 pve.err.secret_reenter
POST/probetest connection: fingerprint, version, nodes, guests; need_confirm = confirm the fingerprint first
GET/systems/{id}/resourcesnodes and guests of the latest query
GET/systems/{id}/series?key=qemu/101&range=24hhistory for 1h, 24h, 7d, 30d
GET, PUT, DELETE/systems/{id}/settings[?key=…]settings and effective rules / set a level (as_check creates the check; rules.channels: missing = inherit, [] = default channels, otherwise channel IDs; effective value in effective.channels) / reset

Prometheus

Fetched from the node's local Prometheus endpoint at /api/metrics, with an API key like the other metrics (see Prometheus & Grafana):

MetricMeaning
node64_pve_up{system}API reachable (1/0)
node64_pve_error, node64_pve_poll_failures_totallast query failed or not queryable; failures since start
node64_pve_enabled, node64_pve_last_poll_seconds, node64_pve_quorateswitched on, time of the last query, quorum
node64_pve_guests_running, node64_pve_guests_badcount per system
node64_pve_node_up{system,node}, node64_pve_node_{cpu,memory,disk}_ratio, node64_pve_node_uptime_secondsper node
node64_pve_guest_state{system,node,type,vmid,name,state}always 1, state in the label
node64_pve_guest_up, node64_pve_guest_{cpu,memory,disk}_ratio, node64_pve_guest_uptime_secondsper guest {system,type,vmid}, ratios 0..1
node64_pve_guest_net_{in,out}_bytes, node64_pve_guest_disk_{read,write}_bytesnetwork and disk I/O per guest in bytes/s, average since the last query
node64_pve_guest_memory_bytes, node64_pve_guest_cpusRAM in bytes and assigned CPUs per guest

At most 1000 guests in total, names at most 64 characters, no templates. All series also carry the label system_id.

Export and import

The configuration export contains the systems with settings and rules. The token secret is only included in an export with a password, encrypted. Without a password a system is imported switched off and shows “secret missing” until you enter it. “As a check” checks are switched over to the system on the new node. Selected channels are rewritten to the new node's channels like for checks; a channel missing there is dropped – if none remain, the default channels apply. Systems with the same name are matched by their addresses on import.

Something unclear, missing, or a question about Node64? Ask in the official forum v64.tech.

Questions about Node64?
For any questions about the product, use the official forum: setup, troubleshooting, ideas and exchange with the community and the ipv64.net team.
Go to the forum v64.tech