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

Так думал и я, особенно после череды ИБП с отказавшей электроникой. Ситуацию усугублял софт от производителей. Он, как бы это помягче выразиться, барахло. Причем у всех – 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). Все эти файлы должны быть в папке Windows\System32;
  • иногда нужно указать bus=«bus-0» для USB UPS в ups.conf;
  • на быстрых машинах и на некоторых сетевых картах служба NUT стартует раньше, чем драйвер и/или сетевой интерфейс. При этом тип запуска «Автозагрузка (отложенный запуск)» приводит к ошибке «upsc ERROR DATA STALE». Решение: создать задачу, которая будет проверять наличие процесса upsd при появлении события с кодом 1 из источника «Network UPS Tools» и перезапускать службу Network UPS Tools скачать xml-файл задачи скачать скрипт (должен быть в папке NUT\others).

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

N:\NUT-Installer-2.6.5-6.msi /qn
copy N:\dll\ssleay32.dll C:\Windows\System32 /Y
copy N:\dll\libeay32.dll C:\Windows\System32 /Y
copy N:\dll\libgcc_s_dw2-1.dll C:\Windows\System32 /Y
copy N:\dll\libusb.dll C:\Windows\System32 /Y
copy N:\etc\* "%programfiles%\NUT\etc"

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%\NUT\etc\upsd.conf"

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

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

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

  • проверяем, есть ли в процессах nut.exe
  • если есть, то проверяем upsd.exe и upsmon.exe
  • если upsd нет в процессах, идём в nut\sbin и запускаем руками:
  • «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 – пишите, разберёмся вместе.

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

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


  1. alexanster
    23.08.2018 17:30
    +2

    менять аккумуляторы – не все хотят возиться (или даже моветон)

    Какая же там возня??? Открутить пару винтиков, отсоединить несколько проводов, вынуть старые аккумуляторы, установить новые, собрать всё обратно. Это же не смартфон, где действительно без навыков и спец инструмента будет тяжко. Или это как в анекдоте про новых русских, меняющих Мерседес, когда заполняется пепельница?


    1. LevOrdabesov Автор
      23.08.2018 17:44

      Я тоже не считаю, что это сложно.
      Но люди и организации бывают разные.


      1. apsav
        23.08.2018 18:48

        Наверное Вы не разбирали новые ИБП от APC, например Back-UPS BX500CI — «непередаваемые ощущения». Согласен, в большинстве, проблем нет, но только не с этими.


        1. LevOrdabesov Автор
          23.08.2018 18:49

          Некоторые действительно неочевидно сконструированы.
          В том числе поэтому не все берутся с ними возиться, всё так.


    1. ZlobniyShurik
      23.08.2018 19:05

      Если ничего не путаю, то в некоторых последних дешевых моделях от APC аккумулятор якобы несъемный. В смысле, что привычного люка для доступа к аккумулятору нет, а разборке корпуса мешают гарантийные пломбы на винтах.
      Маразм, но нам такие UPSы пришлось в СЦ отправлять для замены поддохших аккумуляторов, дабы гарантию не нарушить, а гарантия там важна — очень ненадежные модели оказались (по сравнению с более дорогими предшественниками).
      P.S. Да, на грош пятаков не купишь, но скажите это большому начальству :)


      1. LevOrdabesov Автор
        23.08.2018 19:40

        Ключевое слово «дешёвый» :)
        А может, опять какие-нибудь нормы-регуляции, «неспециалист не может лазать в 220В, производитель обязан предусмотреть невозможность доступа».
        Хотя по опыту общения с европейскими специалистами – только смех. Судя по всему, в их ПТУ три года учат читать инструкцию, причём довольно безуспешно.


  1. firedragon
    23.08.2018 19:20

    Почему не использовали WMI?
    Или тот же путти? В конце концов практически любой UPS подключается в систему как виртуальный com port. Дальше читайте чем угодно vbs, powershell, wmi, putty из cmd.


    1. LevOrdabesov Автор
      23.08.2018 19:25

      Насколько я понимаю, NUT это и делает.
      Но протоколы разные, а некоторое ещё и закрытые.


      1. firedragon
        23.08.2018 20:28

        Первое что нашлось, это описание протокола
        networkupstools.org/protocols/belkin-universal.html

        Кроме этого довольно «водянистая» статья по основам, что примечательно аж про ХР
        www.ixbt.com/power/ups/smart_battery.shtml

        И вот самая свежая
        social.technet.microsoft.com/Forums/lync/en-US/903840d4-cad1-4fc4-9b76-c3cbefbfc590/ups-scripts-to-shutdown-servers?forum=ITCG
        Правда применима не ко всем, PowerShell стоит не у всех


        1. LevOrdabesov Автор
          23.08.2018 20:55

          Первое что нашлось, это описание протокола
          networkupstools.org/protocols/belkin-universal.html

          По поводу протоколов: вот эта таблица networkupstools.org/stable-hcl.html более показательна. Описаний там больше одного. Я люблю велосипеды, но совсем уж лишнюю работу делать тоже смысла нет.

          Кроме этого довольно «водянистая» статья по основам, что примечательно аж про ХР
          www.ixbt.com/power/ups/smart_battery.shtml

          Статья про APC, для них есть даже свой и неплохой apcupsd, например (что характерно, другие ИБП он не поддерживает).

          social.technet.microsoft.com/Forums/lync/en-US/903840d4-cad1-4fc4-9b76-c3cbefbfc590/ups-scripts-to-shutdown-servers?forum=ITCG


          Там информацию вообще получают по snmp:
          Invoke-SNMPget «172.20.3.245» «1.3.6.1.2.1.33.1.6.3.2»



    1. quwy
      24.08.2018 01:19

      практически любой UPS подключается в систему как виртуальный com port

      Это мягко говоря давно не так. Сегодня это или «сырой» HID, или Smart Battery, или полностью свой велосипед с драйвером уровня ядра в комплекте.


      1. firedragon
        24.08.2018 10:02

        Возможно стоит планировать покупки? И покупать единообразные модели, как бонус отсутствие «зоопарка» и единый интерфейс в том же заббиксе или любой другой системе мониторинга.
        Если Smart Battery, то достучатся можно через стандартный wmi.
        А если этот UPS не предоставляет (общепринятого интерфейса) то зачем он нужен в бизнесе? Конечный пользователь очень не понятлив, да и ошибается.


        1. LevOrdabesov Автор
          24.08.2018 10:21

          От меня начинает ускользать смысл нашей дискуссии.
          Вы хотите, чтобы я всё на WMI переделал?


          1. firedragon
            24.08.2018 10:45

            Это ваш выбор. Обычно между удобством и следованием стандарту выбирают стандарт.
            WMI работает по моему еще с windows 95, никаких дополнительных библиотек не нужно ставить. Плюс огромное количество людей уже решало такую проблему и описало ее (я так думаю).

            Для NUT нужны сторонние библиотеки, которых в комплекте установки нет. Setup об этом говорит, но кто ж его читает :) Плюс часто в системах уже есть софт с этими библиотеками. Точно нужны: libeay32.dll, ssleay32.dll, libgcc_s_dw2-1.dll (есть в папке NUT-bin), libusb.dll (есть в дистрибутиве libusb), msvcr71.dll (в составе Net Framework 1.1). Все эти файлы должны быть в папке Windows\System32;

            Вот это вообще ад. Ради интереса напишите все модели UPS, возможно я смогу вам помочь.


            1. LevOrdabesov Автор
              24.08.2018 14:15

              Попробую с WMI, как будет время.

              Библиотеки не для UPSов. И к тому же очень распространённые. Я указал все просто для полноты описания. msvcr71 – нативная библиотека; libeay32.dll, ssleay32.dll – OpenSSL для шифрованной передачи данных, они очень много где используются; libgcc_s_dw2 – библиотека компилятора GCC, тоже очень распространённая.
              Спорная из них только libusb, т.к. «неподписанные драйверы». Но она open-source и постоянно обновляется. Для сравнения, не могу сейчас найти драйвер сетевого контроллера Intel под Windows server 2012 R2. Обновить не озаботились, а родной Microsoft'овский глючен. Зато подписанный, да.


              1. firedragon
                24.08.2018 16:17

                Дело как всегда в мелочах. По фэншую msvcr71 должна лежать в папочке WxS, еще хуже с ssleay32.dll, какая это версия? 0.9.7, 0.9.8, 1.0.1.
                Лучше складывать такие файлы в одной папке с исполнимым файлом, меньше головной боли, хотя и больше места занимают.


  1. SergeyMax
    23.08.2018 19:57

    Любое осмысленное действие из списка «как понять, почему не работает» по времени получится дольше, чем махнуть батарею, и если не заработало — махнуть целиком UPS. И это не говоря о мутных плясках с библиотеками, неподписанными драйверами, и прочими костылями. Автор явно хороший сисадмин, и поэтому просто мается от безделья)


    1. LevOrdabesov Автор
      23.08.2018 20:02

      Хех, спасибо :)
      В числе причин также присутствуют «бюджет» и «интересно», на самом деле.


  1. igrblkv
    24.08.2018 13:30

    LevOrdabesov, а с тем что некоторое ПО от производителя хочет сугубо монопольно использовать предоставленный COM-порт или HID-устройство Вы не сталкивались?
    И как в этом случае осуществлять планируемое выключение, если уже пять минут напряжение не восстанавливается и батарейки осталось меньше половины?
    Ну и за компанию можно роутер/NAS/медиаплеер выключить, когда они к тому-же ИБП подключены?


    1. LevOrdabesov Автор
      24.08.2018 14:07

      ПО от производителя хочет сугубо монопольно использовать

      Да, так оно обычно и бывает.

      как в этом случае осуществлять планируемое выключение

      Я от производителя зарёкся ставить ПО, поэтому всё, что могу посоветовать – удалить.
      В NUT выключения настраиваются, в конфигах можно задать и время, и заряд, и команду на выключение (в т.ч. гибернацию, например).

      за компанию роутер/NAS/медиаплеер выключить
      Надо смотреть модели. У некоторых может быть power-save mode, тогда посылать им соответствующую команду. И как-то продумывать включение, это в любом случае. Лично пока не сталкивался, хотя идея адекватная, надо бы в паре роутеров так сделать.