- Мозаика системного администрирования
- Инструменты пользователя
- Инструменты сайта
- Network UPS Tools (NUT)
- Содержание
- Сервер — upsd
- upsd.conf
- upsd.users
- ups.conf
- upsdrvctl
- Клиент мониторинга — upsmon
- Клиент MS Windows
- WinNUT
- Windows NUT client
- Другие клиенты
- upslog
- upsrw
- upscmd
- Веб мониторинг
- Настройка
- Zabbix
- Лаборатория 01.01.09
- суббота, 28 июля 2012 г.
- NUT и настройка клиентов
- Настройка 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
Если переменная не поддерживается, возникает ошибка:
Лаборатория 01.01.09
Вычислительная машина ценна ровно настолько, насколько ценен использующий её человек. Но он обязан иметь идеи. Норберт Винер. «Кибернетика, или Управление и связь в животном и машине».
суббота, 28 июля 2012 г.
NUT и настройка клиентов
Имея один UPS, подключил на его нагрузку три сервера — FreeNAS, FreeBSD и Windows XPSP3. Встала задача организовать их корректное отключение в случае продолжительного отсутствия электропитания, когда заряд батареи снижается ниже некоторого порогового значения в %. Для этого я выбрал FreeNAS в роли ведущего, оповещающего по сети состояние UPS, а в роли клиентов — FreeBSD и Windows. На FreeNAS запущена и настроена UPS служба, которая реализована пакетом NUT (Network UPS Tools) и работает в режиме master с удаленным мониторингом. Разберемся сначала с Windows клиентом NUT.
В интернете нашел всего две программы реализующие функции клиента NUT. Первая из них WinNutClient обладает GUI интерфейсом для отображения текущего состояния UPS, вторая WinNUT такой возможностью не обладает, но может работать в качестве службы. Ее и будем юзать.
Скачав установочный пакет WinNUT распакуем и проинсталлируем его выбрав вариант Full instalation. В главном окне программы отметим флажок Install As Service, чтобы задействовать службу как сервис Windows, и флажок Automatic Startup, чтобы сервис стартовал после загрузки Windows.
Теперь перейдем к настройке, которая заключается в правке файла upsmon.conf. Рассмотрим ключевые моменты.
1) Чтобы реагировать на сигналы, надо определить ведущую систему:
MONITOR ups@enconas 1 root freenas slave
Здесь после @ идет сетевое имя компьютера на котором работает NUT сервер. По умолчанию для связи используется порт 3493, но его можно переопределить, задав явное значение через двоеточие (например enconas:5678). Значение 1 указывает на количество батарей UPS. Далее идут логин и пароль на доступ к серверу.
2) После получения от NUT сервера сигнала FSD, необходимо завершить работу Windows:
SHUTDOWNCMD «shutdown -s»
3) Перед отключением Windows желательно об этом сообщить пользователю:
NOTIFYCMD «c:\\Program Files\\WinNUT\\alertPopup.exe»
Закончив этап настройки можно запустить сервис на исполнение. Для этого жмем кнопку «Apply and Start WinNUT». Состояние строки Status: должно измениться с Not Running на Running as Service, а в логе не должно быть ошибок!
Настройка 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 путем вывода всех параметров ИБП командой:
На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.