Настройка мониторинга UPS

Есть на хозяйстве бесперебойник SmartUPS-1000. FreeBSD 6.3 определяет его так:

ugen0: American Power Conversion Smart-UPS 1000 FW:600.3.I USB FW:1.5, rev 1.10/0.06, addr 2

В нем есть USB и COM выходы, подключил я на USB. Мониторить будет порт apcupsd:

 #cd /usr/ports/sysutils/apcupsd
 #make install clean

Собирал порт с опциями CLIENT ONLY,CGI,USB,SNMP. Теперь идем настраивать конфиг /usr/local/etc/apcupsd/apcupsd.conf:

/usr/local/etc/apcupsd# cat apcupsd.conf | grep -v “^#”

UPSCABLE usb # тип кабеля;
UPSTYPE usb # тип управляющего соединения;
DEVICE # имя устройства (для usb поле пустое);
LOCKFILE /var/spool/lock # каталог, где будут создавать блокирующие файлы доступа к портам USB,COM;
SCRIPTDIR /usr/local/etc/apcupsd # где находится конфиг;
PWRFAILDIR /var/run # каталог, где создается файл, который характеризует сбой питания, используется для выключения UPS после выключения компьютера;
NOLOGINDIR /var/run # каталог, где создается файл nologin, запрещающий новый сеанс;
ONBATTERYDELAY 6 # время в секундах, когда не фиксируется событие пропадание питания;
BATTERYLEVEL 5 # минимальный уровень заряда батареии в %, после которого начинается выключение ;
MINUTES 3 # минимальное количество минут, оставшихся до исчерпания заряда батареи, после которого – выключение;
TIMEOUT 0 # если не 0, а определенное число, то выключение будет после указанного числа секунд;
ANNOY 300 # по истечении указанных секунд юзерам будет уведомление о прекращении работы;
ANNOYDELAY 60 # период между уведомлениями;
NOLOGON disable # не давать начинать новый сеанс работы при работе через батарею, значения – disable – отключить ограничение, timeout – запретить сеансы по истечении 90% от значения TIMEOUT, percent – запретить сеансы, если заряд батареии 110% от BATTERLEVEL, minutes – запретить сеансы по достижении 110% от значения MINUTES, always – запрещать сразу;
KILLDELAY 0 # я так понял, что apcupsd будет работать указанное время после гашения всех сервисов, а потом отключит питание;
NETSERVER on # возможность просмотра состояния клиентами
NISIP 0.0.0.0 # задание IP, который будет слушать клиентские запросы, 0.0.0.0 – слушает все входящие запросы;
NISPORT 3551 # порт для передачи данных клиентам по сети;
EVENTSFILE /var/log/apcupsd/apcupsd.events # запись в лог состояния EVENTS;
EVENTSFILEMAX 10 # max размер в kb;
UPSCLASS standalone # режим автономный;
UPSMODE disable #
STATTIME 60 # интервал между записью в лог состояния STAT, 0 – откл.;
STATFILE /var/log/apcupsd/apcupsd.status
LOGSTATS on # выводить подробное сосояние через SYSLOG
DATATIME 60 # интервал между записи в лог состояния DATA, 0 – откл
FACILITY LOCAL3 # журналирование через SYSLOG

Я предпочитаю логи писать в SYSLOG, поэтому переменную EVENTSFILE можно закоментировать. В /etc/syslog.conf и /etc/newsyslog.conf добавляем соответственно:
local3.* /var/log/apcupsd/ups.log
/var/log/apcupsd/ups.log 644 5 5000 * ZC

Каждый час запускается newsyslog и при размере файла более 5000 кб лог будет архивироваться gzip-ом, количество файлов архива 5. Далее добавляем в /etc/rc.conf apcupsd_enable=”YES” и рестартуем syslog и apcupsd:

# /etc/rc.d/syslogd restart
 # /usr/local/etc/rc.d/apcupsd restart
 # ps ax | grep apc
 76984 ?? Ss 0:00,12 /usr/local/sbin/apcupsd –kill-on-powerfail
 77140 p8 R+ 0:00,00 grep apc

Теперь видно, что все работает, при пропадании питания почта шлется руту и кто находится в консоли выдается сообщение. Информацию о сотоянии UPS возможно также смотреть через веб, для этого имеется набор cgi-скриптов. В качесвтве веб-сервера будет выступать apache. Конфиг кладем в /usr/local/etc/apache22/Includes:

 DocumentRoot “/usr/local/etc/apcupsd/cgi”
 ServerName ups.company.ua
 AddDefaultCharset utf-8
 CustomLog /var/log/apache/ups/access.log common
 ErrorLog /var/log/apache/ups/error.log
 Alias /ups “/usr/local/etc/apcupsd/cgi”
 <Directory /usr/local/etc/apcupsd/cgi>
 Options ExecCGI
 DirectoryIndex multimon.cgi
 AddHandler cgi-script .cgi
 AllowOverride All
 Order deny,allow
 </Directory>

Создаем директорию для логов /var/log/apache/ups и рестартуем apache:

 # mkdir /var/log/apache/ups
 # /usr/local/etc/rc.d/apache22 restart

Заходим на http://localhost/ups/ и видим состояние нашего UPS. В столбце SYSTEM показано поле LocalHost, тут возможно прикрутить мониторинг нескольких UPS-ников, данные которых будут передаваться по сети (файлик /usr/local/etc/apcupsd/hosts.conf).

Источник информации:
1. http://www.lissyara.su/?id=1079
2. http://bog.pp.ru/hard/UPS.html

© Mau, 2008.