15 KiB
Мониторинг Veeam Backup Jobs в Zabbix 7.0
Репозиторий содержит готовый сборщик состояния заданий Veeam Backup & Replication и шаблон Zabbix 7.0.
Что входит в проект
| Файл | Назначение |
|---|---|
Monitor-VeeamJobs.ps1 |
Основной скрипт для Zabbix. Собирает задания Veeam и отдает JSON. |
zabbix-templete-veeam-jobs.xml |
Шаблон Zabbix 7.0 с item-ами, discovery и триггерами. |
NotifyOfDisabledJobs.ps1 |
Старый отдельный скрипт email-уведомлений о выключенных заданиях. Для Zabbix не нужен. |
Для мониторинга через Zabbix нужен именно:
Monitor-VeeamJobs.ps1
Что собирается
Скрипт собирает:
- общее количество заданий Veeam;
- количество выключенных заданий, с учетом файла исключений;
- количество успешно выполненных заданий;
- количество заданий с ошибкой;
- количество заданий с предупреждением;
- имена выключенных заданий;
- имена выключенных заданий, попавших в исключения;
- имена заданий с ошибками;
- имена заданий с предупреждениями;
- таблицу всех заданий;
- краткую сводку всех заданий для dashboard;
- discovered items по каждому заданию.
По каждому заданию собирается:
- имя;
- включено расписание или нет;
- время последнего запуска;
- время следующего запуска, если Veeam его отдает;
- последний результат;
- состояние последней сессии;
- количество restore points, если Veeam позволяет сопоставить job и backup.
Подсчет restore points работает по принципу best effort. Скрипт использует
Get-VBRBackup и Get-VBRRestorePoint. Если для конкретного типа задания Veeam
не позволяет надежно сопоставить backup с job, задание все равно будет показано,
а restore points будут отображены как -.
Установка на Veeam-сервер
Создай папку для скриптов Zabbix Agent 2, если ее еще нет:
C:\Program Files\Zabbix Agent 2\scripts
Скопируй туда файл:
C:\Program Files\Zabbix Agent 2\scripts\Monitor-VeeamJobs.ps1
Проверь ручной запуск на Veeam-сервере:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\Program Files\Zabbix Agent 2\scripts\Monitor-VeeamJobs.ps1"
В ответ должен прийти JSON, примерно такой:
{
"total": 49,
"disabled": 0,
"successful": 45,
"error": 1,
"warning": 3,
"disabled_names": "-",
"disabled_excluded_names": "D_Migratio_DRP",
"error_names": "Failed job",
"warning_names": "Warning job",
"jobs_table": "Name | Enabled | Last run | Next run | Result | Restore points\n...",
"jobs_summary": "Job | Enabled | Last run | Next run | Result | Restore points\n...",
"jobs_lld": {
"data": [
{
"{#VEEAMJOBKEY}": "dm5hbXp0cjAwNA",
"{#VEEAMJOBNAME}": "vnamztr004"
}
]
},
"jobs": [
{
"key": "dm5hbXp0cjAwNA",
"name": "vnamztr004",
"enabled": true,
"enabled_numeric": 1,
"enabled_text": "yes",
"last_run": "2026-07-16 01:00:00",
"next_run": "-",
"last_result": "Success",
"last_state": "Stopped",
"result": "Success",
"restore_points": 19,
"restore_points_text": "19",
"summary": "Enabled: yes | Last: 2026-07-16 01:00:00 | Next: - | Result: Success | Restore points: 19"
}
]
}
Настройка Zabbix Agent 2
В файл конфигурации агента:
C:\Program Files\Zabbix Agent 2\zabbix_agent2.conf
добавь строку:
UserParameter=veeam.scripts.monitor,powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\Program Files\Zabbix Agent 2\scripts\Monitor-VeeamJobs.ps1"
Для Veeam-сервера обычно нужно увеличить timeout, потому что сбор restore points и последних сессий может занимать больше стандартных 3 секунд:
Timeout=30
Перезапусти агент:
Restart-Service "Zabbix Agent 2"
Проверь выполнение через агент:
"C:\Program Files\Zabbix Agent 2\zabbix_agent2.exe" -t veeam.scripts.monitor
Если команда возвращает JSON, агент настроен правильно.
Импорт шаблона в Zabbix
В Zabbix открой:
Data collection -> Templates -> Import
Импортируй файл:
zabbix-templete-veeam-jobs.xml
При повторном импорте включи обновление существующих объектов, чтобы обновились items, triggers и discovery rule.
После импорта привяжи шаблон:
Veeam Backup Jobs
к host, на котором установлен Zabbix Agent 2 и лежит Monitor-VeeamJobs.ps1.
Основные items
| Item | Key | Описание |
|---|---|---|
| Veeam: Monitor | veeam.scripts.monitor |
Master item. Сырой JSON от скрипта. |
| Veeam: Total jobs | veeam.jobs.total |
Всего заданий Veeam. |
| Veeam: Successful jobs | veeam.jobs.successful |
Задания, последняя сессия которых завершилась успешно. |
| Veeam: Disabled jobs | veeam.jobs.disabled |
Выключенные задания после применения исключений. |
| Veeam: Error jobs | veeam.jobs.error |
Задания с последним результатом Failed. |
| Veeam: Warning jobs | veeam.jobs.warning |
Задания с последним результатом Warning. |
| Veeam: Disabled job names | veeam.jobs.disabled.names |
Имена выключенных заданий после исключений. |
| Veeam: Excluded disabled job names | veeam.jobs.disabled.excluded.names |
Выключенные задания, которые попали в исключения. |
| Veeam: Error job names | veeam.jobs.error.names |
Имена заданий с ошибками. |
| Veeam: Warning job names | veeam.jobs.warning.names |
Имена заданий с предупреждениями. |
| Veeam: Job details table | veeam.jobs.table |
Текстовая таблица всех заданий. |
| Veeam: Jobs summary | veeam.jobs.summary |
Многострочная сводка всех заданий для dashboard. |
Discovered items по каждому заданию
Шаблон содержит low-level discovery rule:
Veeam: Job discovery
key: veeam.jobs.discovery
Она создает items по каждому найденному заданию:
| Prototype | Key |
|---|---|
Veeam job [JOB_NAME]: Enabled |
veeam.job.enabled[{#VEEAMJOBKEY}] |
Veeam job [JOB_NAME]: Last run |
veeam.job.last_run[{#VEEAMJOBKEY}] |
Veeam job [JOB_NAME]: Next run |
veeam.job.next_run[{#VEEAMJOBKEY}] |
Veeam job [JOB_NAME]: Result |
veeam.job.result[{#VEEAMJOBKEY}] |
Veeam job [JOB_NAME]: Restore points |
veeam.job.restore_points[{#VEEAMJOBKEY}] |
Veeam job [JOB_NAME]: Summary |
veeam.job.summary[{#VEEAMJOBKEY}] |
{#VEEAMJOBKEY} - это безопасный ключ, сформированный из имени задания. Он нужен,
чтобы в item key не ломались пробелы, слеши и спецсимволы.
{#VEEAMJOBNAME} сохраняется в имени item-а и в теге:
veeam_job
Исключения для выключенных заданий
Если часть заданий специально выключена, их можно исключить из счетчика
veeam.jobs.disabled.
По умолчанию скрипт ищет файл:
C:\Program Files\Zabbix Agent 2\scripts\NotifyOfDisabledJobs_EXCLUSIONS.IN
Формат файла простой: одна строка - один фрагмент имени задания.
Пример:
D_Migratio_DRP
Test policy
Archive
Если имя выключенного задания содержит один из этих фрагментов, оно попадет в:
veeam.jobs.disabled.excluded.names
и не будет учитываться в:
veeam.jobs.disabled
veeam.jobs.disabled.names
Триггеры
В шаблоне есть триггеры:
| Триггер | Условие | Severity |
|---|---|---|
| Disabled Veeam jobs detected | veeam.jobs.disabled > 0 и есть имена выключенных заданий |
High |
| More than 5 Veeam jobs in error state | veeam.jobs.error > 5 и есть имена заданий с ошибкой |
High |
| Veeam jobs in warning state | veeam.jobs.warning > 0 и есть имена заданий с warning |
Warning |
Логика disabled.excluded.names оставлена специально: она нужна для окружений,
где есть много намеренно выключенных политик.
Dashboard в Zabbix 7.0
Самый надежный вариант для dashboard - использовать агрегированные items.
Рекомендуемая структура:
| Зона | Виджет | Item |
|---|---|---|
| Верхняя строка | Item value | veeam.jobs.total |
| Верхняя строка | Item value | veeam.jobs.successful |
| Верхняя строка | Item value | veeam.jobs.disabled |
| Верхняя строка | Item value | veeam.jobs.error |
| Верхняя строка | Item value | veeam.jobs.warning |
| Центр | Item value или Item history | veeam.jobs.summary |
| Низ | Item value или Item history | veeam.jobs.error.names |
| Низ | Item value или Item history | veeam.jobs.warning.names |
| Низ | Item value или Item history | veeam.jobs.disabled.names |
Для просмотра всех заданий одной строкой на задание используй:
Veeam: Jobs summary
veeam.jobs.summary
Пример значения:
Job | Enabled | Last run | Next run | Result | Restore points
vnamztr004 | yes | 2026-07-16 01:00:00 | - | Success | 19
D_Migratio_DRP | no | - | - | - | -
Discovered items тоже остаются доступными и удобны для Latest data, но для
dashboard в Zabbix 7.0 проще и стабильнее использовать veeam.jobs.summary.
Режим Sender
По умолчанию скрипт работает в режиме Json, который нужен для UserParameter.
Это основной рекомендуемый вариант.
Также есть режим Sender:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\Program Files\Zabbix Agent 2\scripts\Monitor-VeeamJobs.ps1" -Mode Sender
Он отправляет метрики через zabbix_sender.exe. Этот режим полезен для запуска
из Task Scheduler, но текущий шаблон в первую очередь рассчитан на
ZABBIX_PASSIVE master item veeam.scripts.monitor.
Для обычной установки через Zabbix Agent 2 используй UserParameter, а не
-Mode Sender.
Проверка после установки
- Проверить скрипт напрямую:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\Program Files\Zabbix Agent 2\scripts\Monitor-VeeamJobs.ps1"
- Проверить через агент:
"C:\Program Files\Zabbix Agent 2\zabbix_agent2.exe" -t veeam.scripts.monitor
- Проверить master item в Zabbix:
Monitoring -> Latest data -> Veeam: Monitor
- Проверить dependent items:
Monitoring -> Latest data -> veeam.jobs
- Проверить discovery:
Data collection -> Hosts -> Veeam host -> Discovery -> Veeam: Job discovery
Типовые проблемы
Скрипт работает вручную, но в Zabbix нет данных
Проверь через агент:
"C:\Program Files\Zabbix Agent 2\zabbix_agent2.exe" -t veeam.scripts.monitor
Если есть timeout, увеличь в zabbix_agent2.conf:
Timeout=30
и перезапусти агент.
Вручную работает, через агент ошибка доступа к Veeam
Ручной запуск идет от твоего пользователя, а Zabbix Agent 2 работает от учетной записи службы. У этой учетной записи должен быть доступ к Veeam PowerShell.
Проверь лог:
C:\Program Files\Zabbix Agent 2\zabbix_agent2.log
Нет successful jobs
Скрипт сначала пытается читать результат из свойств job, затем из последней
Veeam-сессии. Если successful равен 0, проверь в JSON поля:
last_result
last_state
result
Если они пустые для всех заданий, значит текущий тип заданий Veeam не отдает последний результат стандартными методами.
Не показывается таблица в dashboard
В Zabbix 7.0 не все виджеты хорошо показывают много discovered items как таблицу. Самый простой вариант - выводить один item:
Veeam: Jobs summary
или смотреть подробности в:
Monitoring -> Latest data
Старый email-скрипт
NotifyOfDisabledJobs.ps1 оставлен в репозитории как старый вариант
email-уведомлений. Он не нужен для работы Zabbix-шаблона.
Если он все еще используется отдельно, исключения задаются так же через файл:
C:\Scripts\Veeam\NotifyOfDisabledJobs_EXCLUSIONS.IN
Пример:
Backup_FILE01
Backup_FILE47
Replication_FILE
Запуск старого скрипта:
powershell.exe c:\scripts\Veeam\NotifyOfDisabledJobs.ps1