В предыдущей статье я описал низкоуровневый мониторинг дисков для Windows-машин. Считаю, что статья получилась достаточно успешная. Поэтому пришло время ее фактически уничтожить. Ниже будет описан универсальный прием для Windows- и Linux-машин, для которых вообще не нужны скрипты и UserParameter'ы.

Идея простая: все необходимое от 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 разбираются на зависимые элементы с помощью предобработки регулярными выражениями. Это самая простая часть. Собственно, вам только останется подогнать под себя «регулярку».

Итог


Вот и все. Не нужно держать в голове что и куда положить, отключить ли политику выполнения скриптов PS, отслеживать ту же версию PS. А в случае необходимости все изменения производятся на самом Zabbix'е в веб-интерфейсе.

В итоге хотелось бы просто сказать спасибо Алексею alexvl и его команде за качественный продукт, который не перестает радовать новым функционалом. Особенно за предобработку. Жизнь с ней администратору станет гораздо легче.

Комментарии (14)


  1. Nexon
    14.12.2017 11:51

    Если так важно не захламлять АРМ пользователя, то достаточно использовать system.run.
    То есть, создаете один элемент с ключем system.run[«smartctl -A /dev/sda»] и несколько зависимых от него элементов с regex.


    1. AcidVenom Автор
      14.12.2017 12:03

      Это-то да, но как это вписывается в концепцию LLD? Как получить из system.run JSON?


      1. Nexon
        14.12.2017 12:29

        А зачем Вам JSON? Есть же vfs.fs.discovery. Ключ в итоге будет иметь примерно такой вид:
        system.run[smartctl -A {#FSNAME}]


        1. AcidVenom Автор
          14.12.2017 12:51

          Вы этот метод сами пробовали? Для Windows тоже?


          1. Nexon
            14.12.2017 12:59

            Пробовал, но отказался в пользу openhardwaremonitor.
            А так да, smartctl спокойно принимает буквы дисков как значение параметра:
            image.prntscr.com/image/3I0md9pOTkmpbUN9SN6b4A.jpeg


            1. AcidVenom Автор
              14.12.2017 13:03

              Ок, а как быть с разбитыми пополам дисками? Или с рейдами-стораджами?


              1. Nexon
                14.12.2017 13:25

                Да, с дисками проблема, Zabbix пока-что не поддерживает LLD физических дисков.
                Я RAID мониторю через IPMI\SNMP, т.к. ОС в случае ошибки может и не сообщить о ней.


            1. AcidVenom Автор
              14.12.2017 13:23

              Ок, я просто напишу почему это несостоятельно:
              1) Если у диска более 1 раздела — задвоение
              2) Рейд, сторадж спейсис, диск без поддержки СМАРТ — ошибочные элементы. Проверку-то вы не сделаете.


              1. Nexon
                14.12.2017 13:32

                1) Не страшно, получите 2 срабатывания триггера в случае чего. Опять же, тут скорее зависит от админов, мы уже давно не разбиваем диски.
                2) Для серверов я вообще не использую агент, там только IPMI\SNMP.


  1. rt3879439
    14.12.2017 12:47

    Эх, как я не возился с этими /dev/csmi*,*, так нормального решения и не нашёл. Печально видеть, что воз и ныне там. Неужели так сложно сделать выбор сепаратора или реализовать экранирование?


    1. Nexon
      14.12.2017 13:04

      Нормальное решение, мониторить через IPMI или SNMP.
      Ведь достаточно мониторить статус RAID, а не состояние дисков в нём.


      1. rt3879439
        14.12.2017 13:28

        А как же парк десктопов?


        1. Nexon
          14.12.2017 13:33

          Выше ветка.


  1. divanikus
    14.12.2017 16:52

    Немного не в тему, но может кому-нибудь будет интересно. Небольше «я сделаль»:
    github.com/divanikus/salus

    Задумывалось как general purpose фреймворк, но для заббикса заточки тоже присутствуют.