====== Network UPS Tools (NUT) ====== {{:nut:nut-logo.png|}} Network UPS Tools (NUT) - комплект программ для мониторинга ИБП. Поддерживает мониторинг ИБП через [[apcupsd:apcupsd|]]. Для Linux–систем рекомендуется вместо [[apcupsd:apcupsd|]]. http://www.networkupstools.org/ [[github>/networkupstools/nut/|The Network UPS Tools repository]] [[http://networkupstools.org/docs/user-manual.chunked/ar01s03.html#_monitoring_diagrams|Monitoring diagrams]] [[http://networkupstools.org/docs/man/genericups.html|GenericUPS - Driver for contact-closure UPS equipment]] ====== Настройка ====== Папка: ''/etc/nut/'' В файле ''nut.conf'' задаётся режим работы: * Сервер:MODE=netserver * Клиент: MODE=netclient Список необходимых процессов для работы: * Сервер * ''[[#upsd]]'' * ''[[#upsmon]]'' * Клиент * ''[[#upsmon]]'' Для проверки можно использовать команду: ps -aux|grep ups ===== iptables ===== Настройки для [[iptables:iptables|]] iptables -A INPUT -p tcp -i $LAN_IF -s $LAN --sport 3493 -j ACCEPT iptables -A OUTPUT -p tcp -o $LAN_IF -d $LAN --dport 3493 -j ACCEPT iptables -A INPUT -p tcp -i $LAN_IF -s $LAN --dport 3493 -j ACCEPT iptables -A OUTPUT -p tcp -o $LAN_IF -d $LAN --sport 3493 -j ACCEPT {{anchor:upsd}} ====== Сервер — upsd====== ''upsd'' отвечает за передачу данных от драйверов к клиентским программам по сети. Его следует запускать сразу после ''[[#upsdrvctl]]'' в сценариях запуска вашей системы. По возможности, ''upsd'' следует поддерживать в рабочем состоянии, поскольку это единственный источник информации о состоянии для клиентов мониторинга, таких как ''[[#upsmon]]''. Установка: apt-get install nut-server Пакет ''nut-server'' включает в себя и ''[[#upsmon]]'' Состояние: #!/bin/bash netstat -tulpn|grep upsd service nut-server status ===== upsd.conf ===== MAXAGE 15 MAXCONN 8 STATEPATH /var/run/nut LISTEN 0.0.0.0 3493 #LISTEN 127.0.0.1 3493 Проверка: netstat -an |grep 3493 ===== upsd.users ===== [admin] password = admin actions = SET instcmds = ALL [upsmaster] password = password upsmon master [upsslave] password = password upsmon slave ===== ups.conf ===== [ИМЯ_ИБП] driver = upscode2 port = /dev/ttyS0 desc = "Описание ИБП" :!: Нужно обязательно дать права на файл устройства (порта), иначе будет ошибка: upsd: Can't connect to UPS [ИМЯ_ИБП] (upscode2-ИМЯ_ИБП): No such file or directory Пример: chmod 0660 /dev/ttyS0 chown root:nut /dev/ttyS0 Для того, чтобы после перезагрузки были правильные права на файл, нужно создать файл ''99-nut.rules'' Примеры: * KERNEL=="ttyS0", GROUP="nut" * пример для [[moxa_c104h:moxa_c104h#nut|Moxa C104H]] ===== upsdrvctl ===== UPS driver controller Тест выключения upsdrvctl -t shutdown ---- http://networkupstools.org/docs/man/upsdrvctl.html {{anchor:upsmon}} ====== Клиент мониторинга — upsmon ====== Установка: apt-get install nut-client ''upsmon'' предоставляет важную функцию, которую вы ожидаете найти в ПО для мониторинга ИБП - это безопасное отключение при сбое питания. В иерархии ПО NUT это клиент. Он отдельно описан в документации, так как он очень важен. Вы настраиваете его, указывая все ИБП, информацию о которых необходимо получать, это делается в файле в ''[[#upsmon.conf]]''. Каждый ИБП можно определить как один из двух возможных типов: * ведущий (master) Этот ИБП подаёт питание на работающую систему, и эта система также отвечает за её отключение, когда батарея разряжена. Это происходит после безопасного отключения всех ведомых (slave) систем. Если ваш ИБП подключён непосредственно к последовательному порту системы, процесс ''[[#upsmon]]'' в этой системе должен определить этот ИБП как ведущий (master). \\ У простом случае один компьютер подключён к одному ИБП. Это означает, что вы запускаете драйвер, ''[[#upsd]]'' и ''[[#upsmon]]'' в режиме ведущий (master). * ведомый (slave) Этот ИБП может подавать питание на работающую систему, но эта система не может выключить её напрямую. Используйте этот режим, когда вы используете несколько компьютеров на одном ИБП. Очевидно, только один может быть подключён к последовательному порту на ИБП, и эта система является ведущей (master), а все остальные ведомые (slave). MONITOR ИМЯ_ИБП@СЕРВЕР 1 upsslave password slave MINSUPPLIES 1 SHUTDOWNCMD "/sbin/shutdown -h +0" POLLFREQ 5 POLLFREQALERT 5 HOSTSYNC 15 DEADTIME 15 RBWARNTIME 43200 NOCOMMWARNTIME 300 FINALDELAY 5 NOTIFYMSG ONLINE "UPS %s on line power" NOTIFYMSG ONBATT "UPS %s on battery" NOTIFYMSG LOWBATT "UPS %s battery is low" NOTIFYMSG FSD "UPS %s: forced shutdown in progress" NOTIFYMSG COMMOK "Communications with UPS %s established" NOTIFYMSG COMMBAD "Communications with UPS %s lost" NOTIFYMSG SHUTDOWN "Auto logout and shutdown proceeding" NOTIFYMSG REPLBATT "UPS %s battery needs to be replaced" NOTIFYMSG NOCOMM "UPS %s is unavailable" NOTIFYMSG NOPARENT "upsmon parent process died - shutdown impossible" ''MINSUPPLIES'' — Число ИБП, которые поддерживают работоспособность системы. Строка описания одного ИБП: MONITOR СИСТЕМА PV ПОЛЬЗОВАТЕЛЬ ПАРОЛЬ ТИП |СИСТЕМА|%%ИМЯ_ИБП@СЕРВЕР%%| |PV|Число блоков питания, которые ИБП питает эту систему. Большинство обычных компьютеров имеют один блок питания, и ИБП питает его, поэтому это значение будет 1. \\ **Если нужно только контролировать ИБП, который на самом деле не подаёт питание на эту систему нужно использовать значение 0.** Это полезно, когда вы хотите, чтобы ''[[#upsmon]]'' только оправлял уведомления об изменениях статуса ИБП| |ПОЛЬЗОВАТЕЛЬ|Имя пользователя| |ПАРОЛЬ|Пароль пользователя| |ТИП|Тип: master или slave| Состояние: #!/bin/bash service nut-client status Пример: MONITOR ИМЯ_ИБП@localhost 1 upsmaster password master MINSUPPLIES 1 SHUTDOWNCMD "/sbin/shutdown -h +0" POLLFREQ 5 POLLFREQALERT 5 HOSTSYNC 15 DEADTIME 15 POWERDOWNFLAG /etc/killpower RBWARNTIME 43200 NOCOMMWARNTIME 300 FINALDELAY 5 ====== Другие клиенты ====== Клиенты общаются с ''[[#upsd]]'' по сети и работают с с данными из драйверов. Существуют инструменты для доступа к командной строке и несколько специальных клиентов, которые можно запускать через ваш веб-сервер как программы [[#CGI]]. ===== upsc ===== Это простой клиент, который отображает значения переменных, известных upsd и вашим драйверам ИБП. По умолчанию он перечислит каждую переменную или только одну, если вы укажете дополнительный аргумент. Это может быть полезно в сценариях оболочки для мониторинга чего-либо без написания собственного сетевого кода. ''upsc'' — это быстрый способ узнать, правильно ли работают ваши драйверы и ''[[#upsd]]''. |''upsc -L''|список всех настроенных ИБП| |''upsc ИМЯ_ИБП''| список всех доступных переменных с их текущими значениями| |''upsc ИМЯ_ИБП ИМЯ_ПЕРЕМЕННОЙ''|текущее значение переменной| :!: Для подавления сообщения: Init SSL without certificate database Нужно использовать следующую конструкцию: upsc ИМЯ_ИБП ИМЯ_ПЕРЕМЕННОЙ 2>&1 | grep -v SSL ===== upslog ===== upslog будет записывать информацию о состоянии из ''[[#upsd]]'' в файл через заданные промежутки времени. Вы можете использовать это для создания графиков или отчетов с помощью других программ. Пример вывода протокола в файл с помощью ''upslog'' #!/bin/bash upslog -s ИМЯ_ИБП@ИМЯ_СЕРВЕРА -l/var/log/ups.log -i 30 -f \ "%TIME @Y@m@d @H@M@S% \ %VAR battery.charge% \ %VAR input.voltage% \ %VAR ups.load% \ [%VAR ups.status%] \ %VAR ups.temperature% \ %VAR input.frequency% \ %VAR battery.voltage% \ %VAR battery.voltage.high% \ %VAR battery.voltage.low% \ %VAR battery.voltage.nominal% \ %VAR input.current.nominal% \ %VAR input.voltage% \ %VAR input.voltage.fault% \ %VAR input.voltage.nominal% \ %VAR output.voltage% \ %VAR ups.delay.shutdown% \ %VAR ups.delay.start%" ===== upsrw ===== ''upsrw'' позволяет отображать и изменять переменные чтения / записи в оборудовании вашего ИБП. Не все устройства или драйверы реализуют это, поэтому это может не повлиять на вашу систему. Драйвер, поддерживающий переменные чтения / записи, даст следующие результаты: Для изменения значения переменных требуются прав администратора. Права пользователей задаются в ''[[#upsd.users]]'' Примеры * Поучение текущего значения переменной ''battery.date'': upsc ups_01 battery.date * Изменение значения переменной ''battery.date'' в ИБП [[ups:apc|APC]] (формат даты: ''DD/MM/YY''): upsrw -s battery.date=30/07/21 -u admin -p password ups_01@localhost ===== upscmd ===== Некоторое оборудование и драйверы ИБП поддерживают понятие мгновенной команды - такой функции, как запуск теста батареи или выключение нагрузки. Вы можете использовать ''upscmd'' для вывода списка или вызова мгновенных команд, если ваше оборудование/драйверы их поддерживают. upscmd требует прав администратора для запуска мгновенных команд. Чтобы определить пользователей и пароли в ''[[#upsd]]'', см. ''[[#upsd.users]]'' Список команд, которые поддерживаются данным ИБП: upscmd -u admin -p password -l UPS_01@localhost ==== Калибровка батарей ==== Процесс калибровки нужно начинать когда батареи ИБП заряжены полностью! ИБП должен быть нагружен, глупо калибровать его на "холостом ходу". Если есть сомнения в качестве батарей, необходимо производить калибровку не на "боевой" нагрузке, а на эквиваленте нагрузки. В ходе этого процесса ИБП работает от батареи и разряжает их до 25%, а затем возвращается на работу от сети. ИБП использует данные нагрузки и время для вычисления новой оценки времени работы. Запуск калибровки: upscmd -u admin -p password ups_01@localhost calibrate.start Для наблюдения за состоянием ИБП удобно использовать следующие команды: * watch upsc UPS_01 battery.charge * watch upsc UPS_01 battery.runtime ---- [[https://web.suffieldacademy.org/ils/netadmin/docs/software/nut/|Jason Healy, Director of Networks and Systems — Network UPS Tools (Last Updated Mar 18, 2008)]] ===== upssched ===== FIXME Timer helper for scheduling events from ''[[#upsmon]]'' https://networkupstools.org/docs/man/upssched.html {{anchor:cgi}} ===== Веб мониторинг ===== apt-get install nut-cgi ====== Zabbix ====== Мониторинг через [[zabbix:zabbix|Zabbix]], работает через [[zabbix:agent|Zabbix агент]]. Шаблон и код на основе этого проекта https://github.com/delin/Zabbix-NUT-Template ^Параметр^Имя переменной^Примечания^ |Имя драйвера NUT|''driver.name''| | |Модель ИБП|''ups.model''| | |Нагрузка (%)|''ups.load''| | |Напряжение батарей (В)|''battery.voltage''| | |Напряжение на входе (В)|''input.voltage''| | |Напряжение на выходе (В)|''output.voltage''| | |Номинальная нагрузка (ВА)|''ups.power.nominal''| | |Производитель ИБП|''ups.mfr''| | |Расчётное время работы от батарей (Мин.)|''battery.runtime''| | |Состояние|''ups.status''|Эта переменная может содержать несколько значений, вот пример: ups.status: ALARM OL ups.alarm: FAN_FAIL для этого введены переменные ''ups.status-2''...''ups.status-5'', если эти переменные не содержат значений то возвращается ''0''| |Состояние, значение №2|''ups.status-2''|:::| |Состояние, значение №3|''ups.status-3''|:::| |Состояние, значение №4|''ups.status-4''|:::| |Состояние, значение №5|''ups.status-5''|:::| |Тревога|''ups.alarm''|Эта переменная получает значение только при возникновении тревоги (alarm) поэтому для при ошибке: Error: Variable not supported by UPS возвращается ''0'', также она может содержать несколько значений, для этого введены переменные ''ups.alarm-2''...''ups.alarm-10''| |Тревога, значение №2|''ups.alarm-2''|:::| |Тревога, значение №3|''ups.alarm-3''|:::| |Тревога, значение №4|''ups.alarm-4''|:::| |Тревога, значение №5|''ups.alarm-5''|:::| |Тревога, значение №6|''ups.alarm-6''|:::| |Тревога, значение №7|''ups.alarm-7''|:::| |Тревога, значение №8|''ups.alarm-8''|:::| |Тревога, значение №9|''ups.alarm-9''|:::| |Тревога, значение №10|''ups.alarm-10''|:::| |Температура (°C)|''ups.temperature''| | |Уровень заряда батарей (В)|''battery.charge''| | |Частота на входе (Гц)|''input.frequency''| | :!: Если переменная не поддерживается, возникает ошибка: Error: Variable not supported by UPS и возвращается значение NA {{:nut:zabbix_nut_template.tar.gz|Template NUT}} [[https://share.zabbix.com/power-ups/network-ups-tools-nut-v-2|Ссылка на Share.Zabbix.com]] #!/bin/bash ups=$1 if [ $ups = ups.discovery ]; then echo -e "{\n\t\"data\":[" first=1 /bin/upsc -l 2>&1 | grep -v SSL | while read discovered ; do if [ $first -eq 0 ]; then echo -e "," fi echo -en "\t\t{ \"{#UPSNAME}\":\t\"${discovered}\" }" first=0 done echo -e "\n\t]\n}" else key=$2 if [ $key = ups.status ]; then state=`/bin/upsc $ups $key 2>&1 | grep -v SSL` case $state in OL) echo 1 ;; #'On line (mains is present)' ;; OB) echo 2 ;; #'On battery (mains is not present)' ;; LB) echo 3 ;; #'Low battery' ;; RB) echo 4 ;; #'The battery needs to be replaced' ;; CHRG) echo 5 ;; #'The battery is charging' ;; DISCHRG) echo 6 ;; #'The battery is discharging (inverter is providing load power)' ;; BYPASS) echo 7 ;; #'UPS bypass circuit is active echo no battery protection is available' ;; CAL) echo 8 ;; #'UPS is currently performing runtime calibration (on battery)' ;; OFF) echo 9 ;; #'UPS is offline and is not supplying power to the load' ;; OVER) echo 10 ;; #'UPS is overloaded' ;; TRIM) echo 11 ;; #'UPS is trimming incoming voltage (called "buck" in some hardware)' ;; BOOST) echo 12 ;; #'UPS is boosting incoming voltage' ;; * ) echo 0 ;; #'unknown state' ;; esac else /bin/upsc $ups $key 2>&1 | grep -v SSL fi fi UserParameter=upsmon[*],/etc/zabbix/scripts/nut_ups_status.sh $1 $2 ====== MS Windows ====== [[github>6XGate/ntUPSd|ntUPSd — Network UPS Tools Services for Windows]] (2016-04-28) Клиенты: * WinNUT — The Windows Network UPS Tools \\ WinNUT is currently being replaced by a full port to Windows, part of the official NUT distribution. [[https://networkupstools.org/download.html#_binary_packages|MSI packages]] are available too. \\ http://csociety.ecn.purdue.edu/~delpha/winnut/ * Windows NUT client — графический интерфейс к WinNUT, написан на [[autoit:autoit|]] \\ http://sourceforge.net/projects/winnutclient ====== Ссылки ====== [[http://networkupstools.org/images/nut-logo.png|Логотип]] [[http://www.networkupstools.org/stable-hcl.html|Hardware compatibility list]] [[http://ru.opensuse.org/NUT|SDB:Перевод конфигурационных файлов NUT]] [[http://it.kg.ru/Lists/Posts/Post.aspx?ID=11|Блог ИТ-отдела компании Smart Solutions: Настройка Network UPS Tools]] [[http://vladimir-stupin.blogspot.ru/2015/09/nut-apc-smart-ups-1500va.html|NUT и APC Smart-UPS 1500VA]] [[http://www.tune-it.ru/web/pakhom/home/-/blogs/добавление-в-zabbix-ups-управляемои-nut-ом|Добавление в ZABBIX UPS управляемой NUT'ом]] [[https://www.opennet.ru/base/sys/ups_nut_linux.txt.html|OpenNET: статья - Подключение источника бесперебойного питания к Linux с помощью NUT-2.2.1 (ups backup nut linux)]] {{tag>Hardware UPS Linux MS_Windows}}