Files
Veeam_jobs_disable/README.md

15 KiB
Raw Blame History

Мониторинг 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.

Проверка после установки

  1. Проверить скрипт напрямую:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\Program Files\Zabbix Agent 2\scripts\Monitor-VeeamJobs.ps1"
  1. Проверить через агент:
"C:\Program Files\Zabbix Agent 2\zabbix_agent2.exe" -t veeam.scripts.monitor
  1. Проверить master item в Zabbix:
Monitoring -> Latest data -> Veeam: Monitor
  1. Проверить dependent items:
Monitoring -> Latest data -> veeam.jobs
  1. Проверить 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