В предыдущей статье я описал низкоуровневый мониторинг дисков для Windows-машин. Считаю, что статья получилась достаточно успешная. Поэтому пришло время ее фактически уничтожить. Ниже будет описан универсальный прием для Windows- и Linux-машин, для которых вообще не нужны скрипты и UserParameter'ы.
Идея простая: все необходимое от smartmontools Zabbix-сервер будет получать через внешнюю обработку и zabbix_get, парсить и передавать далее в зависимые элементы (появились в Zabbix 3.4). Такие образом не только сокращается количество обращений к наблюдаемому серверу, но и не расходуются его ресурсы, так как парсинг происходит на стороне Zabbix-сервера.
Одно ограничение на данный момент: мониторинг дисков только формата /dev/sd*. Формат /dev/csmi*,* (Intel Matrix RAID) не поддерживается ввиду того, что zabbix_get считает запятую вторым аргументом. Поправьте меня, если я ошибаюсь.
Что понадобится для реализации:
Единственное, что заслуживает здесь внимания, это необходимость раскомментировать строку EnableRemoteCommands = 1, иначе агент не сможет принимать команды.
Установка тривиальна и рассматриваться не будет, однако для Linux есть одна необходимость: для того, чтобы запуск проходил без sudo, необходимо установить бит SUID на файл smartctl. Для Ubuntu это — sudo chmod u+s /usr/sbin/smartctl.
В зависимости от вашего файла конфигурации zabbix_server.conf этот скрипт нужно положить в соответствующую директорию на Zabbix-сервер. По умолчанию для Ubuntu это — /usr/lib/zabbix/externalscripts. Не забывайте дать на файл права на выполнение — sudo chmod 775 /usr/lib/zabbix/externalscripts/smartctl.sh.
Шаблон экспортирован из версии 3.4.4.
В шаблоне уже присутствуют следующие элементы: модель, семейство, серийный номер, объем диска, статус SMART; а также значения SMART 3, 5, 7, 9, 10, 190(194), 196, 197, 198 ,199. Есть и 3 триггера: два оповещают о высоких температурах и еще один о плохом SMART'е.
Вот и все. Не нужно держать в голове что и куда положить, отключить ли политику выполнения скриптов PS, отслеживать ту же версию PS. А в случае необходимости все изменения производятся на самом Zabbix'е в веб-интерфейсе.
В итоге хотелось бы просто сказать спасибо Алексею alexvl и его команде за качественный продукт, который не перестает радовать новым функционалом. Особенно за предобработку. Жизнь с ней администратору станет гораздо легче.
Идея простая: все необходимое от smartmontools Zabbix-сервер будет получать через внешнюю обработку и zabbix_get, парсить и передавать далее в зависимые элементы (появились в Zabbix 3.4). Такие образом не только сокращается количество обращений к наблюдаемому серверу, но и не расходуются его ресурсы, так как парсинг происходит на стороне Zabbix-сервера.
Одно ограничение на данный момент: мониторинг дисков только формата /dev/sd*. Формат /dev/csmi*,* (Intel Matrix RAID) не поддерживается ввиду того, что zabbix_get считает запятую вторым аргументом. Поправьте меня, если я ошибаюсь.
Что понадобится для реализации:
- Шаблон
- Скрипт
- zabbix_get на сервере
- smartmontools на агентах
Настройка агента
Единственное, что заслуживает здесь внимания, это необходимость раскомментировать строку EnableRemoteCommands = 1, иначе агент не сможет принимать команды.
Smartmontools
Установка тривиальна и рассматриваться не будет, однако для Linux есть одна необходимость: для того, чтобы запуск проходил без sudo, необходимо установить бит SUID на файл smartctl. Для Ubuntu это — sudo chmod u+s /usr/sbin/smartctl.
Скрипт
В зависимости от вашего файла конфигурации zabbix_server.conf этот скрипт нужно положить в соответствующую директорию на Zabbix-сервер. По умолчанию для Ubuntu это — /usr/lib/zabbix/externalscripts. Не забывайте дать на файл права на выполнение — sudo chmod 775 /usr/lib/zabbix/externalscripts/smartctl.sh.
smartctl.sh
Шаблон
Шаблон экспортирован из версии 3.4.4.
В шаблоне уже присутствуют следующие элементы: модель, семейство, серийный номер, объем диска, статус SMART; а также значения SMART 3, 5, 7, 9, 10, 190(194), 196, 197, 198 ,199. Есть и 3 триггера: два оповещают о высоких температурах и еще один о плохом SMART'е.
Hardware - HDD.xml
Более подробно о том, как все устроено
Ниже я постараюсь подробно описать что же происходит на каждом этапе.
Первый этап: обнаружение доступных дисков sd* с помощью внешней проверки smartctl.sh с ключами {HOST.CONN} и discovery. В ответ сервер получает JSON с дисками, на которых активирована функция SMART. Диски без SMART'а или не sd* не выводятся.
Этап второй: получение для каждого из найденных дисков двух элементов — Info и Attr. Info — информация о диске, Attr — атрибуты SMART. «Почему не запросить smartctl -a /dev/sd* ?» — спросите вы. Такой вывод получается не полный для части дисков, теряются атрибуты и так далее. Пришлось изобретать на ходу.
Третий этап: Info и Attr разбираются на зависимые элементы с помощью предобработки регулярными выражениями. Это самая простая часть. Собственно, вам только останется подогнать под себя «регулярку».
Первый этап: обнаружение доступных дисков sd* с помощью внешней проверки smartctl.sh с ключами {HOST.CONN} и discovery. В ответ сервер получает JSON с дисками, на которых активирована функция SMART. Диски без SMART'а или не sd* не выводятся.
Этап второй: получение для каждого из найденных дисков двух элементов — Info и Attr. Info — информация о диске, Attr — атрибуты SMART. «Почему не запросить smartctl -a /dev/sd* ?» — спросите вы. Такой вывод получается не полный для части дисков, теряются атрибуты и так далее. Пришлось изобретать на ходу.
Третий этап: Info и Attr разбираются на зависимые элементы с помощью предобработки регулярными выражениями. Это самая простая часть. Собственно, вам только останется подогнать под себя «регулярку».
Итог
Вот и все. Не нужно держать в голове что и куда положить, отключить ли политику выполнения скриптов PS, отслеживать ту же версию PS. А в случае необходимости все изменения производятся на самом Zabbix'е в веб-интерфейсе.
В итоге хотелось бы просто сказать спасибо Алексею alexvl и его команде за качественный продукт, который не перестает радовать новым функционалом. Особенно за предобработку. Жизнь с ней администратору станет гораздо легче.
Комментарии (14)
rt3879439
14.12.2017 12:47Эх, как я не возился с этими /dev/csmi*,*, так нормального решения и не нашёл. Печально видеть, что воз и ныне там. Неужели так сложно сделать выбор сепаратора или реализовать экранирование?
divanikus
14.12.2017 16:52Немного не в тему, но может кому-нибудь будет интересно. Небольше «я сделаль»:
github.com/divanikus/salus
Задумывалось как general purpose фреймворк, но для заббикса заточки тоже присутствуют.
Nexon
Если так важно не захламлять АРМ пользователя, то достаточно использовать system.run.
То есть, создаете один элемент с ключем system.run[«smartctl -A /dev/sda»] и несколько зависимых от него элементов с regex.
AcidVenom Автор
Это-то да, но как это вписывается в концепцию LLD? Как получить из system.run JSON?
Nexon
А зачем Вам JSON? Есть же vfs.fs.discovery. Ключ в итоге будет иметь примерно такой вид:
system.run[smartctl -A {#FSNAME}]
AcidVenom Автор
Вы этот метод сами пробовали? Для Windows тоже?
Nexon
Пробовал, но отказался в пользу openhardwaremonitor.
А так да, smartctl спокойно принимает буквы дисков как значение параметра:
image.prntscr.com/image/3I0md9pOTkmpbUN9SN6b4A.jpeg
AcidVenom Автор
Ок, а как быть с разбитыми пополам дисками? Или с рейдами-стораджами?
Nexon
Да, с дисками проблема, Zabbix пока-что не поддерживает LLD физических дисков.
Я RAID мониторю через IPMI\SNMP, т.к. ОС в случае ошибки может и не сообщить о ней.
AcidVenom Автор
Ок, я просто напишу почему это несостоятельно:
1) Если у диска более 1 раздела — задвоение
2) Рейд, сторадж спейсис, диск без поддержки СМАРТ — ошибочные элементы. Проверку-то вы не сделаете.
Nexon
1) Не страшно, получите 2 срабатывания триггера в случае чего. Опять же, тут скорее зависит от админов, мы уже давно не разбиваем диски.
2) Для серверов я вообще не использую агент, там только IPMI\SNMP.