- Мозаика системного администрирования
- Инструменты пользователя
- Инструменты сайта
- Network UPS Tools (NUT)
- Содержание
- Сервер — upsd
- upsd.conf
- upsd.users
- ups.conf
- upsdrvctl
- Клиент мониторинга — upsmon
- Клиент MS Windows
- WinNUT
- Windows NUT client
- Другие клиенты
- upslog
- upsrw
- upscmd
- Веб мониторинг
- Настройка
- Zabbix
- Сервис управления бесперебойным питанием в сети (NUT)
- Сервер NUT
- Настройка клиентов NUT
- Проверка системы
- Настройка мониторинга состояния ИБП SNR серии Element в Windows
- Network UPS Tools
- Настройка NUT для управления ИБП с нескольких серверов
Мозаика системного администрирования
Инструменты пользователя
Инструменты сайта
Network UPS Tools (NUT)
Содержание
Network UPS Tools (NUT) — комплект программ для мониторинга ИБП .
Сервер — upsd
upsd отвечает за передачу данных от драйверов к клиентским программам по сети. Его следует запускать сразу после upsdrvctl в сценариях запуска вашей системы.
По возможности, upsd следует поддерживать в рабочем состоянии, поскольку это единственный источник информации о состоянии для клиентов мониторинга, таких как upsmon.
upsd.conf
upsd.users
ups.conf
Нужно обязательно дать права на файл устройства (порта), иначе будет ошибка:
Для того, чтобы после перезагрузки были правильные права на файл, нужно создать файл:
upsdrvctl
UPS driver controller
Клиент мониторинга — upsmon
upsmon предоставляет важную функцию, которую вы ожидаете найти в ПО для мониторинга ИБП — это безопасное отключение при сбое питания.
В иерархии ПО NUT это клиент. Он отдельно описан в документации, так как он очень важен. Вы настраиваете его, указывая все ИБП, информацию о которых необходимо получать, это делается в файле в upsmon.conf .
В файле nut.conf нужно указать режим:
СИСТЕМА | ИМЯ_ИБП @СЕРВЕР |
PV | Целое число, равное числу блоков питания, которые ИБП питает в этой системе. Большинство обычных компьютеров имеют один блок питания, и ИБП питает его, поэтому это значение будет 1. Если нужно только контролировать ИБП , который на самом деле не подаёт питание на эту систему нужно использовать значение 0. Это полезно, когда вы хотите, чтобы upsmon только оправлял уведомления об изменениях статуса ИБП |
ПОЛЬЗОВАТЕЛЬ | Имя пользователя |
ПАРОЛЬ | Пароль пользователя |
ТИП | Тип: master или slave |
Клиент MS Windows
WinNUT
WinNUT — The Windows Network UPS Tools
WinNUT is currently being replaced by a full port to Windows, part of the official NUT distribution. MSI packages are available too.
Windows NUT client
Графический интерфейс к WinNUT
Windows NUT client is a partial port of KNutClient to Windows using AutoIt scripting language.
Другие клиенты
Клиенты общаются с upsd по сети и делают полезные вещи с данными из драйверов. Существуют инструменты для доступа к командной строке и несколько специальных клиентов, которые можно запускать через ваш веб-сервер как программы CGI.
upsc — это быстрый способ узнать, правильно ли работают ваши драйверы и upsd .
upsc -L | список всех настроенных ИБП |
upsc ИМЯ_ИБП | список всех доступных переменных с их текущими значениями |
upsc ИМЯ_ИБП ИМЯ_ПЕРЕМЕННОЙ | текущее значение переменной |
Для подавления сообщения:
Нужно использовать следующую конструкцию:
upslog
upslog будет записывать информацию о состоянии из upsd в файл через заданные промежутки времени. Вы можете использовать это для создания графиков или отчетов с помощью других программ.
Пример вывода протокола в файл с помощью upslog
upsrw
upsrw требует прав администратора для изменения настроек оборудования. Обратитесь к upsd.users для получения информации об определении пользователей в upsd .
upscmd
upscmd требует прав администратора для запуска мгновенных команд. Чтобы определить пользователей и пароли в upsd , см. upsd.users
Веб мониторинг
Настройка
Zabbix
Мониторинг через Zabbix, работает через Zabbix агент.
Параметр | Имя переменной | Примечания |
---|---|---|
Имя драйвера NUT | driver.name | |
Модель ИБП | ups.model | |
Нагрузка (%) | ups.load | |
Напряжение батарей (В) | battery.voltage | |
Напряжение на входе (В) | input.voltage | |
Напряжение на выходе (В) | output.voltage | |
Номинальная нагрузка (ВА) | ups.power.nominal | |
Производитель ИБП | ups.mfr | |
Расчётное время работы от батарей (Мин.) | battery.runtime | |
Состояние | ups.status | Эта переменная может содержать несколько значений, вот пример: |
для этого введены переменные ups.status-2 … ups.status-5 , если эти переменные не содержат значений то возвращается 0
возвращается 0 , также она может содержать несколько значений, для этого введены переменные ups.alarm-2 … ups.alarm-10
Если переменная не поддерживается, возникает ошибка:
Сервис управления бесперебойным питанием в сети (NUT)
Как бы мы не уходили от понятия железа в облака, если есть в локальной сети серверное оборудование, то сразу возникает вопрос как бороться с перепадами и стабильностью напряжения и как быть когда пропадает питание в сети?
Решение обычно — это развертывание некой системы, которая обеспечит управление мягким отключением питания нашего оборудования. Как правило, производители систем бесперебойного питания (ИБП) имеют свою системы, но не всегда они бесплатны и доступны, например для простых моделей.
Для реализации подобной задачи развернем NUT в локальной сети.
NUT — NetworkUPSTools программа мониторинга и управления различными ИБП. Состоит из сервера и клиента. Сервер мониторит состояние ИБП и передает команды на клиентов.
В качестве сервера выбран Linux Debian 10, тут нет сильных отличий при установке. Клиентами будут выступать Linux и Windows машины.
Сервер NUT
Установим NUT на сервер:
Список поддерживаемых ИБП (драйвера) можно посмотреть тут — /usr/share/nut/driver.list или выбрать драйвер для устройства на сайте — https://networkupstools.org/stable-hcl.html
Какое именно устройства подключено и на каком порту смотрим командой:
Посмотрим подробно информацию про наш ИБП:
Настройки NUT
Определим драйвер, в данном примере — usbhid-ups и настроим параметры:
Настройка драйвера NUT для работы с нашим ИБП
Чтобы NUT мог управлять ИБП через USB, необходимо разрешить данные действия в системе. Для этого пропишем правила в udev.
udev — это подсистема управления устройствами, в псевдо-файловой системе /dev находятся активные подключенные устройства к системе.
Создаем файл с правилом для udev:
Перезапустим сервис udev:
и проверим настройки:
Если вывод похож на этот, то настроено правильно.
Настройка адресов и портов прослушивания подключений к NUT
В /etc/nut/upsd.conf раскомментируем или добавим:
Теперь настроим пользователей и пароли для подключения клиентских устройств к серверу NUT:
Пользователю upsadm разрешили управлять NUT через утилиту upscmd, менять все параметры ИБП (строка actions = SET и instcmds = ALL). Если нужно разрешить менять только определенные параметры, то их нужно описать в опции instcmds, например:
Запустим сервер NUT и проверим статус:
Проверим слушает ли NUT настроенные порты:
Сервер наш готов.
Протестируем соединение с ИБП, должно сообщить о своем состоянии:
Настройка клиентов NUT
Подготовим пользователей клиентов от имени которых будет подключение к NUT. В /etc/nut/upsd.conf добавим секции с пользователями:
- local_mon — пользователь локального (серверного) клиента
- linux_mon — пользователь linux клиента
- win_mon — пользователь windows клиента
/etc/nut/upsmon.conf и приведем его к виду:
Разберем значения MONITOR:
- apc@localhost — имя и адрес ИБП (берется из /etc/nut/ups.conf)
- 1 — количество ИБП
- srv_mon srv_passwd — логин и пароль
- master — опция которая определяет, что данный сервер будет выключен после отключения всех slave серверов
Настройка клиента NUT на сервере под управлением Linux
Для разнообразия в качестве клиента будет выступать Linux CentOS 7, по сути клиента для Debian систем мы настроили на сервере.
/etc/ups/upsmon.conf и приведем к виду:
Перезапустим сервис и включим автостарт при загрузке:
Проверим подключение к серверу NUT:
Настройка клиента Windows
Скачиваем NUT клиент для Windows — и устанавливаем.
В папку где установили NUT в bin находим и кладем библиотеки OpenSSL, о которых предупреждал при установке, ssleay32.dll, libssl32.dll и libeay32.dll. Библиотеки входят в дистрибутив openssl или просто находим отдельными файлами.
NUT\etc\nut.conf.sample переименовываем в NUT\etc\nut.conf и правим:
Аналогично upsmon.conf.sample в upsmon.conf и правим:
Далее через Пуск — Программы — NUT:
Или через консоль:
Еще один рабочий вариант — это использовать приложение WinNUT с GUI. Настройки более понятны и просты, есть подробный readme.
Проверка системы
Протестируем нашу систему. Отправим сигнал отключения, наши сервера поочередно пойдут выключаться и в конце выключится сервер NUT.
Настройка мониторинга состояния ИБП SNR серии Element в Windows
Решаем задачу по мониторингу ИБП SNR серии Element, 1000 VA, 24VDC. В комплекте с ним шла утилита хх-летней давности UPSilon 2000, которая кроме как через email (и пейджер ;)) оповещать о событиях не умеет.
Network UPS Tools
Установка
Скачиваем msi пакет для Windows Windows (complete port, Beta) и устанвливаем. Входе установки у меня возникла ошибка установки NUT UPS драйвера . Пришлось скачивать этот: http://sourceforge.net/projects/libusb-win32/. В составе этого драйвера есть утилита inf-wizard.exe с помощью которой можно легко определить какое из usb устройств наш ИБП и установить драйвер в систему, особенно актуально для установки в режиме Windows Server Core.
Дальше нужно найти недастующие библиотеки (которые отсутствуют в инсталяторе), а именно:
- libeay32.dll
- ssleay32.dll
- msvcr71.dll
- libgcc_s_dw2-1.dll
Их можно скачать у меня в составе архива или найти самостоятельно.
Настройка
Минимальная настройка конфигурации в моем случае.
runtimecal — Для подсчета этого параметра нужно тестировать сам ИБП. Нужно разредить полностью с определенным процентом нагрузки и замерить время. Например в приведенном верху примере при 86% нагрузке ИБП разряжается за 900 секунд, а при 42% нагрузке за 1960 секунд.
Проверить правильность настроек (после запуска службы) можно так:
Запустить NUT для отладки как консольную программу можно так:
Обязательно нужно проверить настройки брандмаэура, открыть TCP порт 3493.
На Windows Server Core, NUT на отрез отказывался корректно запускаться как служба. Пришлось в планировщике задач прописать следующий powershell скрипт выполняющийся при старте системы:
Мониторинг
Мониторить будем с помощью icinga2 .
Вариант опроса ИБП из Linux
Подключаем плагин check_nut_plus как CheckCommand:
Настройка NUT для управления ИБП с нескольких серверов
NUT — это Network UPS Tools или набор программных компонентов, предназначенных для мониторинга силовых устройств, таких как источники бесперебойного питания (ИБП), блоки распределения питания, солнечные контроллеры и блоки питания серверов.
В среде Linux — NUT — это стандарт де-факто для управления ИБП, который позволяет производить мониторинг ИБП не только с сервера к которому подключен ИБП, но и по сети, а так же выполнят ряд действий при наступлении определенных условий. Например, в случае когда заряд батарей ИБП истощается NUT может произвести корректное завершение работы серверов и уведомить об этом системного администратора.
Как настроить NUT на Linux и Windows серверах ? Читаем ниже.
Исходные данные:
1. В локальной сети организации есть 2 сервера под управлением Debian 8.9 (jessie) и 1 сервер под управлением Windows Server 2012 R2;
2. Есть ИБП компании APC, модель Smart-UPS 1000. ИБП подключен по USB к одному из серверов Debian 8.9 (jessie);
Задача:
На сервере Debian 8.9 к которому подключен ИБП установить серверную часть NUT и настроить клиентскую часть NUT на этом сервере и других серверах. В случае перехода питания серверов на ИБП и истощения заряда батарей ИБП нужно произвести корректное завершение работы всех серверов.
Распределение IP адресов во внутренней сети компании между серверами:
192.168.100.1 (srv1.mycompany.ru) — Сервер Debian 8.9 (jessie) к которому подключен APC Smart-UPS 1000 по USB — на нем будет серверная часть NUT и клиентская;
192.168.100.2 (srv2.mycompany.ru) — Сервер Debian 8.9 (jessie) — на нем будет клиентская часть NUT;
192.168.100.3 (srv3.mycompany.ru) — Сервер Windows 2012 R2 — на нем будет клиентская часть NUT;
Настройка серверной части NUT.
1. Проверим факт обнаружения нашего ИБП ядром Linux с помощью утилиты lsusb:
Для ИБП марки APC Smart-UPS значения idVendor и idProduct будут 051d и 0002 соответственно.
2. Установка NUT (серверной части на хосте 192.168.100.1):
Далее отредактируем файл /etc/nut/ups.conf и приведем его к виду:
Этой минимальной конфигурации хватит для нашего ИБП.
Как Вы уже догадались в файле /etc/nut/ups.conf описываются все наши ИБП, а так же драйвер и их параметры для работы с NUT.
Нашему ИБП мы присвоили имя apc и будем использовать драйвер usbhid-ups.
Драйвер usbhid-ups гарантировано работает с ИБП Smart-UPS компании APC.
Более детально со списком драйверов и списком ИБП каких фирм может работать NUT описано на этой странице. Список параметров драйвера usbhid-ups можно посмотреть на этой странице.
3. Настройка драйвера NUT для работы с нашим ИБП.
Далее нам нужно установить права на наше USB устройство чтобы драйвер NUT смог работать с ним.
Для этого создадим правило /etc/udev/rules.d/90-nut-ups.rules для udev со следующим содержимым:
Далее нужно перечитать все правила, для этого выполним:
Для тех кто хочет понять в чем тут дело, объясняю:
При выводе информации по нашему ИБП с помощью lsusb мы можем увидеть строку «Bus 004 Device 003»:
Она говорит, что ядро Linux при подключении нашего ИБП по USB присвоило ему номер шины обмена данными 4 и id устройства 3, само наше устройство соответственно будет находится по такому пути /dev/bus/usb/004/003 а владельцем будут пользователь root и группа root с правами 664 (crw-rw-r—), но для работы драйвера NUT этого не достаточно, драйвер в таком случае не сможет управлять устройством.
С помощью файла /etc/udev/rules.d/90-nut-ups.rules и утилиты udevadm мы задали правило для сервиса udev который управляет периферией, получая от Linux ядра разного рода уведомления. По этому правилу для нового устройства с определенным idVendor и idProduct владельцем будет назначаться группа nut.
Если интересно, то запросить информацию у udev по нашему устройству можно так:
4. Теперь запустим все драйвера NUT описанные в /etc/nut/ups.conf с помощью команды:
Если в файле /etc/nut/ups.conf у Вас описаны несколько ИБП, то остановить конкретный драйвер или запустить его можно так:
5. Теперь опишем права доступа к нашему серверу NUT для доступа клиентских ОС по сети, за это отвечает файл /etc/nut/upsd.conf
Директива LISTEN задает адрес и порт на котором будет принимать соединения демон upsd (Сервер NUT).
ВНИМАНИЕ! Директивы ACL, ACCEPT, REJECT в файле /etc/nut/upsd.conf больше не используется и является устаревшей.
6. Теперь опишем пользователей и пароли для подключения клиентских устройств к серверу NUT, за это отвечает файл /etc/nut/upsd.users:
В секции [admin] мы описали пользователя для управления NUT через утилиту upscmd, а так же разрешили менять все параметры самого ИБП (строка actions = SET и instcmds = ALL).
Если нужно разрешить пользователю admin менять только определенные параметры, то их нужно описать в опции instcmds, например так:
Секции [local_mon] [srv2_mon] и [srv3_mon] описывают пользователей для клиентских ОС, на них будет стоять клиентская часть NUT.
В этих секциях мы указали индивидуальные пароли (опция password) и статус этих пользователей (опция upsmon).
Для пользователя local_mon мы указали в опции upsmon значение master, это сделано не спроста, дело в том что на том же ПК, где у нас будет работать сервер NUT мы настроим и клиентскую часть NUT и когда сервер NUT отправит всем клиентам сигнал о критическом состоянии батарей ИБП, то master должен выключиться самым последним из серверов, дождавшись выключения всех slave серверов.
ВНИМАНИЕ! Директива allowfrom в файле /etc/nut/upsd.users больше не используется и является устаревшей.
7. Настроим режим работы NUT на сервере 192.168.100.1 (работа в режиме сервера), для этого в файле /etc/nut/nut.conf напишем:
8. Запустим сервер NUT:
И проверим его статус:
Проверим открытые порты:
Настройка клиентской части NUT на серверах.
1. Настроим клиент мониторинга (upsmon), который будет заниматься слежением за состоянием ИБП и правильным завершением работы сервера при отсутствии электричества и полном разряде батарей. (Первый клиент у нас будет на том же хосте, что и сервер NUT, то есть на 192.168.100.1):
Для этого отредактируем файл /etc/nut/upsmon.conf и приведем его к виду:
Директиву NOTIFYCMD в которой как правило задают запуск планировщика upssched, а далее настраивают upssched.conf мы не используем. Если Вам нужно настроить уведомления на email или в мессенджеры и кастомизировать процедуру выключения, то тогда нужно настраивать планировщик. Но нам это пока не нужно.
Самое интересное здесь — это директива
В ней описывается подключение к нашему серверу NUT, формат здесь простой:
MONITOR @
— берется с сервера NUT из файла /etc/nut/ups.conf, в нашем случае apc;
— думаю тут все понятно, для локального клиента это localhost;
— как правило это 1, если Вам нужно контролировать переход на питание от ИБП, но выключать этот сервер по сигналу NUT Вы не хотите, то установите этот параметр в 0;
и — думаю тут тоже все понятно, данные берутся с сервера NUT из файла /etc/nut/upsd.users;
— если указана опция master, то данный сервер будет выключаться после выключения всех slave серверов;
Так же нужно остановиться на директиве POWERDOWNFLAG и разъяснить как происходит отключение системы в случае когда заряд батарей ИБП истощается.
Итак, в режиме работы от батарей, перед самым их истощением, ИБП генерирует сообщение «battery low». Демон upsmon получает это сообщение от сервера NUT (от upsd) и обрабатывает этот сигнал, вызывая команду описанную в опции SHUTDOWNCMD для корректной остановки системы. Более детально данный процесс можно описать следующей последовательностью:
1. ИБП генерирует событие «battery low»;
2. upsmon получает данный сигнал от сервера NUT и инициирует выключение ПК;
3. Создается специальный файл POWERDOWNFLAG, являющийся признаком того, что система находится в режиме отключения в связи с истощением батарей ИБП;
4. Выполняется команда SHUTDOWNCMD;
5. RC-сценарий использует проверку флага POWERDOWNFLAG для предотвращения так называемой «энергетической гонки» (power race);
«Энергетической гонкой» называется ситуация, когда ИБП переходит в режим работы от сети вскоре после генерации сигнала «battery low», в процессе останова системы. В этом случае компьютер, настроенный на автоматическое включение после сбоя электропитания окажется заложником собственной «осторожности», ведь фактически никакого сбоя не произойдет. Многие современные ИБП имеют механизмы разрешения такой ситуации и дополнительного анализа POWERDOWNFLAG флага на стороне ОС как правило не нужно, но знать про это необходимо.
Теперь перезапустим клиента NUT командой
И проверим его статус:
Проверить подключение к серверу и вывести все параметры ИБП можно командой:
Посмотреть значение какого-то конкретного параметра можно указав дополнительно его имя:
Кроме того, как я писал выше есть более сложный клиент (upscmd), который позволяет не только просматривать настройки, но и выполнять команды.
Список доступных команд можно увидеть вот так:
2. Теперь настроим клиент мониторинга NUT (upsmon) на сервере под управлением Debian Linux (хост 192.168.100.2):
Отредактируем файл /etc/nut/upsmon.conf и приведем его к виду:
Отредактируем файл /etc/nut/nut.conf и приведем его к виду:
Теперь перезапустим клиента NUT командой
И проверим подключение к серверу NUT путем вывода всех параметров ИБП командой:
3. Теперь настроим клиента мониторинга NUT (upsmon) на серверe под управлением Windows Server 2012 R2 (хост 192.168.100.3):
Скачиваем инсталлятор NUT под Windows с официального сайта и устанавливаем.
Скачиваем OpenSSL 1.0.2q (x86) или новее, но обязательно x86 версию (Win32 OpenSSL v1.0.2q Light) и устанавливаем, в процессе установки когда нас спросят копировать файлы библиотеки в системную паку — отказываемся, далее копируем 3 файла (ssleay32.dll, libssl32.dll и libeay32.dll) из «C:\OpenSSL-Win32\» в «C:\Program Files (x86)\NUT\bin\»
Переименовываем файл «C:\Program Files (x86)\NUT\etc\nut.conf.sample» в «C:\Program Files (x86)\NUT\etc\nut.conf» и пишем в конце файла:
Далее переименовываем файл «C:\Program Files (x86)\NUT\etc\upsmon.conf.sample» в «C:\Program Files (x86)\NUT\etc\upsmon.conf» и приводим его к виду:
Открываем консоль cmd с правами Администратор и рестартуем службу:
И наконец там же из cmd проверяем подключение к серверу NUT путем вывода всех параметров ИБП командой:
На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.