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

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


nut:nut

Network UPS Tools (NUT)

Network UPS Tools (NUT) - комплект программ для мониторинга ИБП.

http://www.networkupstools.org/

https://github.com/networkupstools/nut/

Monitoring diagrams

GenericUPS - Driver for contact-closure UPS equipment

2016-04-28: новый проект ntUPSd - Network UPS Tools Services for Windows

Сервер — upsd

upsd отвечает за передачу данных от драйверов к клиентским программам по сети. Его следует запускать сразу после upsdrvctl в сценариях запуска вашей системы.

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

Установка:

apt-get install nut-server

Настройка режима:

nut.conf
MODE=netserver

Мониторинг через upsmon:

upsmon.conf
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.conf

upsd.conf
MAXAGE 15
MAXCONN 8
STATEPATH /var/run/nut
LISTEN 0.0.0.0 3493
#LISTEN 127.0.0.1 3493

upsd.users

upsd.users
[admin]
password = admin
actions = SET
instcmds = ALL
 
[upsmaster]
password = password
upsmon master
 
[upsslave]
password = password
upsmon slave

ups.conf

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


Для того, чтобы после перезагрузки были правильные права на файл, нужно создать файл:

/etc/udev/rules.d/99-nut.rules
KERNEL=="ttyS0", GROUP="nut"

Пример для Moxa C104H

upsdrvctl

UPS driver controller

Тест выключения

upsdrvctl -t shutdown

http://networkupstools.org/docs/man/upsdrvctl.html

Клиент мониторинга — upsmon

Установка:

apt-get install nut-client

upsmon предоставляет важную функцию, которую вы ожидаете найти в ПО для мониторинга ИБП - это безопасное отключение при сбое питания.

В иерархии ПО NUT это клиент. Он отдельно описан в документации, так как он очень важен. Вы настраиваете его, указывая все ИБП, информацию о которых необходимо получать, это делается в файле в upsmon.conf.

В файле nut.conf нужно указать режим:

nut.conf
MODE=netclient

Каждый ИБП можно определить как один из двух возможных типов:

  • ведущий (master)

    Этот ИБП подаёт питание на работающую систему, и эта система также отвечает за её отключение, когда батарея разряжена. Это происходит после безопасного отключения всех ведомых (slave) систем.

    Если ваш ИБП подключён непосредственно к последовательному порту системы, процесс upsmon в этой системе должен определить этот ИБП как ведущий (master).
    У простом случае один компьютер подключён к одному ИБП. Это означает, что вы запускаете драйвер, upsd и upsmon в режиме ведущий (master).

  • ведомый (slave)

    Этот ИБП может подавать питание на работающую систему, но эта система не может выключить её напрямую. Используйте этот режим, когда вы используете несколько компьютеров на одном ИБП. Очевидно, только один может быть подключён к последовательному порту на ИБП, и эта система является ведущей (master), а все остальные ведомые (slave).

Мониторинг:

upsmon.conf
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

Клиент 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.

http://csociety.ecn.purdue.edu/~delpha/winnut/

Windows NUT client

Графический интерфейс к WinNUT

Windows NUT client is a partial port of KNutClient to Windows using AutoIt scripting language.

http://sourceforge.net/projects/winnutclient

Другие клиенты

Клиенты общаются с 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

/etc/init.d/zzz_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 позволяет отображать и изменять переменные чтения / записи в оборудовании вашего ИБП. Не все устройства или драйверы реализуют это, поэтому это может не повлиять на вашу систему. Драйвер, поддерживающий переменные чтения / записи, даст следующие результаты:

upsrw требует прав администратора для изменения настроек оборудования. Обратитесь к upsd.users для получения информации об определении пользователей в upsd.

upscmd

Некоторое оборудование и драйверы ИБП поддерживают понятие мгновенной команды - такой функции, как запуск теста батареи или выключение нагрузки. Вы можете использовать upscmd для вывода списка или вызова мгновенных команд, если ваше оборудование/драйверы их поддерживают.

upscmd требует прав администратора для запуска мгновенных команд. Чтобы определить пользователей и пароли в upsd, см. upsd.users

Веб мониторинг

apt-get install nut-cgi

Настройка

Папка: /etc/nut/

Zabbix

Мониторинг через Zabbix, работает через Zabbix агент.

Шаблон и код на основе этого проекта https://github.com/delin/Zabbix-NUT-Template

ПараметрИмя переменнойПримечания
Имя драйвера NUTdriver.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-2ups.status-5, если эти переменные не содержат значений то возвращается 0

Состояние, значение №2ups.status-2
Состояние, значение №3ups.status-3
Состояние, значение №4ups.status-4
Состояние, значение №5ups.status-5
Тревогаups.alarmЭта переменная получает значение только при возникновении тревоги (alarm) поэтому для при ошибке:
Error: Variable not supported by UPS

возвращается 0, также она может содержать несколько значений, для этого введены переменные ups.alarm-2ups.alarm-10

Тревога, значение №2ups.alarm-2
Тревога, значение №3ups.alarm-3
Тревога, значение №4ups.alarm-4
Тревога, значение №5ups.alarm-5
Тревога, значение №6ups.alarm-6
Тревога, значение №7ups.alarm-7
Тревога, значение №8ups.alarm-8
Тревога, значение №9ups.alarm-9
Тревога, значение №10ups.alarm-10
Температура (°C)ups.temperature
Уровень заряда батарей (В)battery.charge
Частота на входе (Гц)input.frequency

:!: Если переменная не поддерживается, возникает ошибка:

Error: Variable not supported by UPS

и возвращается значение

NA

Template NUT

Ссылка на Share.Zabbix.com

Готовые файлы для агента

Готовые файлы для агента

etc/zabbix/scripts/nut_ups_status.sh
#!/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
/etc/zabbix/zabbix_agentd.conf.d/userparameter_nut.conf
UserParameter=upsmon[*],/etc/zabbix/scripts/nut_ups_status.sh $1 $2

Ссылки

nut/nut.txt · Последние изменения: 2021-06-17 09:27 — GreyWolf