Появилась задача мониторить состояние UPS’a. Думаю это интересно всем.
Стенд: FreeBSD 7.2, Mustek UPS 800 AV, Serial RS-232 cable (com-port).
Установка и настройка остальных моделей – аналогичная :). При возникновении проблем, читаем внизу, раздел “Возможные проблемы”.
1) Подкотовка.
Подключаем UPS через кабель к com-порту на серваке. Естественно, что сервак должен уже “питаться” через UPS. После этого в желательно перегрузить, (я не перегружал сервак, у меня сразу заработало), так пишут в сети.
2) Установка и настройка soft’a.
В качестве софта выбрал nut, так как один из самых популярных и поддерживает много разных производителей и моделей.
Идём в порты и ставим nut (в портах много всяких приложений по имени nut, я например, в первый раз поставил не тот, из /usr/ports/misc 🙂 )
#cd /usr/ports/sysutils/nut && make install clean
В окошке выбираем
[X] SERIAL SERIAL support
[X] USB USB support
[X] SNMP SNMP support
остальное – по желанию, хотя и здесь можно не выбирать snmp, если вы его не используете или не знаете, что оно такое.
Установка длительная, тянет за собой 7 зависимостей (может у вас будет больше или меньше, смотря, что уже есть).
После установки идём в папку с конфигами (/usr/local/etc/nut) и приводим их к такому виду:
#cat nut.conf | grep -v "^#"
MODE = standalone
#cat ups.conf | grep -v "^#"
[mustek_ups]
driver = megatec
port = /dev/cuad0
desc = "Mustek UPS"
#cat upsd.conf | grep -v "^#"
MAXAGE 3
LISTEN 127.0.0.1 3493
MAXCONN 1024
#cat upsd.users | grep -v "^#"
[upsuser]
password = upspasswd
upsmon master
#cat upsmon.conf | grep -v "^#"
RUN_AS_USER nutmon
MONITOR mustek_ups@localhost 1 upsuser upspasswd master
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -p now"
NOTIFYCMD /usr/local/bin/notifyme
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
NOTIFYMSG ONBATT "Server on UPS Battery. Check power!"
NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5
Если у вас не mustek, то узнать, какой драйвер писать в файл ups.conf поможет файл driver.list.
Теперь пару слов о конфигах. В папке есть sample-конфиги, в которых есть описание всех параметров. В тех конфигах, что у меня описано следеющее: при пропадании питания слать месаги на мыло, писать в логи (собственный для упса и messages, а так же слать бродкастом всем залогиненым юзерам на сервак через консоль). Если вам что-то не нужно – читаем справку и правим под свои нужды.
Создаём юзера nutmon (от этого юзера будет работать nut: есть один процес от рута, который потом сможет выполнить shutdown, а все остальные – работают от nutmon):
#pw useradd -n nutmon -s /sbin/nologin -d /nonexistant
Вот сам скрипт нотификации (который описан в конфиге upsmon.conf, в параметре NOTIFYCMD) (не забедьте сделать его исполняемым: chmod +x notifyme):
#cat /usr/local/bin/notifyme
#!/bin/sh
echo 'Power Down on host 10.0.3.33' | mail -s 'Mustek PowerMust 800 USB' root@domain.com
Теперь добавляем строки запуска в /etc/rc.conf:
nut_enable="YES"
nut_upslog_enable="YES"
nut_upsmon_enable="YES"
Запускаем указанных демонов и смотрим логи:
#tail -f /var/log/ups.log
20091019 120052 NA NA NA [NA] NA NA
20091019 120552 NA NA NA [NA] NA NA
20091019 121052 NA NA NA [NA] NA NA
20091019 121014 NA NA NA [NA] NA NA
Broadcast Message from skeletor@srv-test
(no tty) at 12:12 EEST...
Communications with UPS mustek_ups@localhost lost
Broadcast Message from skeletor@srv-test
(no tty) at 12:12 EEST...
Communications with UPS mustek_ups@localhost established
Broadcast Message from skeletor@srv-test
(no tty) at 12:13 EEST...
Server on UPS Battery. Check power!
Broadcast Message from skeletor@srv-test
(no tty) at 12:14 EEST...
UPS mustek_ups@localhost on line power
20091019 121514 NA NA NA [NA] NA NA
20091019 122014 NA NA NA [NA] NA NA
А вот так выглядит в /var/log/messages:
Broadcast Message from skeletor@srv-test
(no tty) at 12:12 EEST...
Communications with UPS mustek_ups@localhost lost
Oct 19 12:12:06 srv-test upsd[38248]: UPS data is no longer stale
Oct 19 12:12:11 srv-test upsmon[38446]: Communications with UPS mustek_ups@localhost established
Broadcast Message from skeletor@srv-test
(no tty) at 12:12 EEST...
Communications with UPS mustek_ups@localhost established
Oct 19 12:13:11 srv-test upsmon[38446]: Server on UPS Battery. Check power!
Broadcast Message from skeletor@srv-test
(no tty) at 12:13 EEST...
Server on UPS Battery. Check power!
Oct 19 12:14:41 srv-test upsmon[38446]: UPS mustek_ups@localhost on line power
Broadcast Message from skeletor@srv-test
(no tty) at 12:14 EEST...
UPS mustek_ups@localhost on line power
Видно, где отключалось питание, а где появлялось.
Примечание.
Что бы не было сообщений вида [NA] [NA] в /etc/rc.conf добавим такое:
nut_upslog_ups="mustek_ups@localhost"
Возможные проблемы.
При подключении APC Smart UPS, возникли некоторые проблемы, а именно то, что УПС просто выключался приподключении кабеля в com-порт. Попробовал через USB, но тут возникли проблемы: не хочет работать. Полазил в инете, почитал, что дрова для USB, которые вкомпиллены в ядро немного кривоваты, причём не все, а только “Human Interface Devices”. Рекомендация: пересобрать ядро без поддержки опции
device uhid
После того, как поставил пересобираться ядро, вспомнил: у меня есть родной “комовский” кабель, может с ним заработает. И таки-да! Заработало. Вот такой капризный APC.
5 коментарів “Мониторим состояние UPS’a”
Не дописал одну букву в строке установки исправь
cd /usr/ports/sysutils/nut && make install clean
Спасибо, исправил.
Для APC Smart UPS лучше использовать apcupsd – можно будет ещё смотреть графики в реальном времени.
Как вставить рисунок в комментарий ?
Можно ссылкой