PowerShell
Server Administration
System administration
February 2017 28

Zabbix: LLD-мониторинг железа под Windows на PowerShell

Changelog

Пришло время и мне собрать свой велосипед для мониторинга физического состояния 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 от XP SP3 до 2016. Само собой, решение с 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, я бы все же советовал качать последнюю сборку. А здесь можно посмотреть синтаксис.
Обещанный выбор датчиков обеспечивается за счет того, что названия датчиков можно изменять! Изменяете имена на удобочитаемые (они будут использованы в именах элементов), а ненужные датчики комментируете #.

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



Итого


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

2017/07/05 ОБНОВЛЕНИЕ: исправлена ошибка в windows.hdd.ps1 — теперь в JSON не появляется запятая в начале.
+15
16.5k 148
Comments 26