Мониторинг Synology в Zabbix 7.0: диски, RAID, SSD-кэш и износ NVMe
Два шаблона и небольшой скрипт: SNMP для «железа», DSM Web API для SSD-кэша и износа NVMe. Проверено на Synology RS1619xs+ и Zabbix 7.0.3.
Зачем два способа
По SNMP Synology отдаёт состояние системы, питания, вентиляторов, дисков и RAID. Но состояния SSD-кэша и износа NVMe в SNMP нет. А именно они ломаются первыми и сильнее всего бьют по задержкам: кэш уходит в защитный режим, и запись идёт прямо на HDD. Поэтому кэш и износ SSD мы берём из DSM Web API небольшим скриптом.
Что получите
| Что | Откуда | Когда сработает триггер |
|---|---|---|
| Статус системы, питание, вентиляторы | SNMP | не Normal → High |
| Диски: статус, температура | SNMP (автообнаружение) | статус ≥ 3 → High, температура 50 и 55 °C |
| RAID и тома: статус, свободное место, % занято | SNMP | Degrade или Crashed → High, заполнение 80 и 90% |
| Число дисков | SNMP | меньше ожидаемого → High |
| SSD-кэш: статус, режим, число устройств, hit rate | DSM API | кэш не normal, устройств меньше, есть сбойные → High |
| SSD: износ, записано ТБ, ошибки, critical warning, spare, температура | DSM API (SMART) | износ больше 80% → Warning, больше 90% → High, ошибки или warning больше 0 → High |
Что скачать
- zabbix_template_synology_dsm_snmp.yaml — шаблон «Synology RS DSM by SNMP»
- zabbix_template_synology_ssd_cache.yaml — шаблон «Synology SSD cache by Web API»
- synology_ssd.py — скрипт для DSM Web API (Python 3, только стандартная библиотека)
Шаблоны в формате Zabbix 7.0 и лежат в группе My_Temp: эта группа должна уже существовать в Zabbix, либо замените её на свою перед импортом.
Шаг 1. Включить SNMP на Synology
В DSM: Панель управления → Терминал и SNMP → вкладка SNMP.
- Включите службу SNMP.
- Включите SNMPv3, задайте имя пользователя, протоколы SHA (аутентификация) и AES (шифрование) и два разных пароля.
- SNMPv1 и v2c с community
publicне включайте (а если включены, отключите): это открытый доступ к информации о системе. - Проверка с сервера Zabbix:
snmpwalk -v3 -l authPriv -u <пользователь> -a SHA -A '<пароль_аутентификации>' -x AES -X '<пароль_шифрования>' <IP_Synology> 1.3.6.1.4.1.6574.1
Если вернулись значения из ветки 6574 (это SYNOLOGY-MIB), SNMP работает.
Шаг 2. Импортировать SNMP-шаблон
- Data collection → Templates → Import, выберите
zabbix_template_synology_dsm_snmp.yaml. - Создайте хост для Synology и назначьте ему два шаблона:
Synology RS DSM by SNMPи стандартныйLinux by SNMP(процессор, память, сеть, файловые системы). - В интерфейсе хоста выберите SNMP и укажите версию SNMPv3, уровень безопасности authPriv, протоколы SHA1 и AES128, имя пользователя и два пароля из шага 1.
- Проверьте макросы хоста:
-
{$SYNO.DISK.COUNT}— сколько дисков должно быть в системе (HDD плюс SSD-кэш). По умолчанию 6; поставьте ваше число, иначе будет ложное срабатывание. -{$SYNO.DISK.TEMP.WARN}и{$SYNO.DISK.TEMP.HIGH}— пороги температуры дисков (50 и 55 °C). -{$SYNO.SYS.TEMP.WARN}и{$SYNO.SYS.TEMP.HIGH}— пороги температуры системы (60 и 70 °C). -{$SYNO.VOL.USED.WARN}и{$SYNO.VOL.USED.HIGH}— заполнение тома (80 и 90%).
Толстый iSCSI-LUN. Если том целиком занят толстым LUN (например, под датастор VMware), он занят на 100% по замыслу, и триггеры заполнения будут срабатывать постоянно. Задайте макросы с контекстом по имени тома, чтобы отключить их для него:
{$SYNO.VOL.USED.WARN:"Volume 3"} = 101
{$SYNO.VOL.USED.HIGH:"Volume 3"} = 101
Шаг 3. Пользователь DSM для API
Скрипт ходит в DSM Web API под отдельной учётной записью. Права давайте минимальные:
- Панель управления → Пользователь → Создать: имя, например
zbx_monitor, длинный пароль (храните в менеджере паролей). Включите «Запретить пользователю менять пароль», двухфакторную защиту для этой учётки не включайте. - Группы: оставьте
users. Если скрипт получит ошибку прав (код 105 или пустой ответ), добавьте пользователя вadministrators. - Права на общие папки: «Нет доступа» везде.
- Разрешения к приложениям: разрешите только DSM, остальные запретите (File Station, FTP, WebDAV, Drive и т. п.).
- Безопасность → Брандмауэр: разрешите порт DSM (5001) только с IP сервера Zabbix.
Шаг 4. Скрипт
На сервере (или прокси) Zabbix:
cp synology_ssd.py /usr/lib/zabbix/externalscripts/
chmod +x /usr/lib/zabbix/externalscripts/synology_ssd.py
chown zabbix: /usr/lib/zabbix/externalscripts/synology_ssd.py
Логин и пароль скрипт берёт из файла /etc/zabbix/synology_api.conf, а не из аргументов (иначе пароль попадёт в списки процессов и логи):
[default]
user = zbx_monitor
password = ...
https = 1
verify = 0
timeout = 20
chown zabbix: /etc/zabbix/synology_api.conf
chmod 600 /etc/zabbix/synology_api.conf
В пароле не нужны кавычки. verify = 0 отключает проверку сертификата DSM; если у DSM нормальный сертификат, поставьте 1.
Проверка:
sudo -u zabbix /usr/lib/zabbix/externalscripts/synology_ssd.py <IP_Synology> 5001
Скрипт печатает один JSON с кэшем и SSD:
{"cache": [{"id": "ssd_1", "status": "degrade", "mode": "write", "ok": 0,
"members": 1, "designed": 2, "failed": 1,
"hit_rate": 86.0, "hit_rate_write": 97.0}],
"ssd": [{"name": "nvme1n1", "model": "Samsung SSD 980 PRO 500GB", "status": "normal",
"temp": 29.0, "wear": 99.0, "spare": 100.0, "written_tb": 173.6,
"media_errors": 0, "critical_warning": 0, "poweron_hours": 21668}],
"ssd_count": 1, "cache_count": 1}
Если нужно увидеть сырой ответ DSM, добавьте --dump. Для любых других вызовов API есть режим --api, --method, --param, например:
./synology_ssd.py <IP_Synology> 5001 --api SYNO.Storage.CGI.Smart --method get_health_info --param device=/dev/nvme1n1
Шаг 5. Шаблон SSD-кэша
- Импортируйте
zabbix_template_synology_ssd_cache.yamlи назначьте шаблонSynology SSD cache by Web APIтому же хосту. - Макросы:
-
{$SYNO.API.PORT}— порт DSM (5001 для HTTPS). -{$SYNO.SSD.COUNT}— сколько SSD-кэшей должно быть в системе (по умолчанию 2). -{$SYNO.CACHE.COUNT}— сколько кэшей (по умолчанию 1). -{$SYNO.SSD.WEAR.WARN}и{$SYNO.SSD.WEAR.HIGH}— пороги износа SSD (80 и 90%). - Через 5 минут в Latest data появятся данные: статус и режим кэша, число устройств, износ и записанный объём по каждому SSD.
Что покажут триггеры
| Триггер | Важность | Что делать |
|---|---|---|
| Кэш не healthy | High | Кэш в защитном режиме, запись идёт на HDD. Проверить SSD в DSM |
| В кэше устройств меньше, чем должно быть | High | Один из SSD выпал. Проверить слот и адаптер |
| Износ SSD больше 80% / 90% | Warning / High | Планировать замену, на 90% менять |
| Media errors или critical warning больше 0 | High | SSD сбоит, заменить |
| Меньше SSD или кэшей, чем ожидалось | High | Устройство пропало из системы |
| Нет данных от DSM API 15 минут | Average | Скрипт не работает: пароль, порт, 2FA на учётке или Synology недоступна |
Не забудьте настроить оповещения: Alerts → Actions → Trigger actions, условие «Severity ≥ High».
Подвохи
remain_lifeв DSM — это не износ. По названию кажется, что это остаток ресурса, но в DSM это Available Spare. В реальном случае у Samsung 980 PRO он показывал 100% при том, что SMART Percentage Used был 99%. Износ нужно брать из SMART (Percentage Used), так скрипт и делает.- Имена полей API зависят от версии DSM. Если износ в выводе скрипта пустой или
-1, посмотрите сырой ответ через--apiи поправьте поиск нужного поля. - hit rate из DSM не равен «попаданиям в реальном времени». В интерфейсе DSM и в API это могут быть разные значения, поэтому триггеров по нему нет, он только для графиков.
- Формат Zabbix 7.0. В YAML нет поля
dateи блокаtemplate_groups, поэтому группа шаблонов должна существовать до импорта. - Первое срабатывание «меньше дисков». Если
{$SYNO.DISK.COUNT}оставить по умолчанию (6), а дисков меньше, триггер сработает сразу. Это нормально, задайте реальное число.
Итог
SNMP закрывает «железо», DSM API закрывает то, чего в SNMP нет: состояние SSD-кэша и износ NVMe. Износ накапливается незаметно, а кэш в защитном режиме не выдаёт ошибок, он просто делает хранилище медленнее. Именно поэтому на такие вещи полезно поставить отдельные триггеры, а не искать причину по задержкам уже постфактум.