Skip to content

Releases: jorgedlcruz/veeam-node-exporter

v0.2.1

Choose a tag to compare

@jorgedlcruz jorgedlcruz released this 07 Oct 14:21

Veeam ONE SQL Exporter v0.2.0 — Release Notes

Date: 2025-10-07

Highlights

  • Changed the appsettings.json SQL connection string to 127.0.0.1 so it works out of the box when running the .exe on the same Veeam ONE Server, in case it has SQL installed, and Windows Credentials enabled

v0.2.0

Choose a tag to compare

@jorgedlcruz jorgedlcruz released this 05 Oct 19:53

Veeam ONE SQL Exporter v0.2.0 — Release Notes

Date: 2025-10-05

Highlights

  • Added broad coverage of Veeam counters across servers, repositories, proxies, CDP, VBM365, object storage, and Veeam ONE internals.
  • Unified labels: every series has host and role. Optional iface/disk appear where applicable.
  • Correct unit scaling: values are divided by monitor.PerfCounterInfo.divider when nonzero (fixes % and rate magnitudes).
  • Configurable metric name prefix via MetricPrefix in appsettings.json (default veeam_server).
  • Exporter health metrics: <prefix>_up, <prefix>_last_scrape_success_seconds, <prefix>_last_scrape_error_info.
  • Background polling cadence via PollSeconds (default 60s).

Important changes (breaking)

  • Standardized labels. Old series without role or with inconsistent instance labels are deprecated.
  • Network/disk families split by direction and totals (e.g., net_bytes_sent_per_sec, net_bytes_received_per_sec, net_bytes_total_per_sec).
  • Value scaling now honors PerfCounterInfo.divider. Dashboards/alerts that assumed raw values may need updates.
  • Metrics include explicit sample timestamps from the DB. If you prefer Prometheus scrape time, remove timestamps in the writer.

Data resolution & rollups

Veeam ONE stores metrics at multiple intervals. The exporter prefers the finest available per counter:

  1. rt_interval (often 60s)
  2. level2_interval (often 300s)
  3. level3_interval (e.g., 7200s)
  4. level4_interval (e.g., 86400s)

Some environments do not persist 1-minute rows; in that case you will naturally see 5-minute steps. This is expected behavior, not an exporter issue.

New and updated metric families

All metric names are prefixed by your configured MetricPrefix (examples assume veeam_server).

Core host utilization

  • veeam_server_cpu_usage_percent{host,role}
  • veeam_server_memory_available_bytes{host,role}
  • veeam_server_memory_used_bytes{host,role}
  • veeam_server_memory_usage_percent{host,role} (when available)

Disk IO

  • veeam_server_disk_bytes_per_sec{host,role,disk}
  • veeam_server_disk_read_bytes_per_sec{host,role,disk}
  • veeam_server_disk_write_bytes_per_sec{host,role,disk}

Network IO

  • veeam_server_net_bytes_sent_per_sec{host,role,iface}
  • veeam_server_net_bytes_received_per_sec{host,role,iface}
  • veeam_server_net_bytes_total_per_sec{host,role,iface}

Repository capacity and slots

  • veeam_server_repository_used_bytes{host,role}
  • veeam_server_repository_capacity_bytes{host,role}
  • veeam_server_repository_free_bytes{host,role}
  • veeam_server_repository_file_backups_bytes{host,role}
  • veeam_server_repository_image_backups_bytes{host,role}
  • veeam_server_repository_app_backups_bytes{host,role}
  • veeam_server_repository_slots_used{host,role}
  • veeam_server_repository_slots_max{host,role}

Proxy slots and CDP cache

  • veeam_server_proxy_slots_used{host,role}
  • veeam_server_proxy_slots_max{host,role}
  • veeam_server_cdp_proxy_cache_used_bytes{host,role}
  • veeam_server_cdp_proxy_cache_capacity_bytes{host,role}
  • veeam_server_cdp_proxy_cache_used_percent{host,role}

CDP service level

  • veeam_server_cdp_sla_percent{host,role}
  • veeam_server_cdp_max_delay_ms{host,role}

VBM365 server and proxy

  • veeam_server_cpu_usage_percent{host,role}
  • veeam_server_memory_available_bytes{host,role}
  • veeam_server_memory_used_bytes{host,role}
  • veeam_server_memory_usage_percent{host,role} (when available)
  • veeam_server_disk_read_bytes_per_sec{host,role,disk}
  • veeam_server_disk_write_bytes_per_sec{host,role,disk}
  • veeam_server_disk_bytes_per_sec{host,role,disk}
  • veeam_server_net_bytes_total_per_sec{host,role,iface}
  • veeam_server_net_bytes_received_per_sec{host,role,iface}
  • veeam_server_net_bytes_sent_per_sec{host,role,iface}

VBM365 repository and object storage

  • veeam_server_repository_used_bytes{host,role}
  • veeam_server_repository_free_bytes{host,role}
  • veeam_server_object_storage_used_bytes{host,role}
  • veeam_server_object_storage_free_bytes{host,role}

Archive and external repositories

  • veeam_server_archiverep_used_bytes{host,role}
  • veeam_server_archiverep_capacity_bytes{host,role}
  • veeam_server_externalrep_used_bytes{host,role}

Veeam ONE server internals

  • veeam_server_veeam_one_server_cpu_usage_percent{host,role}
  • veeam_server_veeam_one_server_memory_usage_percent{host,role}
  • veeam_server_veeam_one_server_memory_pressure_percent{host,role}

Labels

  • host is resolved from monitor.Entity.host_name (fallback: monitor.Entity.name).
  • role is derived from the string_id family (serv, em, rep, repository, prx, wac, tapeprx, archiverep, externalrep, vbm_srv, vbm_prx, vbm_rep, vbm_objrep, veeam_srv).
  • Optional iface for network, disk for disk.

Configuration

appsettings.json

{
  "Exporter": {
    "ListenUrl": "http://127.0.0.1:9108/",
    "PollSeconds": 60,
    "LookbackMinutes": 65,
    "SqlConnectionString": "Server=SQLHOST;Database=VeeamOne;Trusted_Connection=True;",
    "MetricPrefix": "veeam_server"
  }
}

Prometheus

scrape_configs:
  - job_name: 'veeam-one-sql-exporter'
    static_configs: [{ targets: ['exporter-host:9108'] }]
    scrape_interval: 60s
    honor_labels: true

Endpoints

  • GET /metrics — last successful scrape in Prometheus text format.
  • GET /debug — exporter status fields (useful for quick checks).

SQL mapping

The exporter uses a metric_map CTE to map PerfCounterInfo.string_id → metric keys and instance labels. Values are scaled by PerfCounterInfo.divider. For each (entity, instance, counter) the newest sample is chosen, preferring rt_interval over rollups.

Upgrade notes

  • Dashboards that assumed raw values or different labels should be updated (see Important changes).
  • Re-evaluate alert thresholds for repository capacity and CDP delay after scaling change.
  • If you used legacy names without role, update queries to include role.

Compatibility

  • Veeam ONE DB with monitor.PerfSample, monitor.PerfInstance, monitor.PerfCounterInfo, and monitor.Entity (v12+ typical).
  • SQL Server with SYSUTCDATETIME().

Security & operations

  • On Windows, the HTTP listener requires URL ACL:
    netsh http add urlacl url=http://127.0.0.1:9108/ user=Everyone
  • Consider running the exporter as a service and binding to localhost unless remote scraping is required.

Troubleshooting

  • /debug should show LAST_SUCCESS_UTC advancing every PollSeconds.
  • If your graphs step every 5 minutes, your DB likely persists 300-second rollups for that counter; the exporter will use the best available interval automatically.

Sample series

veeam_server_cpu_usage_percent{host="vbr01",role="serv"} 12.5 1728130200000
veeam_server_net_bytes_sent_per_sec{host="vbr01",role="serv",iface="Intel(R) I219-LM"} 84532 1728130200000
veeam_server_repository_capacity_bytes{host="repo01",role="repository"} 5497558138880 1728130200000
veeam_server_cdp_max_delay_ms{host="vbr01",role="serv"} 1200 1728130200000

v0.1.2

Choose a tag to compare

@jorgedlcruz jorgedlcruz released this 02 Oct 15:22

Unofficial Veeam ONE Node Exporter that exposes Veeam Backup Servers Performance counters