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

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

    Так думал и я, особенно после череды ИБП с отказавшей электроникой. Ситуацию усугублял софт от производителей. Он, как бы это помягче выразиться, барахло. Причем у всех – 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 – пишите, разберёмся вместе.

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

    Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

    Какой софт вы используете для мониторинга ИБП рабочих станций?

    • 19,6%Софт от производителя19
    • 25,8%Zabbix / Cacti / подобное25
    • 25,8%Не использую25
    • 25,8%Не использую, но после прочтения статьи решил, что надо бы25
    • 3,1%Другое, рассказал в комментариях3
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 27

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

      Какая же там возня??? Открутить пару винтиков, отсоединить несколько проводов, вынуть старые аккумуляторы, установить новые, собрать всё обратно. Это же не смартфон, где действительно без навыков и спец инструмента будет тяжко. Или это как в анекдоте про новых русских, меняющих Мерседес, когда заполняется пепельница?
        0
        Я тоже не считаю, что это сложно.
        Но люди и организации бывают разные.
          0
          Наверное Вы не разбирали новые ИБП от APC, например Back-UPS BX500CI — «непередаваемые ощущения». Согласен, в большинстве, проблем нет, но только не с этими.
            0
            Некоторые действительно неочевидно сконструированы.
            В том числе поэтому не все берутся с ними возиться, всё так.
          0
          Если ничего не путаю, то в некоторых последних дешевых моделях от APC аккумулятор якобы несъемный. В смысле, что привычного люка для доступа к аккумулятору нет, а разборке корпуса мешают гарантийные пломбы на винтах.
          Маразм, но нам такие UPSы пришлось в СЦ отправлять для замены поддохших аккумуляторов, дабы гарантию не нарушить, а гарантия там важна — очень ненадежные модели оказались (по сравнению с более дорогими предшественниками).
          P.S. Да, на грош пятаков не купишь, но скажите это большому начальству :)
            0
            Ключевое слово «дешёвый» :)
            А может, опять какие-нибудь нормы-регуляции, «неспециалист не может лазать в 220В, производитель обязан предусмотреть невозможность доступа».
            Хотя по опыту общения с европейскими специалистами – только смех. Судя по всему, в их ПТУ три года учат читать инструкцию, причём довольно безуспешно.
          0
          Почему не использовали WMI?
          Или тот же путти? В конце концов практически любой UPS подключается в систему как виртуальный com port. Дальше читайте чем угодно vbs, powershell, wmi, putty из cmd.
            0
            Насколько я понимаю, NUT это и делает.
            Но протоколы разные, а некоторое ещё и закрытые.
              0
              Первое что нашлось, это описание протокола
              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 стоит не у всех
                0
                Первое что нашлось, это описание протокола
                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»


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

              Это мягко говоря давно не так. Сегодня это или «сырой» HID, или Smart Battery, или полностью свой велосипед с драйвером уровня ядра в комплекте.
                0
                Возможно стоит планировать покупки? И покупать единообразные модели, как бонус отсутствие «зоопарка» и единый интерфейс в том же заббиксе или любой другой системе мониторинга.
                Если Smart Battery, то достучатся можно через стандартный wmi.
                А если этот UPS не предоставляет (общепринятого интерфейса) то зачем он нужен в бизнесе? Конечный пользователь очень не понятлив, да и ошибается.
                  0
                  От меня начинает ускользать смысл нашей дискуссии.
                  Вы хотите, чтобы я всё на WMI переделал?
                    0
                    Это ваш выбор. Обычно между удобством и следованием стандарту выбирают стандарт.
                    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, возможно я смогу вам помочь.
                      0
                      Попробую с WMI, как будет время.

                      Библиотеки не для UPSов. И к тому же очень распространённые. Я указал все просто для полноты описания. msvcr71 – нативная библиотека; libeay32.dll, ssleay32.dll – OpenSSL для шифрованной передачи данных, они очень много где используются; libgcc_s_dw2 – библиотека компилятора GCC, тоже очень распространённая.
                      Спорная из них только libusb, т.к. «неподписанные драйверы». Но она open-source и постоянно обновляется. Для сравнения, не могу сейчас найти драйвер сетевого контроллера Intel под Windows server 2012 R2. Обновить не озаботились, а родной Microsoft'овский глючен. Зато подписанный, да.
                        0
                        Дело как всегда в мелочах. По фэншую msvcr71 должна лежать в папочке WxS, еще хуже с ssleay32.dll, какая это версия? 0.9.7, 0.9.8, 1.0.1.
                        Лучше складывать такие файлы в одной папке с исполнимым файлом, меньше головной боли, хотя и больше места занимают.
              0
              Любое осмысленное действие из списка «как понять, почему не работает» по времени получится дольше, чем махнуть батарею, и если не заработало — махнуть целиком UPS. И это не говоря о мутных плясках с библиотеками, неподписанными драйверами, и прочими костылями. Автор явно хороший сисадмин, и поэтому просто мается от безделья)
                0
                Хех, спасибо :)
                В числе причин также присутствуют «бюджет» и «интересно», на самом деле.
                0
                LevOrdabesov, а с тем что некоторое ПО от производителя хочет сугубо монопольно использовать предоставленный COM-порт или HID-устройство Вы не сталкивались?
                И как в этом случае осуществлять планируемое выключение, если уже пять минут напряжение не восстанавливается и батарейки осталось меньше половины?
                Ну и за компанию можно роутер/NAS/медиаплеер выключить, когда они к тому-же ИБП подключены?
                  0
                  ПО от производителя хочет сугубо монопольно использовать

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

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

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

                  за компанию роутер/NAS/медиаплеер выключить
                  Надо смотреть модели. У некоторых может быть power-save mode, тогда посылать им соответствующую команду. И как-то продумывать включение, это в любом случае. Лично пока не сталкивался, хотя идея адекватная, надо бы в паре роутеров так сделать.
                  0
                  Добрый вечер!
                  Подскажите:
                  при запуске upsdmon.exe вываливается ошибка отсутствует libgcc, хотя она есть в папке Windows/system32?

                    0
                    Попробуйте положить dll в папку с exe.
                      0
                      помогло.

                      Есть еще одно: если я правильно понимаю, то NUT при установке должен сам создавать непустые конфиги, а у меня получаются пустые?
                      Где искать проблему
                      зы: windows10 x64
                        0
                        На десятке, кстати, не тестировал совсем.
                        Конфиги точно должны быть не-пустые, там куча закомментированных примеров по дефолту.
                    0
                    Хорошо, если ИБП управляемый, на серверах так оно и есть, можно мониторить, а на рабочих станциях часто встречаются отдельно стоящие ИБП, которые не передают данные — соответственно, мониторить нечего. И если уже мониторить — то наиболее грамотный путь — загнать всё в одну систему мониторинга, например, в тот же Zabbix.
                      0
                      С какого-то момента принципиально начал брать ИБП с интерфейсом передачи данных.
                      А Zabbix слишком тяжеловесный, а мой вкус.
                        0
                        С какого-то момента принципиально начал брать ИБП с интерфейсом передачи данных.
                        это правильно, и лучше всего APC — только дороговато получается.
                        Zabbix как пример, если есть система мониторинга — то логично и ИБП в нее включить, чтобы бвло в одном месте.

                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                    Самое читаемое