Files
Veeam_jobs_disable/README.md

436 lines
15 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Мониторинг 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 нужен именно:
```text
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, если ее еще нет:
```text
C:\Program Files\Zabbix Agent 2\scripts
```
Скопируй туда файл:
```text
C:\Program Files\Zabbix Agent 2\scripts\Monitor-VeeamJobs.ps1
```
Проверь ручной запуск на Veeam-сервере:
```powershell
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\Program Files\Zabbix Agent 2\scripts\Monitor-VeeamJobs.ps1"
```
В ответ должен прийти JSON, примерно такой:
```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
В файл конфигурации агента:
```text
C:\Program Files\Zabbix Agent 2\zabbix_agent2.conf
```
добавь строку:
```ini
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 секунд:
```ini
Timeout=30
```
Перезапусти агент:
```powershell
Restart-Service "Zabbix Agent 2"
```
Проверь выполнение через агент:
```cmd
"C:\Program Files\Zabbix Agent 2\zabbix_agent2.exe" -t veeam.scripts.monitor
```
Если команда возвращает JSON, агент настроен правильно.
## Импорт шаблона в Zabbix
В Zabbix открой:
```text
Data collection -> Templates -> Import
```
Импортируй файл:
```text
zabbix-templete-veeam-jobs.xml
```
При повторном импорте включи обновление существующих объектов, чтобы обновились
items, triggers и discovery rule.
После импорта привяжи шаблон:
```text
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:
```text
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-а и в теге:
```text
veeam_job
```
## Исключения для выключенных заданий
Если часть заданий специально выключена, их можно исключить из счетчика
`veeam.jobs.disabled`.
По умолчанию скрипт ищет файл:
```text
C:\Program Files\Zabbix Agent 2\scripts\NotifyOfDisabledJobs_EXCLUSIONS.IN
```
Формат файла простой: одна строка - один фрагмент имени задания.
Пример:
```text
D_Migratio_DRP
Test policy
Archive
```
Если имя выключенного задания содержит один из этих фрагментов, оно попадет в:
```text
veeam.jobs.disabled.excluded.names
```
и не будет учитываться в:
```text
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` |
Для просмотра всех заданий одной строкой на задание используй:
```text
Veeam: Jobs summary
veeam.jobs.summary
```
Пример значения:
```text
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
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
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\Program Files\Zabbix Agent 2\scripts\Monitor-VeeamJobs.ps1"
```
2. Проверить через агент:
```cmd
"C:\Program Files\Zabbix Agent 2\zabbix_agent2.exe" -t veeam.scripts.monitor
```
3. Проверить master item в Zabbix:
```text
Monitoring -> Latest data -> Veeam: Monitor
```
4. Проверить dependent items:
```text
Monitoring -> Latest data -> veeam.jobs
```
5. Проверить discovery:
```text
Data collection -> Hosts -> Veeam host -> Discovery -> Veeam: Job discovery
```
## Типовые проблемы
### Скрипт работает вручную, но в Zabbix нет данных
Проверь через агент:
```cmd
"C:\Program Files\Zabbix Agent 2\zabbix_agent2.exe" -t veeam.scripts.monitor
```
Если есть timeout, увеличь в `zabbix_agent2.conf`:
```ini
Timeout=30
```
и перезапусти агент.
### Вручную работает, через агент ошибка доступа к Veeam
Ручной запуск идет от твоего пользователя, а Zabbix Agent 2 работает от учетной
записи службы. У этой учетной записи должен быть доступ к Veeam PowerShell.
Проверь лог:
```text
C:\Program Files\Zabbix Agent 2\zabbix_agent2.log
```
### Нет successful jobs
Скрипт сначала пытается читать результат из свойств job, затем из последней
Veeam-сессии. Если `successful` равен `0`, проверь в JSON поля:
```text
last_result
last_state
result
```
Если они пустые для всех заданий, значит текущий тип заданий Veeam не отдает
последний результат стандартными методами.
### Не показывается таблица в dashboard
В Zabbix 7.0 не все виджеты хорошо показывают много discovered items как таблицу.
Самый простой вариант - выводить один item:
```text
Veeam: Jobs summary
```
или смотреть подробности в:
```text
Monitoring -> Latest data
```
## Старый email-скрипт
`NotifyOfDisabledJobs.ps1` оставлен в репозитории как старый вариант
email-уведомлений. Он не нужен для работы Zabbix-шаблона.
Если он все еще используется отдельно, исключения задаются так же через файл:
```text
C:\Scripts\Veeam\NotifyOfDisabledJobs_EXCLUSIONS.IN
```
Пример:
```text
Backup_FILE01
Backup_FILE47
Replication_FILE
```
Запуск старого скрипта:
```bat
powershell.exe c:\scripts\Veeam\NotifyOfDisabledJobs.ps1
```