Veeam Backup Jobs for Zabbix

This repository contains PowerShell scripts for Veeam Backup & Replication:

  • Monitor-VeeamJobs.ps1 collects job metrics for Zabbix.
  • NotifyOfDisabledJobs.ps1 sends an email when disabled jobs are detected.
  • zabbix-templete-veeam-jobs.xml imports the Zabbix 7.0 template.

Zabbix collector output

Monitor-VeeamJobs.ps1 prints one compressed JSON object by default:

{
  "total": 10,
  "disabled": 1,
  "successful": 7,
  "error": 1,
  "warning": 1,
  "disabled_names": "Disabled job",
  "disabled_excluded_names": "Policy disabled by design",
  "error_names": "Failed job",
  "warning_names": "Warning job",
  "jobs_table": "Name | Enabled | Last run | Next run | Result | Restore points\n...",
  "jobs_lld": {
    "data": [
      {
        "{#VEEAMJOBKEY}": "RGFpbHkgYmFja3Vw",
        "{#VEEAMJOBNAME}": "Daily backup"
      }
    ]
  },
  "jobs": [
    {
      "key": "RGFpbHkgYmFja3Vw",
      "name": "Daily backup",
      "enabled": true,
      "enabled_numeric": 1,
      "enabled_text": "yes",
      "last_run": "2026-07-16 01:00:00",
      "next_run": "2026-07-17 01:00:00",
      "last_result": "Success",
      "last_state": "Stopped",
      "result": "Success",
      "restore_points": 14,
      "restore_points_text": "14"
    }
  ]
}

Restore point counting is best effort. The script uses Get-VBRBackup and Get-VBRRestorePoint when both cmdlets are available; if Veeam cannot map a job to backups in the current environment, the job remains visible and its restore point count is shown as -.

Discovered per-job items

The template uses a dependent low-level discovery rule:

veeam.jobs.discovery

It creates one set of discovered items per Veeam job:

veeam.job.enabled[{#VEEAMJOBKEY}]
veeam.job.last_run[{#VEEAMJOBKEY}]
veeam.job.next_run[{#VEEAMJOBKEY}]
veeam.job.result[{#VEEAMJOBKEY}]
veeam.job.restore_points[{#VEEAMJOBKEY}]

{#VEEAMJOBNAME} is stored as a tag named veeam_job, so Zabbix views and dashboard widgets can group or filter the discovered items by job name. The legacy veeam.jobs.table item remains available as a quick text overview, but the discovered items are the preferred way to build a dashboard.

Zabbix dashboard idea

Create a dashboard named Veeam Jobs for hosts linked to the Veeam Backup Jobs template.

Suggested widgets:

Area Widget Items
Top row Item value veeam.jobs.total
Top row Item value veeam.jobs.successful
Top row Item value veeam.jobs.disabled
Top row Item value veeam.jobs.error
Top row Item value veeam.jobs.warning
Middle Top hosts or item list discovered veeam.job.* items
Bottom left Item value or item list veeam.jobs.error.names
Bottom center Item value or item list veeam.jobs.warning.names
Bottom right Item value or item list veeam.jobs.disabled.names

Use a red threshold for veeam.jobs.error, yellow for veeam.jobs.warning, and keep veeam.jobs.disabled aligned with the existing exclusion policy. The template intentionally keeps veeam.jobs.disabled.excluded.names, because some disabled policies are expected.

Email notification script

NotifyOfDisabledJobs.ps1 sends an email if one or more Veeam jobs are disabled. To exclude expected disabled jobs, add keywords to:

C:\Scripts\Veeam\NotifyOfDisabledJobs_EXCLUSIONS.IN

Example exclusions:

Backup_FILE01
Backup_FILE47
Replication_FILE

Example batch launch:

powershell.exe c:\scripts\Veeam\NotifyOfDisabledJobs.ps1

The original workflow runs this check every four hours, so intentionally disabled jobs can be excluded while unexpected disabled jobs still raise a notification.

Description
No description provided
Readme 80 KiB
Languages
PowerShell 100%