Мониторинг напряжения на бытовом ИБП

()

Очень часто серверы в небольших организациях, а так же домашние сервера делаются из обычных бытовых системных блоков, а от перепадов напряжения защищаются с помощью простейших бытовых ИБП. Такие ИБП обычно подключаются к серверу по 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. На этом всё. Приятной работы!

Ключевые слова: apcupsd, mrtg, apcaccess, ups.

Комментарии:

Anonymous 2013-08-22 09:30:27 (#)

> # Текущее время
> print time() . "\n";

Наверное всё-таки так?

print localtime() . "\n";
Новый комментарий



© 2006-2016 Вадим Калинников aka MooSE