Пришло время и мне собрать свой велосипед для мониторинга физического состояния Windows-железок. Готового решения или хоть более или менее работающего найти не удавалось с момента моего знакомства с Zabbix, а это более 3 лет. А тем более, чтобы оно было… элегантно что ли. Лично мне даже в таких вещах хочется видеть стройность и максимальную функциональность. Именно поэтому далее рассматривается только LLD и PowerShell. Ну и конечно же только бесплатное ПО.

Итак, мониторинг чего будет производиться:

  • S.M.A.R.T. дисков (информация, общее состояние и отдельные показатели)
  • Температуры, напряжение, обороты кулеров (на ваш выбор)

А выглядеть это все будет примерно так:



Суммарно понадобятся:

  1. smartmontools
  2. OpenHardwareMonitor
  3. NSSM
  4. 2 скрипта на PS, приведенные ниже
  5. шаблон

Шаблон


Под спойлером находится актуальный шаблон. Просто сохраните содержимое в формате xml и импортируйте в свой Zabbix.

Шаблон


Шаблон создан в Zabbix версии 3.2, возможно, будет работать и в более ранних версиях. Ключи стандартны и имеют вид ZScript[имя_скрипта, параметр1,.., параметрN]. Параметры передаются непосредственно в сам скрипт.

Надеюсь, шаблон получился максимально простым и понятным.

Скрипты PS


Ниже приведены необходимые скрипты. Внутри уже находятся и обнаружение, и запрос отдельных элементов. Работа проверена на Windows от 7 SP1 до 2012 R2. Само собой, решение с Execution Policy остается за вами.

windows.hdd.ps1 -> Для smartmontools


Обнаруживаются только диски с задействованным СМАРТом. Параметры запрашиваются из столбца «RAW_VALUE». Хотите мониторить другой параметр? Просто укажите его номер. По умолчанию скобки и их содержимое отбрасываются. Если нужный вам параметр диск не отдает, то возвращается пустое поле.

windows.hard.ps1 -> для OHM


По умолчанию скрипт не обнаруживает названия датчиков, в которых есть #. Для чего это нужно, смотрите ниже.

Также зарезервировано одно имя датчика — Vbat. Это напряжение аккумулятора БИОС. Его значение вынесено в отдельный элемент для триггера (срабатывает если менее 2,9V).

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

Теоретически, можно обнаруживать и другие показатели (нагрузки, частоты,..). Используйте для этого соответствующий второй параметр в ключе. К примеру: ZScript[hard,discovery,load].

Подготовка Zabbix-агента


Для максимальной унификации я использую следующий и единственный параметр для своих скриптов:

UserParameter=ZScript[*],powershell C:\System\Zabbix\Scripts\windows.$1.ps1 "$2" "$3"

Это дает максимальную гибкость и однообразность. Если нужно будет добавить еще параметров для каких-либо скриптов, можно просто добавить переменных в кавычках. На текущие работающие скрипты это никак не повлияет. Префикс windows я использую на всякий случай, мне так удобно хранить шаблоны для гарантированной идентификации.

smartmontools


Для мониторинга состояния дисков используется smartmontools (версия 6.5 на момент написания статьи). При установке ПО по умолчанию ставится утилита smartctl-nc — именно она используется в скрипте для облегчения жизни вашего сервера. Также потребуется прописать пусть к папке bin в переменных средах.



Путь просто добавляем в конец переменной Path через точку с запятой. По умолчанию — C:\Program Files\smartmontools\bin



OpenHardwareMonitor


Для датчиков же используется OHM. Софт бесплатный с открытым кодом. Установка тривиальна, но для полноценной работы необходимо запускать программу в качестве службы. Для подобных вещей есть NSSM, я бы все же советовал качать последнюю сборку. А здесь можно посмотреть синтаксис.
Обещанный выбор датчиков обеспечивается за счет того, что названия датчиков можно изменять! Изменяете имена на удобочитаемые (они будут использованы в именах элементов), а ненужные датчики комментируете #.

Не забывайте перезапустить программу/службу для применения переименования.



Итого


В итоге получился неплохой инструмент для мониторинга. Желающие могут навесить свои триггеры на нужные прототипы элементов. Или же полностью переработать шаблон.

P.S.: залил шаблон и скрипты на Github.
Поделиться с друзьями
-->

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


  1. AcidVenom
    28.02.2017 11:03
    +2

    При должном отклике могу опубликовать LLD-шаблон для служб лицензирования FlexLM под Windows.


  1. cobra128
    28.02.2017 12:56

    Спасибо. Весьма полезная статья.


  1. Alex_333
    28.02.2017 14:00

    Как раз вовремя статья, в марте будет стоять такая задачка. Спасибо!


  1. namepunk
    28.02.2017 14:07

    write-host -NoNewline "{"
    write-host -NoNewline "`«data`»:["

    write-host -NoNewline "]"
    write-host -NoNewline "}"

    Что-бы не городить подобные велосипеды в Powershell есть функция Convertto-Json


    1. AcidVenom
      28.02.2017 14:07

      Спасибо!


  1. Delhin
    28.02.2017 21:36

    Есть еще вариант.
    Первый, гораздо реже, создает готовый LDD который отдается обычным Write-host, не так уж часто оборудование меняется.
    Второй скрипт создает форматированный файл по всем интересующим устройствам раз в N минут.
    А в шаблоне при обнаружении формируются итемы с конкретными ИД устройств которые забираются третьим простейшим скриптом из готового файла.

    Итог: дергает smartctl(что-то другое) один раз, детали постоянно берем из простого файла, тем самым снижаем паразитную нагрузку на железо, файл влезает в дисковый кеш и не нагружает систему.
    Как показывает практика раз в 10 минут готовить файл с интересующими параметрами достаточно что бы отреагировать на проблему, в большинстве случаев вы её всё равно будете дольше решать ;)

    Скрипты подготовки вы так же вызываете как item с контролем кода и настраиваете триггер.
    Они выкидывают цифровое значение:
    0 — всё в норме
    <>0 — ваши ошибки для поиска проблемы почему не работает скрипт


    1. AcidVenom
      28.02.2017 21:45

      Насчет нагрузки: для 3-5 дисков нагрузки ноль или около ноль на очень-очень старом «железе», на последнем скрине видно на каком.


  1. ersh
    01.03.2017 10:13

    Автокадный FlexLM — да, очень даже интересно помониторить.


    1. AcidVenom
      01.03.2017 10:22

      Получается примерно так. Серверы и фичи обнаруживаются сами. Один момент: для читаемости нужно прописать макросы.

      Flex


      1. ersh
        02.03.2017 15:21

        Брр. Так и не понял — исходные данные от Flex-то каким образом берутся?


        1. AcidVenom
          02.03.2017 15:30

          Точно так же: 1 скрипт на сервер, на котором есть флекс-службы, и lmutil.exe, который содержится в дистрибутивах от Автодеска, Нанософта, Сисофта и т.д.


          1. ersh
            02.03.2017 15:55

            а, точно. про lmutil-то я как раз и не вспомнил :(


  1. YMax
    02.03.2017 13:12

    Импортировать шаблон в Zabbix 3.2 не удалось — вываливался с ошибкой.


    1. AcidVenom
      02.03.2017 14:11

      Заменил на ссылку. Хабр парсит некоторые символы, а заббикс их читать не умеет.