This reverts commit 6571f14d40.
Veeam Backup Jobs for Zabbix
This repository contains PowerShell scripts for Veeam Backup & Replication:
Monitor-VeeamJobs.ps1collects job metrics for Zabbix.NotifyOfDisabledJobs.ps1sends an email when disabled jobs are detected.zabbix-templete-veeam-jobs.xmlimports 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.