Наткнулся на статью сис.админа Zerox на счёт мониторинга S.M.A.R.T. диска средствами Zabbix. Но что-то у меня никак не получалось по его записи. Поэтому я опишу свой опыт настройки это необходимой вещи.
Будем разворачивать решение с Github. По сути, эта запись просто перевод с небольшими пояснениями. :)
Все необходимые компоненты я сложил в архив, который можно скачать с Я.Диска (если ссылка сломалась пишите к комменты, стучите на почту, смотрите на github).
Содержание
Возможности решения
Данное решает такие задачи:
- Мониторинг состояние S.M.A.R.T диска (почти всех показателей);
- Мониторинг оставшегося ресурса SSD;
- Мониторинг температуры;
- Мониторинг производителя, партийного номера, серийного номера (Zabbix вас оповестит, если диск был заменен), что позволяет настроить инвентаризацию;
- Мониторинг количество неисправных секторов на диске;
Подготовка Zabbix-Server
Всё, что Вам потребуется, это добавить замечательный шаблон в свой Zabbix.
Подготовка Zabbix-Agent Windows
Установка smartmontools
Ничего необычного, просто устанавливаем smartmontools, как обычную программу. Единственный момент, не рекомендую менять путь, иначе его надо будет менять в конфиге агента и в скрипте.
Конфигурирование агента
Создаем папку scripts и помещаем туда наш скрипт smartctl-disks-discovery.ps1
Открываем zabbix_agentd.conf и правим
1 2 |
#Увеличиваем TimeOut до 30 секунд. Как показывает практика. Если этого будет мало, то потом увеличим. TimeOut = 20 |
И добавляем пользовательскую проверку
1 2 3 4 |
UserParameter=uHDD.get[*], for /F "tokens=* usebackq" %a in (`""%ProgramFiles%\smartmontools\bin\smartctl.exe" -i -H -A -l error -l background $1"`) do @echo %a UserParameter=uHDD.discovery[*],powershell -NoProfile -ExecutionPolicy Bypass -File "%ProgramFiles%\Zabbix Agent\scripts\smartctl-disks-discovery.ps1" UserParameter=uSSD.get[*], for /F "tokens=* usebackq" %a in (`""%ProgramFiles%\smartmontools\bin\smartctl.exe" -i -H -A -l error -l background $1"`) do @echo %a UserParameter=uSSD.discovery[*],powershell -NoProfile -ExecutionPolicy Bypass -File "%ProgramFiles%\Zabbix Agent\scripts\smartctl-disks-discovery.ps1" |
Осталось перезапустить агента и привязать наш хост к шаблону.
Примерно через час прилетят данные. (Для отладки можно поменять время обнаружения, я обычно ставлю 10 минут, меняем 1h на 10m. Главное, не забыть обратно вернуть).
Результат
Таким образом мы настроили мониторинг SSD и HDD дисков. Данное решение отлично показывает себя в проде. По критически важным дискам можно строить вот такие информативные графики. Мне нравится :)
ТраблШутинг
У меня такая проблема возникала, когда забыл ставить smartmontools
1 2 3 |
Invalid discovery rule value: cannot parse as a valid JSON object: invalid JSON object value starting character at: '????? ?맢??? ??⮤ ??? ??ࠦ???? ? ???祭??? NULL. C:\Program Files\Zabbix Agent\scripts\smartctl-disks-discovery.ps1:34 ????:73 + $disk_name = $smart_scanresul |
где шаблон то?)
Там в начале записи ссылка на Я.Диск. Внутри всё есть. https://yadi.sk/d/s5U2ixjQo46pbw
В качестве сервера установлен zabbix_server (Zabbix) 6.2.0beta3, в качестве агентов zabbix_agent-6.0.5-windows, как ни пробую не получается чтобы на сервере появлялась информация по данному шаблону. Насколько я понимаю не срабатывают правила обнаружения на сервере, хотя локально
Спокойно отрабатывает.
Зашел гитхаб указанный в статье, и прочел следующее:
Вы не пробовали использовать и настраивать с использованием данного шаблона?
У меня zabbix пока что 5.4.7, всё никак на 6 версию не перейти. Поэтому пока не подскажу. Если найдете решение и напишите его — добавлю в эту запись)
Хорошо.
А на пятой версии данный вариант отрабатывает нормально?
P.s. Просто Zabbix ставлю впервые, поэтому возникают вопросы на ровном месте.
Да, всё ок
Я почему спрашиваю, в conf для агента обнаружение дисков идет с помощью строки:
А в шаблоне через ZScript[discovery]. И именно это у меня отрабатывать не хочет.
А если прописать путь до скрипта полностью?
Так со стороны сервера команда
Отрабатывается нормально, а вот
Выдает: «ZBX_NOTSUPPORTED:: command not found»
Потому собственно обнаружение дисков и не работате.
Взял шаблон с git, там подправленный с обнаружением дисков через uHDD.discovery[«{$SMARTCTL_STATIC_DISKS}»], с ним все заработало.
Единственное дубли идут, т.к. smartctl-disks-discovery.ps1 обнаруживает диски как /dev/sda и как /dev/csmi0,0
Выложили бы сюда этот скрипт, столкнулся с точно такой же проблемой, забикс не понимает ZScript[discovery]
[…] Источник […]