Expand Russian setup documentation

This commit is contained in:
2026-08-13 15:44:28 +07:00
parent 85ebb47c7c
commit fbc7870325

435
README.md
View File

@@ -1,142 +1,426 @@
# Veeam Backup Jobs for Zabbix # Мониторинг Veeam Backup Jobs в Zabbix 7.0
This repository contains PowerShell scripts for Veeam Backup & Replication: Репозиторий содержит готовый сборщик состояния заданий Veeam Backup & Replication
и шаблон Zabbix 7.0.
- `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` | Основной скрипт для Zabbix. Собирает задания Veeam и отдает JSON. |
| `zabbix-templete-veeam-jobs.xml` | Шаблон Zabbix 7.0 с item-ами, discovery и триггерами. |
| `NotifyOfDisabledJobs.ps1` | Старый отдельный скрипт email-уведомлений о выключенных заданиях. Для Zabbix не нужен. |
`Monitor-VeeamJobs.ps1` prints one compressed JSON object by default: Для мониторинга через 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 ```json
{ {
"total": 10, "total": 49,
"disabled": 1, "disabled": 0,
"successful": 7, "successful": 45,
"error": 1, "error": 1,
"warning": 1, "warning": 3,
"disabled_names": "Disabled job", "disabled_names": "-",
"disabled_excluded_names": "Policy disabled by design", "disabled_excluded_names": "D_Migratio_DRP",
"error_names": "Failed job", "error_names": "Failed job",
"warning_names": "Warning job", "warning_names": "Warning job",
"jobs_table": "Name | Enabled | Last run | Next run | Result | Restore points\n...", "jobs_table": "Name | Enabled | Last run | Next run | Result | Restore points\n...",
"jobs_summary": "Job | Enabled | Last run | Next run | Result | Restore points\nDaily backup | yes | 2026-07-16 01:00:00 | 2026-07-17 01:00:00 | Success | 14", "jobs_summary": "Job | Enabled | Last run | Next run | Result | Restore points\n...",
"jobs_lld": { "jobs_lld": {
"data": [ "data": [
{ {
"{#VEEAMJOBKEY}": "RGFpbHkgYmFja3Vw", "{#VEEAMJOBKEY}": "dm5hbXp0cjAwNA",
"{#VEEAMJOBNAME}": "Daily backup" "{#VEEAMJOBNAME}": "vnamztr004"
} }
] ]
}, },
"jobs": [ "jobs": [
{ {
"key": "RGFpbHkgYmFja3Vw", "key": "dm5hbXp0cjAwNA",
"name": "Daily backup", "name": "vnamztr004",
"enabled": true, "enabled": true,
"enabled_numeric": 1, "enabled_numeric": 1,
"enabled_text": "yes", "enabled_text": "yes",
"last_run": "2026-07-16 01:00:00", "last_run": "2026-07-16 01:00:00",
"next_run": "2026-07-17 01:00:00", "next_run": "-",
"last_result": "Success", "last_result": "Success",
"last_state": "Stopped", "last_state": "Stopped",
"result": "Success", "result": "Success",
"restore_points": 14, "restore_points": 19,
"restore_points_text": "14", "restore_points_text": "19",
"summary": "Enabled: yes | Last: 2026-07-16 01:00:00 | Next: 2026-07-17 01:00:00 | Result: Success | Restore points: 14" "summary": "Enabled: yes | Last: 2026-07-16 01:00:00 | Next: - | Result: Success | Restore points: 19"
} }
] ]
} }
``` ```
Restore point counting is best effort. The script uses `Get-VBRBackup` and ## Настройка Zabbix Agent 2
`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:
```text ```text
veeam.jobs.discovery C:\Program Files\Zabbix Agent 2\zabbix_agent2.conf
``` ```
It creates one set of discovered items per Veeam job: добавь строку:
```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 ```text
veeam.job.enabled[{#VEEAMJOBKEY}] Data collection -> Templates -> Import
veeam.job.last_run[{#VEEAMJOBKEY}]
veeam.job.next_run[{#VEEAMJOBKEY}]
veeam.job.result[{#VEEAMJOBKEY}]
veeam.job.restore_points[{#VEEAMJOBKEY}]
veeam.job.summary[{#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.
If dashboard widgets cannot render discovered items as a table, use this single ```text
aggregate item instead: 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 ```text
Veeam: Jobs summary Veeam: Jobs summary
veeam.jobs.summary veeam.jobs.summary
``` ```
It contains all jobs in one multiline value and is the most compatible dashboard Пример значения:
option for Zabbix 7.0.
For a compact dashboard list, use the discovered summary item:
```text ```text
Veeam job [JOB_NAME]: Summary Job | Enabled | Last run | Next run | Result | Restore points
vnamztr004 | yes | 2026-07-16 01:00:00 | - | Success | 19
D_Migratio_DRP | no | - | - | - | -
``` ```
It displays one line per job: 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 ```text
Enabled: yes | Last: 2026-07-16 01:00:00 | Next: - | Result: Success | Restore points: 14 Monitoring -> Latest data -> Veeam: Monitor
``` ```
## Zabbix dashboard idea 4. Проверить dependent items:
Create a dashboard named `Veeam Jobs` for hosts linked to the `Veeam Backup Jobs` ```text
template. Monitoring -> Latest data -> veeam.jobs
```
Suggested widgets: 5. Проверить discovery:
| Area | Widget | Items | ```text
| --- | --- | --- | Data collection -> Hosts -> Veeam host -> Discovery -> Veeam: Job discovery
| 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 | Item value or item history | `veeam.jobs.summary` |
| 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 ### Скрипт работает вручную, но в Zabbix нет данных
`NotifyOfDisabledJobs.ps1` sends an email if one or more Veeam jobs are disabled. Проверь через агент:
To exclude expected disabled jobs, add keywords to:
```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 ```text
C:\Scripts\Veeam\NotifyOfDisabledJobs_EXCLUSIONS.IN C:\Scripts\Veeam\NotifyOfDisabledJobs_EXCLUSIONS.IN
``` ```
Example exclusions: Пример:
```text ```text
Backup_FILE01 Backup_FILE01
@@ -144,11 +428,8 @@ Backup_FILE47
Replication_FILE Replication_FILE
``` ```
Example batch launch: Запуск старого скрипта:
```bat ```bat
powershell.exe c:\scripts\Veeam\NotifyOfDisabledJobs.ps1 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.