Инструменты пользователя

Инструменты сайта


freebsd:nut

NUT - Network UPS Tools

2015-03-01

Установил UPC Powercom KIN-2200AP-RM. Распиновку кабеля взял с сайта производителя http://www.pcm.ru/data/docs/cables.zip, подключил его COM-портом к серверу. Для мониторинга и управления выбрал NUT - Network UPS Tools.

Устанавка.

# cd /usr/ports/sysutils/nut
# make install clean
# rehash

Набор опций для установки: Options for nut-2.7.2_7

[X] SERIAL  SERIAL support
[ ] USB     USB support
[X] SNMP    SNMP support
[X] NEON    NEON XML/HTTP support
[ ] PDU     Powerman PDU support
[ ] HAL     HAL support
[ ] IPV6    IPV6 support
[X] CGI     Web CGI interface

Настройка
Необходимо создать каталоги для драйверов и сервера, выставить права:

# mkdir -p /var/state/ups
# chmod 0770 /var/state/ups
# chown uucp:wheel /var/state/ups

Определение драйвера для данного UPS:

# cat /usr/local/etc/nut/driver.list | grep Powercom
# cat /usr/local/etc/nut/driver.list | grep Powercom
"Powercom"      "ups"   "4"     "SMK"   ""      "blazer_ser"
"Powercom"      "ups"   "4"     "SXL"   ""      "blazer_ser"
"Powercom"      "ups"   "4"     "ULT"   ""      "blazer_ser"
"Powercom"      "ups"   "4"     "Trust 425/625" ""      "powercom"
"Powercom"      "ups"   "4"     "Advice Partner/King Pr750"     ""      "powercom"
"Powercom"      "ups"   "4"     "Black Knight PRO"      ""      "powercom"
"Powercom"      "ups"   "5"     "Black Knight PRO"      "USB (2009 models, product id: 00a6)"   "usbhid-ups (experimental)"
"Powercom"      "ups"   "4"     "Smart KING Pro (all Smart series)"     ""      "powercom"
"Powercom"      "ups"   "5"     "Smart KING Pro (all Smart series)"     "USB (2009 models, product id: 00a3)"   "usbhid-ups (experimental)"
"Powercom"      "ups"   "4"     "Imperial"      ""      "powercom"
"Powercom"      "ups"   "5"     "Imperial"      "USB (2009 models, product id: 00a2)"   "usbhid-ups (experimental)"
"Powercom"      "ups"   "4"     "Vanguard"      ""      "blazer_ser"
"Powercom"      "ups"   "5"     "Vanguard"      "USB (2009 models, product id: 0004 or 00a5)"   "usbhid-ups (experimental)"
"Powercom"      "ups"   "4"     "WOW"   "USB (<= 2009 models, product id: 0002)"        "powercom (requires 'usbserial' kernel module)"
"Powercom"      "ups"   "5"     "WOW"   "USB (2009 models, product id: 00a4)"   "usbhid-ups (experimental)"
"Powercom"      "ups"   "4"     "(various)"     "USB (<= 2009 models, product id: 0002)"        "powercom (requires 'usbserial' kernel module)"
"Powercom"      "ups"   "5"     "(various)"     "USB (2009 models, product id: 00a?)"   "usbhid-ups (experimental)"
"Powercom"      "ups"   "5"     "BNT-xxxAP"     "USB (product id: 0004)"        "usbhid-ups (experimental)"

Нужно использовать драйвер «powercom», поскольку KIN относится к серии King PRO.

Все конфигурационные файлы NUT находятся в директории «/usr/local/etc/nut».

Назначение:

  • ups.conf - настройки UPS драйвера для сбора данных
  • upsd.conf - настройка основного демона upsd для Network UPS Tools
  • upsd.users - контроль доступа к UPS демону (профили пользователей)
  • upsmon.conf - настройки монитора UPS демона

ups.conf

Необходимо добавить в конфигурационный файл UPS и его настроки подключения.
Скопирую дефолтный конфигурационный файл.

# cd /usr/local/etc/nut && cp ups.conf.sample ups.conf

В результате получим следующий результат:

# cat /usr/local/etc/nut/ups.conf
[klotik_ups]
      driver = powercom
      port = /dev/cuau1
      desc = "PowerCom KIN-2200AP RM"
      type = KIN

Опции:

  • [ups_name] - имя используется как адрес вашего UPS. Вы можете его изменить на любое произвольное имя.
  • driver - драйвер, используемый для работы с UPS.
  • port - порт, на котором висит UPS
  • desc - описание устройства (так, на всякий случай, чтобы не забыть).
  • sdorder - необязательный элемент. При наличии нескольких UPS подключенных к серверу можно выключать в определенном порядке. используя upsdrvctl можно выключить все 0s или 1s, 2s и тд. Для исключения последовательной остановки используйте -1.
  • nolock - необязательный элемент, его не рекомендуется использовать в его этом конфиге. Он служит для отключения блокировки порта при пользовании утилитой.
  • maxstartdelay - необязательный элемент. Может быть, заданна как глобальная переменная выше вашего первого UPS. Это значение определяет, сколько upsdrvctl будет ожидать окончания запуска драйвера. Данная возможность предоставляет стабильность в работе. Значение по умолчанию равно 45 секундам.
  • cable - Если драйвер UPS требует дополнительных параметров, можно указать их здесь. Индекс кабеля можно посмотреть тут «/usr/local/share/doc/nut/cables». Можено не указывать это значение, если подключение к UPS стандартно.

Допускается использование дополнительных опций, исходя из специфики оборудования (необходимо смотреть маны по конкретно используемому драйверу). В моем случае не совпадал тип с тем, который используется по умолчанию, соответственно пришлось конкретизировать. Значения по умолчанию для драйвера Powercom:

  • linevoltage = 230
  • manufacturer = PowerCom
  • modelname = Unknown
  • serialnumber = Unknown
  • type = Trust

upsd.conf

upsd отвечает за передачу данных от драйвера клиентским программам в сети. upsd должен находится под управлением и по возможности, как единственный источник состояния и мониторинга клиентов, таких как upsmon. upsd использует этот файл для контроля доступа к серверу и для установки других значений различных конфигурации. Этот файл содержит подробные сведения об управлении доступом, таким образом, обеспечивается безопасность.

Создание файла:

# cp upsd.conf.sample upsd.conf

Редактируем до следующего состояния:

# cat upsd.conf
LISTEN 127.0.0.1 3493
LISTEN 195.3.159.250 3493

Доступные опции:
MAXAGE <seconds> - по умолчанию 15 секунд. Это частота обновления данных клиентов после остановки драйвера UPS. Следует использовать только в том случае, если есть трудности с обновлением данных.
LISTEN <address> [<port>] - здесь указывается адрес и порт 3493 (по умолчанию) для прослушивания подключений.
MAXCONN <connections> - по умолчанию используется 1024 подключений. Каждый UPS, каждого LISTEN адреса и каждого клиента считается как одно подключение. Если на сервере заполнятся количество подключений, он больше не будет принимать новых входящих клиентских подключений.

upsd.users

Контроль доступа к UPS-демону (профили пользователей). Именно в этом файле указывается, кто и в какой мере будет контролировать и работать с утилитой.
Создадие файла:

# cp upsd.users.sample upsd.users

Правим конфиг до следующего состояния:

# cat upsd.users
[admin]
password = adminpass
actions = SET
instcmds = ALL 
upsmon master

Доступные опции.

Значения:
password - пароль пользователя
allowfrom - откуда разрешено подключатся

Каждый UPS монитор может определяться как один из трех возможных типов:
upsmon master - полные полномочия управлением питания подключенных к системе UPS под управлением upsmon, эта система отвечает за выключение разряженного аккумулятора. Выключение происходит после безопасного выключения всех Slave систем. Если ваш UPS подключен непосредственно к системе через последовательный порт, то для upsmon системы следует определить этот UPS как Master.
upsmon slave - эта система, под управлением upsmon и она не выключается непосредственно. Операционная система будет выключена перед отключением питания Master. Используйте этот режим при запуске монитора на других компьютерах работающих на том же UPS. И очевидно, что только один сервер может быть подключен к последовательному порту на UPS, коим будет является Master. Все остальные сервера будут Slave.
upsmon monitor-only - при этом режиме будут создаваться уведомления о состоянии или изменении работы батареи, переключении на линию и т.д., но не завершать работу системы.
actions - Действия пользователя с применением upsd.

  • SET - изменить значения определенных переменных в UPS
  • FSD - установка флага «принудительного выключения» для UPS

instcmds - разрешения пользователю на инициирование конкретных команд. «ALL» - разрешает использовать все команды. Существует множество команд, 'upscmd -l' показывает, что поддерживает оборудование. Пример несколько команд.

  • test.panel.start - старт теста передней панели
  • test.battery.start - старт теста батареи
  • test.battery.stop - остановка теста батареи
  • calibrate.start - запуск калибровки батареи
  • calibrate.stop - остановка калибровки батареи

upsmon.conf

upsmon предоставляет основные функции, которые собирается найти в программе мониторинга UPS, например это безопасное завершений работы при сбое питания. В многоуровневой схеме утилиты NUT это клиент.
Создание файла конфигурации:

# cp upsmon.conf.sample upsmon.conf

Редактируем конфиг до следующего состояния:

# cat upsmon.conf
 MONITOR Powercom@localhost 1 monmaster masterpass master
 MINSUPPLIES 1
 SHUTDOWNCMD "/sbin/shutdown -p now"
 POLLFREQ 5
 POLLFREQALERT 5
 HOSTSYNC 15
 DEADTIME 15
 POWERDOWNFLAG /etc/killpower
 # Выполнять команду после события NOTIFYFLAG с флагом EXEC. Указывает выполнения запуск событий для таймера.
 NOTIFYCMD /usr/local/sbin/upssched

# NOTIFYFLAG – Изменение поведение при случившихся событиях.
# По умолчанию посылает сообщением всем пользователям и записывает их в системный журнал.
# Пример флагов:
# SYSLOG – писать сообщение  в syslog 
# WALL   - писать сообщение всем пользователям системы
# EXEC   - выполнить  команду NOTIFYCMD
# IGNORE – нечего не делать
 NOTIFYFLAG ONLINE SYSLOG+EXEC
 NOTIFYFLAG ONBATT SYSLOG+EXEC
 NOTIFYFLAG LOWBATT SYSLOG+EXEC
 NOTIFYFLAG SHUTDOWN SYSLOG+WALL
 RBWARNTIME 43200
 NOCOMMWARNTIME 300
 FINALDELAY 5

Итак, мы добавили monitir, формат записи которого следующий:MONITOR system powervalue username password type

Значение опций:
MINSUPPLIES - указываем количество блоков питания которые должны получать мощность сохраняя систему запущенной. Большинство систем имеют один БП. Но мощные сервера, например HP NetServer LH4, могут работать с 2 из 4 БП и ему нужно ставить 2.
SHUTDOWNCMD - upsmon выполняет эту команду, когда системе необходимо выключить.
NOTIFYCMD - upsmon отправляет сообщение при происшествиях.
POLLFREQ - опрос мониторами с частотой (измеряется в секундах) для обычной деятельности. Вы можете отрегулировать это частоту опроса, чтобы upsmon не “зашумлял” вашу сеть, но не вносите слишком большие значения тк. оно может пропустить отключение питания.
POLLFREQALERT - опрос UPS с частотой в секундах. Можно сделать значение поменьше, чем POLLFREQ для лучшей чувствительности работы батареи.
HOSTSYNC - как долго upsmon будет ждать перед переходом к следующему upsmon. master upsmon использует это число при ожидании slaves чтобы отключиться после того как он установил флаг принудительное завершение работы (FSD). И если slaves не отключаться после этого тайм аута, то выключение продолжится без них.
DEADTIME - интервал ожидания перед объявлением статуса UPS как «мертвый». upsmon требует, чтобы UPS предоставлял свою статус информацию, каждые несколько секунд (см. POLLFREQ и POLLFREQALERT). Если статус загрузки, UPS помечен fails. И если оно остается fails более чем DEADTIME секунд, то UPS помечается «мертвый».
POWERDOWNFLAG - флаг файла для форсирования завершения работы UPS в master системе.
NOTIFYMSG - изменение сообщения, отправленные upsmon при возникновении определенных событий.
NOTIFYFLAG - изменение поведения upsmon при возникновении событий NOTIFY.
RBWARNTIME - предупреждение замены аккумулятора в секундах.
NOCOMMWARNTIME - предупреждение по времени при не общении к UPS в секундах.
FINALDELAY - процент батареи, при котором происходит завершение работы системы.

upssched.conf
В файл /usr/local/etc/nut/upssched.conf можно настроить различные таймеры на события. Я настроил, так что бы после 30 секунд работы от аккумулятора мне на телефон приходила sms вида «ups - on batt», а после восстановления питания через 60 секунд приходила sms - «ups - on line».

# Скрипт с таймерами, должен быть раньше строчек AT
CMDSCRIPT /usr/local/bin/upssched-cmd
# PIPEFN это файл pire который будет передавать таймер между процессами, LOCKFN предотвращает события когда два события отправлены почти одновременно. Рекомендуется создать отдельный каталог upssched с правами от пользователя который запускает и может иметь доступ записывать в файлы которые мы указали ниже.
PIPEFN /var/db/nut/upssched/upssched.pipe
LOCKFN /var/db/nut/upssched/upssched.lock
# При событии ONBATT запускаем таймер которые выполнит команду "onbatt" через 30 секунд. Команду "onbatt" мы создадим позже в файле /usr/local/bin/upssched-cmd , который был указан в переменной CMDSCRIPT. Если в течение 30 секунд произойдет событие ONLINE, то таймер будет отменен и команда "onbatt" не будет выполнена.
AT ONBATT * START-TIMER onbatt 30
AT ONLINE * CANCEL-TIMER onbatt
AT ONLINE * START-TIMER online 60
AT ONBATT * CANCEL-TIMER online

Файл /usr/local/bin/upssched-cmd это скрипт который выполняется по таймеру.

case $1 in
# Имя нашего таймера, указанного в  upssched.conf
        onbatt)
                sendsms 8ххххххххх "ups - on batt"
                ;;
        *)
# Если поступила команда который нет в скрипте, запишем в лог об этом
                logger -t upssched-cmd "Unrecognized command: $1"
                ;;
esac

case $1 in
        online)
                sendsms 8ххххххххх "ups - on line"
                ;;
        *)
esac

В результате теперь когда пропадает электричество в сети и если оно в течение 30 секунд не появилось, то мне приходит sms, что ups работает от аккумуляторов. Соответственно при появлении напряжения на входе ups, через 60 секунд приходит sms, что ups on line.

Права на файлы и каталоги.
Владельцем /var/db/nut должен быть пользователь uucp, права на выставлены на 0750:

# ls -ld /var/db/nut/
drwxr-x--- 2 uucp uucp 512 24 апр 04:50 /var/db/nut/

Права на конфигурационные файлы.
Условия - пользователь uucp должен иметь доступ на чтение:

# chown uucp:uucp upsd.conf upsd.users upsmon.conf
# chmod 0640 upsd.conf upsd.users upsmon.conf

Запуск сервиса
Добавляю NUT в /etc/rc.conf и запускаю для сервисы:

# echo '### Network UPS Tools' >> /etc/rc.conf
# echo 'nut_enable="YES"' >> /etc/rc.conf
# echo 'nut_upsmon_enable="YES"' >> /etc/rc.conf
# echo 'nut_upslog_enable="YES"' >> /etc/rc.conf
# /usr/local/etc/rc.d/nut start
Network UPS Tools - UPS driver controller 2.4.1
Network UPS Tools - PowerCom protocol UPS driver 0.12 (2.4.1)
Starting nut.
Network UPS Tools upsd 2.4.1
listening on 195.3.159.250 port 3493
listening on 127.0.0.1 port 3493
Connected to UPS [Powercom]: powercom-Powercom
# sh /usr/local/etc/rc.d/nut_upsmon start
Starting nut_upsmon.
Network UPS Tools upsmon 2.4.1
UPS: Powercom@localhost (master) (power value 1)
Using power down flag file /etc/killpower
# sh /usr/local/etc/rc.d/nut_upslog start
Starting nut_upslog.
Network UPS Tools upslog 2.4.1
logging status of myups@localhost to /var/log/ups.log (300s intervals) 

Проверка:

# ps -ax | grep nut
85110 ?? Ss 0:01,53 /usr/local/libexec/nut/powercom -a Powercom
# ps -ax | grep ups
90340 ?? Ss 0:00,02 /usr/local/sbin/upsd
90534 ?? Is 0:00,00 /usr/local/sbin/upsmon localhost
90535 ?? S 0:00,00 /usr/local/sbin/upsmon localhost
90551 ?? Is 0:00,00 /usr/local/bin/upslog -s myups@localhost -l /var/log/ups.log -i 300

Сервисы запущены, работают и ведутся логи.
Подключение к UPS для проверки его статуса:

# upsc Powercom@localhost
battery.charge: 100.0
driver.name: powercom
driver.parameter.pollinterval: 2
driver.parameter.port: /dev/cuad0
driver.parameter.type: KIN
driver.version: 2.4.1
driver.version.internal: 0.12
input.frequency: 50.07
input.voltage: 234.0
input.voltage.nominal: 220
output.frequency: 50.07
output.voltage: 234.0
ups.load: 22.0
ups.mfr: PowerCom
ups.model: KIN-2200AP
ups.model.type: KIN
ups.serial: Unknown
ups.status: OL

Для проверки только режима работы UPS можно воспользоваться следующей командой (по аналогии можно запрашивать и другие параметры):

# upsc Powercom@localhost ups.status
OL

Переменная может принимать следующие значения:

  • OL - система работает на линии (on line power)
  • OL TRIM - система работает на линии в режиме стабилизации напряжения
  • OB - система работает от батареи (on battery)
  • LB - система работает от севшей батареи (low battery)

Теперь посмотрим монитором:

# upsmon
Network UPS Tools upsmon 2.4.1
UPS: Powercom@localhost (master) (power value 1)
Using power down flag file /etc/killpower

Когда upsmon необходимо быстро выключить локальную систему, она устанавливает флаг «FSD» (forced shutdown - принудительное отключение) для любых UPS, на котором она выполняется в master режиме. Данная возможность используется и для синхронизации slaves компьютеров в том случае,если master UPS передает событие и всем рассылается сообщение о немедленном прекращении работы.Можно вручную вызвать этот режим на master upsmon, запустив другой экземпляр с флагом '-c fsd '. Это полезно, когда вы хотите инициировать shutdown перед критическим этапом. Эмулируем падение мощности:# upsmon -c fsd

Система должна корректно завершить работу.

upsstats

web-интерфейс проверки статуса UPS - upsstats.

Скопировал необходимые для работы файлы из предложеных примеров:

# cp upsset.conf.sample upsset.conf
# cp upsstats.html.sample upsstats.html
# cp upsstats-single.html.sample upsstats-single.html
# cp hosts.conf.sample hosts.conf

В конфигурационный файл apache добавил еще один alias.

 Alias /nut "/usr/local/www/nut/"
 <Directory "/usr/local/www/nut/">
 Order deny,allow
 Allow from all
 </Directory>

Скопировал папку nut из /usr/local/www/cgi-bin/ в /usr/local/www/apache22/cgi-bin
Перезапустил apache, чтобы изменения вступили в силу:

# apachectl graceful

В файле upsset.conf расскоментировал строку I_HAVE_SECURED_MY_CGI_DIRECTORY:

# cat upsset.conf | grep HAVE
I_HAVE_SECURED_MY_CGI_DIRECTORY

Добавил UPS в список хостов:

# echo 'MONITOR powercom@localhost "Powercom KIN-2200AP-RM"' >> hosts.conf

При переходе на адрес адрессервера/nut, должна отобразится страница Network UPS Tools с вкладками Statistics и Settings.
Settings – настройки UPS (пользователь согласно содержимому upsd.users)
Statistics – просмотр статуса UPS, а так же текущее состояние в графическом виде.

Ссылки:
http://muff.kiev.ua/content/nut-network-ups-tools
http://www.ignix.ru/book/freebsd/daemon/network_ups_tools
http://ozabo.narod.ru/nut-ippon.html
http://notanony.ru/post/12/

freebsd/nut.txt · Последние изменения: 2015/03/07 20:27 (внешнее изменение)