Очень часто серверы в небольших организациях, а так же домашние сервера делаются из обычных бытовых системных блоков, а от перепадов напряжения защищаются с помощью простейших бытовых ИБП. Такие ИБП обычно подключаются к серверу по USB или через порт RS232 и потому использовать для их мониторинга обычные инструменты, использующие для опроса ИБП SNMP не представляется возможным.
Далее будет показано как можно строить графики различных параметров таких ИБП используя в качестве вспомогательного инструмента утилиту apcaccess из комплекта apcupsd.
Начальные условия:
- Сервер под управлением Ubuntu 10.04;
- ИБП CyberPower VALUE 400E подключенный к серверу по USB.
Далее мы будем рисовать в MRTG график напряжения на входе и выходе ИБП. Графики остальных параметров рисуются по аналогии. Для начала нам понадобится установленный и настроенный apcupsd. Он хорошо документирован, потому просто приведём готовый листинг файла /etc/apcupsd/apcupsd.conf:
UPSCABLE usb UPSTYPE usb DEVICE LOCKFILE /var/lock SCRIPTDIR /etc/apcupsd PWRFAILDIR /etc/apcupsd NOLOGINDIR /etc ONBATTERYDELAY 6 BATTERYLEVEL 5 MINUTES 3 TIMEOUT 0 ANNOY 300 ANNOYDELAY 60 NOLOGON disable KILLDELAY 0 NETSERVER on NISIP 127.0.0.1 NISPORT 3551 EVENTSFILE /var/log/apcupsd.events EVENTSFILEMAX 10 UPSCLASS standalone UPSMODE disable STATTIME 0 STATFILE /var/log/apcupsd.status LOGSTATS off DATATIME 0
После запуска apcupsd с таким файлом конфигурации всю информации о состоянии ИБП можно получить разбирая вывод утилиты apcaccess. Для примера создадим скрипт /usr/local/scripts/mrtgstat_apcups.pl, который будет получать напряжение на входе и выходе ИБП и отдавть его в формате, пригодном для использования с MRTG. Вот его листинг:
#!/usr/bin/perl use strict; use warnings; use diagnostics; # Данные с UPS my @ups_data = `/sbin/apcaccess`; # Напряжение на выходе my @outputv = grep /^OUTPUTV/, @ups_data; my $outputv = shift @outputv; $outputv =~ s{^.+\ (\d+)\..+$}{$1}; print "$outputv"; # Напряжение на входе my @linev = grep /^LINEV/, @ups_data; my $linev = shift @linev; $linev =~ s{^.+\ (\d+)\..+$}{$1}; print "$linev"; # Текущее время print time() . "\n"; # Имя UPS'а my @upsname = grep /^UPSNAME/, @ups_data; my $upsname = shift @upsname; $upsname =~ s{^.+\ : (.+)$}{$1}; print "$upsname\n";
Чтобы MRTG начал рисовать графики напряжений используя данные из этого скрипта нужно добавить в файл /etc/mrtg.cfg строку:
Target[ups]: `/usr/local/scripts/mrtgstat_apcups.pl` MaxBytes[ups]: 220 Title[ups]: APC UPS statistics PageTop[ups]: <h1>APC UPS statistics</h1> AbsMax[ups]: 1250000 Options[ups]: nopercent,gauge,nobanner YLegend[ups]: voltage ShortLegend[ups]: voltage Legend1[ups]: Output voltage Legend2[ups]: Input voltage
В результате график будет выглядеть примерно так:
Графики остальных параметров рисуются аналогичным образом с соответствующими модификациями скрипта /usr/local/scripts/mrtgstat_apcups.pl. На этом всё. Приятной работы!
Anonymous 2013-08-22 09:30:27 (#)
> print time() . "\n";
Наверное всё-таки так?
print localtime() . "\n";