Мониторинг ИБП рабочих станций в Windows с Network UPS Tools

в 11:48, , рубрики: network ups tools, open source, php, web-сервер, велосипедостроение, ИБП, Программирование, системное администрирование

Когда возникает задача мониторить бесперебойники у рабочих станций? Запищал – заменил, конец. Чинить ИБП – дело неблагодарное, менять аккумуляторы – не все хотят возиться (или даже моветон).

Так думал и я, особенно после череды ИБП с отказавшей электроникой. Ситуацию усугублял софт от производителей. Он, как бы это помягче выразиться, барахло. Причем у всех – APC, Ippon, Powercom, TrippLite. Что серверный, что для рабочих станций. Пробовать платные версии после опыта с бесплатными – желания не возникло. А совсем весело, когда ИБП от разных производителей.

Но мониторить всё же надо. Плюсы очевидны: 1) можно поменять ИБП ДО того, как он издаст прощальный писк; 2) можно сразу увидеть, где сдохла батарея, а где электроника.
Минус же прост, как всегда: стоимость решения, в деньгах или человеко-часах.

Вот эту проблему и будем решать.

Если имеем зоопарк, то самый адекватный способ – это Network UPS Tools.

По нему мало информации про Windows, а ещё нет GUI. Но это мы решим.

Справедливости ради нужно отметить, что есть похожий проект на Python. Но мне лично кажется совершенно излишним использование Python (и подобные технические решения) там, где можно обойтись парой строк нативного скриптинга.

Disclaimer

  • Это не «готовое решение».
  • Это не предложение, а рассказ.
  • Да, есть Zabbix, Cacti, etc, и это тяжеловесные решения для больших компаний, требующие выделенного сервера и всё равно какого-то промежуточного слоя для поддержки соответствующего протокола UPS.
  • При всём вышеперечисленном, решение достаточно простое, достаточно лёгкое и стоит 0 валюты.

Разумеется, для сбора информации понадобятся UPS с инфо-портом. У меня возникли проблемы с COM-портом IPPON, всё остальное работает на ура.

Обычно для рабочих станций используется подключение ИБП по USB, этот случай и рассмотрим. Нужно установить NUT на все рабочие станции с ИБП.
Возможные проблемы при этом:

  • > Драйвер libusb лучше ставить отдельно. Те, что в комплекте, понимает не все ИБП;
  • Если libusb предлагает стандартное имя HID UPS Battery, нужно его изменить – со стандартным именем некоторые системы почему-то не видят UPS;
  • если процессе установки появилось сообщение "Драйвер без цифровой подписи", то его нужно повторно переустановить руками, иначе он слетает;
  • если libusb не распознал модель UPS, то с первого раза драйвер ставится НЕКОРРЕКТНО! Об этом говорит ошибка «upsmon ERROR ACCESS DENIED», или драйвер просто слетает. Нужно: остановить службу NUT, удалить драйвер libusb, подождать, пока установится «USB устройство ввода», выбрать для него вручную драйвер libusb заново;
  • Для NUT нужны сторонние библиотеки, которых в комплекте установки нет. Setup об этом говорит, но кто ж его читает :) Плюс часто в системах уже есть софт с этими библиотеками. Точно нужны: libeay32.dll, ssleay32.dll, libgcc_s_dw2-1.dll (есть в папке NUT-bin), libusb.dll (есть в дистрибутиве libusb), msvcr71.dll (в составе Net Framework 1.1). Все эти файлы должны быть в папке WindowsSystem32;
  • иногда нужно указать bus=«bus-0» для USB UPS в ups.conf;
  • на быстрых машинах и на некоторых сетевых картах служба NUT стартует раньше, чем драйвер и/или сетевой интерфейс. При этом тип запуска «Автозагрузка (отложенный запуск)» приводит к ошибке «upsc ERROR DATA STALE». Решение: создать задачу, которая будет проверять наличие процесса upsd при появлении события с кодом 1 из источника «Network UPS Tools» и перезапускать службу Network UPS Tools скачать xml-файл задачи скачать скрипт (должен быть в папке NUTothers).

Примерный скрипт полуавтоматической установки NUT на клиенты:

N:NUT-Installer-2.6.5-6.msi /qn
copy N:dllssleay32.dll C:WindowsSystem32 /Y
copy N:dlllibeay32.dll C:WindowsSystem32 /Y
copy N:dlllibgcc_s_dw2-1.dll C:WindowsSystem32 /Y
copy N:dlllibusb.dll C:WindowsSystem32 /Y
copy N:etc* "%programfiles%NUTetc"

rem добавляем IP-адрес клиента в конфиг NUT автоматически
SET IP=192.168.100.10
set ip_address_string="IP Address"
rem Uncomment the following line when using Windows 7 (with removing "rem")!
set ip_address_string="IPv4-адрес"
REM echo Network Connection Test
for /f "usebackq tokens=2 delims=:" %%f in (`ipconfig ^| findstr /c:%ip_address_string%`) do SET IP=%%f
ECHO LISTEN %IP% 3493 >> "%programfiles%NUTetcupsd.conf"

rem Ставим драйвер libusb отдельно
N:libusb-win32-bin-1.2.6.0bininf-wizard.exe

rem Правим конфиги, там буквально две строки
notepad "%programfiles%NUTetcups.conf"
notepad "%programfiles%NUTetcupsmon.conf"
pause
net use N: /delete /Y

Как понять, почему не работает NUT под Windows:

  • проверяем, есть ли в процессах nut.exe
  • если есть, то проверяем upsd.exe и upsmon.exe
  • если upsd нет в процессах, идём в nutsbin и запускаем руками:
  • «upsd не может быть запущен, так как отсутствует dll» – проверяем dll в system32, перезагружаемся на всякий случай;
  • «upsd error creating named pipe» – upsd уже запущен
  • запускается и сразу закрывается – проверить ip-адрес в upsd.conf в секции LISTEN, особенно актуально, если на машине DHCP ;
  • upsd запустился, но не видит UPS – установить или переустановить libusb, проверить libusb.dll в system32, переименовать устройство из HID UPS Battery;
  • если upsd стартовал, идём в bin и выполняем upsc our_ups@localhost
  • «upsc не может быть запущен, так как отсутствует dll» – проверяем библиотеки ;
  • «upsc failed connection unknown error» – проверяем, запущен ли upsd и upsmon, внимательно проверяем секцию MONITOR в upsmon.conf, ещё раз проверяем библиотеки dll;
  • «upsc error data stale» – либо UPS один раз запускался и больше не работает, тогда переустанавливаем драйвер libusb и переименовываем HID UPS Battery, либо служба NUT поднялась быстрее, чем стал виден сетевой интерфейс или USB UPS, перезапускаем службу;
  • «upsmon error ACCESS DENIED» – переустанавливаем драйвер, как описано выше.

Для сервера мониторинга нужны:

  • NUT в режиме standalone;
  • любой web-сервер с php и mysql. Я использую Uniform Server
  • MySQL-база и папка www из репозитория, и пара batch-скриптов оттуда же.

Базу SQL и www кладём в соответствующие каталоги веб-севера. Скрипты из batch_scripts копируем в папку установки NUT. Запускаем веб-сервер, переходим на localhost/index_ups.php. Добавляем любой из клиентских UPS в формате UPS_name@host. Запускаем скрипт get_ups_list_mysql.cmd. Проверяем. Enjoy.

image

Что мы можем увидеть полезного, помимо текущего состояния? Например:

  • если минимальный вольтаж батареи приближается к 10 – лучше заменить её заранее;
  • при нормальных значениях вольтажа отказ ИБП будет связан скорее всего, с отказом электроники (ваш, К.О.);
  • нагрузка более 70 процентов нежелательна, 100 не нормальна, если не связана с событием self-test;
  • минимальный заряд батареи менее 30% говорит о неисправности батареи либо о неверных настройках автоотключения при разряде на клиенте.

Несколько моментов:

  • столбцы можно сортировать нажатием на заголовок;
  • максимальные/минимальные значения выводятся через слеш к текущим, критические отмечаются красным;
  • осторожнее с кнопкой «self-test».

Если у кого-то проблемы с установкой/работой NUT под Windows – пишите, разберёмся вместе.

Спасибо за внимание!

Автор: LevOrdabesov

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js