Prometheus Exporter
PegaProx now exposes its internal metrics in OpenMetrics / Prometheus exposition format at GET /api/metrics. Drop-in for Prometheus, VictoriaMetrics, Grafana Agent, OpenTelemetry collectors and similar scrapers.
Auth
The endpoint is gated by an API token (created via Settings → API Tokens). Either:
Authorization: Bearer <token>(recommended for Prometheus 2.26+)- Basic auth: any username, token as the password
- Or, if explicitly enabled in Settings → Compliance → Allow unauthenticated /api/metrics, no auth (only for trusted scrape networks)
From 1.3 the token does not have to be an administrator's: a token whose role holds the metrics.view permission may scrape too (#818). The exporter is not tenant-scoped, so give metrics.view only to monitoring accounts that may see the whole installation.
Added in 1.3
| Metric | Type | Labels | Meaning |
|---|---|---|---|
pegaprox_scrape_timestamp_seconds |
gauge | - | Unix time of this scrape |
pegaprox_cluster_source_up |
gauge | cluster_id, cluster, source |
1 if the last read of a source behind these metrics (storage, replication, backups) answered in full |
pegaprox_storage_active |
gauge | cluster_id, cluster, node, storage |
1 if the storage is active (a shared one: on at least one node) |
pegaprox_storage_used_bytes |
gauge | cluster_id, cluster, node, storage |
Bytes used on an active storage |
pegaprox_storage_total_bytes |
gauge | cluster_id, cluster, node, storage |
Size of an active storage |
pegaprox_storage_inactive_nodes |
gauge | cluster_id, cluster, node, storage |
Nodes that list a shared storage without having it active |
pegaprox_replication_enabled |
gauge | cluster_id, cluster, job, vmid, node, target |
1 if the replication job is enabled |
pegaprox_replication_failed |
gauge | cluster_id, cluster, job, vmid, node, target |
1 if the last run of the job failed |
pegaprox_replication_fail_count |
gauge | cluster_id, cluster, job, vmid, node, target |
Failed runs in a row |
pegaprox_replication_last_sync_timestamp_seconds |
gauge | cluster_id, cluster, job, vmid, node, target |
Unix time of the last successful sync |
pegaprox_replication_last_sync_age_seconds |
gauge | cluster_id, cluster, job, vmid, node, target |
Seconds since the last successful sync |
pegaprox_guest_last_backup_timestamp_seconds |
gauge | cluster_id, vmid, type and more |
Unix time of the newest backup on a linked PBS or a backup storage (0 if none) |
pegaprox_guest_last_backup_age_seconds |
gauge | cluster_id, vmid, type and more |
Seconds since the newest backup |
pegaprox_guest_disk_read_bytes_total |
counter | guest labels | Guest bytes read from disk |
pegaprox_guest_disk_write_bytes_total |
counter | guest labels | Guest bytes written to disk |
Storage is read once per cluster (shared storage reported once). Replication and backup ages are read in the background, so a scrape never waits for them; a job or guest whose source could not be read completely is left out rather than reported as fine, and pegaprox_cluster_source_up shows it.
Metrics Exposed
| Metric | Type | Labels | Meaning |
|---|---|---|---|
pegaprox_info |
gauge | version, build |
Build info (always 1) |
pegaprox_cluster_connected |
gauge | cluster_id, cluster |
1 if reachable |
pegaprox_cluster_quorum_held |
gauge | cluster_id, cluster |
Quorum held |
pegaprox_cluster_nodes_total |
gauge | cluster_id, cluster |
Node count |
pegaprox_cluster_nodes_online |
gauge | cluster_id, cluster |
Online node count |
pegaprox_cluster_vms_total |
gauge | cluster_id, cluster |
VM + CT count |
pegaprox_cluster_vms_running |
gauge | cluster_id, cluster |
Running VM + CT count |
pegaprox_node_online |
gauge | cluster_id, cluster, node |
Per-node reachability |
pegaprox_node_cpu_percent |
gauge | cluster_id, cluster, node |
CPU utilization |
pegaprox_node_mem_percent |
gauge | cluster_id, cluster, node |
Memory utilization |
pegaprox_node_uptime_seconds |
gauge | cluster_id, cluster, node |
Node uptime |
pegaprox_node_apt_updates_available |
gauge | cluster_id, cluster, node |
Pending APT updates |
pegaprox_guest_running |
gauge | cluster_id, cluster, node, type, vmid, name |
1 if the guest is running |
pegaprox_guest_cpu_percent |
gauge | cluster_id, cluster, node, type, vmid, name |
Guest CPU utilization |
pegaprox_guest_mem_used_bytes |
gauge | cluster_id, cluster, node, type, vmid, name |
Guest memory used |
pegaprox_guest_mem_total_bytes |
gauge | cluster_id, cluster, node, type, vmid, name |
Guest memory total |
pegaprox_guest_mem_percent |
gauge | cluster_id, cluster, node, type, vmid, name |
Guest memory utilization |
pegaprox_guest_disk_used_bytes |
gauge | cluster_id, cluster, node, type, vmid, name |
Guest disk used |
pegaprox_guest_disk_total_bytes |
gauge | cluster_id, cluster, node, type, vmid, name |
Guest disk total |
pegaprox_guest_disk_percent |
gauge | cluster_id, cluster, node, type, vmid, name |
Guest disk utilization |
pegaprox_guest_uptime_seconds |
gauge | cluster_id, cluster, node, type, vmid, name |
Guest uptime |
pegaprox_guest_network_receive_bytes_total |
counter | cluster_id, cluster, node, type, vmid, name |
Guest bytes received |
pegaprox_guest_network_transmit_bytes_total |
counter | cluster_id, cluster, node, type, vmid, name |
Guest bytes transmitted |
pegaprox_sessions_active |
gauge | - | Active sessions |
pegaprox_users_total |
gauge | - | Total users |
pegaprox_users_enabled |
gauge | - | Enabled users |
pegaprox_users_logged_in |
gauge | - | Currently logged-in users |
pegaprox_pbs_connected |
gauge | pbs_id, pbs |
1 if the PBS is reachable |
pegaprox_esxi_connected |
gauge | esxi_id, host |
1 if the ESXi source is reachable |
pegaprox_ceph_health_status |
gauge | cluster_id, cluster |
0 = OK, 1 = WARN, 2 = ERR, 3 = unknown |
pegaprox_ceph_osd_up |
gauge | cluster_id, cluster |
Number of Ceph OSDs currently up |
pegaprox_ceph_osd_in |
gauge | cluster_id, cluster |
Number of Ceph OSDs currently in |
Ceph metrics
The Prometheus exporter now emits Ceph health/OSD metrics, sourced from the cluster Ceph health summary.
| Metric | Type | Meaning |
|---|---|---|
pegaprox_ceph_health_status |
gauge | 0 = OK, 1 = WARN, 2 = ERR, 3 = unknown |
pegaprox_ceph_osd_up |
gauge | Number of Ceph OSDs currently up |
pegaprox_ceph_osd_in |
gauge | Number of Ceph OSDs currently in |
Prometheus Scrape Config
scrape_configs:
- job_name: pegaprox
metrics_path: /api/metrics
scheme: https
bearer_token: 'pegaprox_api_token_here'
tls_config:
insecure_skip_verify: false
static_configs:
- targets: ['pegaprox.example.com:5000']
Grafana
A reference Grafana dashboard JSON is in the repo at misc/grafana/pegaprox-overview.json. Imports cleanly into Grafana 10+.