ISP`s IT Аутсорсинг
Быстрый переход: Главная блога Главная сайта Форум
Если Вы чего то недопоняли или не нашли - задайте
вопрос на нашем форуме и мы попробуем Вам помочь.
Subnets.ru Регистрация IP и Автономных систем mega-net.ru

В нашем примере мы рассмотрим мониторинг бесперебойников APC путём использования serial-кабеля и утилиты apcupsd.

Начинаем.

Подключаем кабель к com-порту машины и ups. (Сразу обращу внимание, что стандартный COM кабель не подходит. Сама APC не дает схему распайки кабеля. Будьте внимательны. Если кого-то отпугнёт цена подобного кабеля у дилера, можно попробовать самостоятельно спаять его, воспользовавшись схемой).

На машине с FreeBSD устанавливаем порт apcupsd

cd /usr/ports/sysutils/apdupsd
make install clean

В окне конфигурации достаточно оставить одну галку напротив «Compile APC SmartUPS serial driver»

После процесса установки идём в /etc/rc.conf и добавляем туда строку:

apcupsd_enabled=»YES»

для разрешения автоматического запуска при буте из /usr/local/etc/rc.d/apcupsd

Скрипты и конфиги из диры /usr/local/etc/apcupsd

changeme, commfailure, commok, offbattery, onbattery — скрипты оповещения по мылу о состояниях UPS

соответственно — требуется замена батарей, потеря связи с бесперебойником, восстановление связи с бесперебойником, появление напряжения в сети, пропадание напряжения в сети и начало работы от аккумуляторов.

В каждом из этих скриптов следует поменять адрес (или адреса) mail на нужные.

Скрипт apccontrol используется для получения информации от ups, информирования в консоль об изменении состояния ups, выключения или перезагрузки обслуживаемых компьютеров (в данном случае — подключенного к ups по COM кабелю). Исполняется исключительно демоном apcupsd. Единственное что можно в нём поправить при надобности — закоментить строку с переменной перезагрузки

#SHUTDOWN=/sbin/shutdown

для предотвращения перезагрузок при частом пропадании питания (например часто мигает свет, и ups постоянно даёт ведомому компьютеру команду перезагрузиться).

Рассмотрим основные параметры конфига программы — apcupsd.conf

UPSCABLE smart — наш тип кабеля в данном случае

UPSTYPE apcsmart — тип нашего ups

DEVICE /dev/cuad0 — com-порт нашего компьютера (возможно, будет отличаться, например /dev/cuaa0)

POLLTIME 60 — интервал опроса ups’а демоном apcupsd в секундах

SCRIPTDIR /usr/local/etc/apcupsd — путь к скриптам

ONBATTERYDELAY, BATTERYLEVEL, MINUTES, TIMEOUT — определяют поведение ведомого компьютера в случае пропадания напряжения в сети (реакция в минутах)

ANNOY, ANNOYDELAY, NOLOGON — определяют время на выход из системы пользователей в случае пропадания напряжения в сети, а также возможность/невозможность логина в систему в таком состоянии

KILLDELAY — при ненулевом значении этого параметра, система будет работать указанное время (в секундах) даже после того как получила сигнал на выключение, по истечении которого будет предпринята попытка выключить систему

EVENTSFILE /var/log/apcupsd.events — файл логов. сюда попадают все события полученные от ups

EVENTSFILEMAX — размер вышеуказанного файла (в килобайтах, например — 100)

Пример работающего конфига apcupsd.conf:

#———————————

## apcupsd.conf v1.1 ##
# for apcupsd release 3.14.4 (18 May 2008) — freebsd

# «apcupsd» POSIX config file
# ========= General configuration parameters ============

#
UPSCABLE smart
UPSTYPE apcsmart

DEVICE /dev/usv
#POLLTIME 60

LOCKFILE /var/spool/lock

SCRIPTDIR /usr/local/etc/apcupsd
PWRFAILDIR /var/run

NOLOGINDIR /var/run

ONBATTERYDELAY 6

BATTERYLEVEL 5

MINUTES 3

TIMEOUT 0

ANNOY 300

ANNOYDELAY 60

NOLOGON disable

KILLDELAY 0

NETSERVER on

NISIP 0.0.0.0

NISPORT 3551

EVENTSFILE /var/log/apcupsd.events

EVENTSFILEMAX 10

UPSCLASS standalone

UPSMODE disable

STATTIME 0

STATFILE /var/log/apcupsd.status

LOGSTATS off

DATATIME 0

#FACILITY DAEMON

#UPSNAME UPS_IDEN
#BATTDATE mm/dd/yy

#SENSITIVITY H

#WAKEUP 60

#SLEEP 180

#LOTRANSFER 208

#HITRANSFER 253

#RETURNCHARGE 15

#BEEPSTATE T

#LOWBATT 2

#OUTPUTVOLTS 230

SELFTEST 336
#———————————

Запускаем apcupsd

/usr/local/etc/rc.d/apcupsd start

Проверяем связь с ups

/usr/local/sbin/apcaccess status

Если всё настроено правильно, получаем примерно следующий вывод:

APC : 001,052,1285
DATE : Thu Jul 24 15:00:46 MSD 2008
HOSTNAME : test-server
RELEASE : 3.14.0
VERSION : 3.14.0 (9 February 2007) freebsd
UPSNAME : UPS_IDEN
CABLE : Custom Cable Smart
MODEL : Smart-UPS 3000 RM
UPSMODE : Stand Alone
STARTTIME: Thu Jul 17 10:16:47 MSD 2008
STATUS : BOOST ONLINE
LINEV : 203.0 Volts
LOADPCT : 31.8 Percent Load Capacity
BCHARGE : 100.0 Percent
TIMELEFT : 20.0 Minutes
MBATTCHG : 10 Percent
MINTIMEL : 100 Minutes
MAXTIME : 0 Seconds
MAXLINEV : 216.0 Volts
MINLINEV : 177.1 Volts
OUTPUTV : 233.2 Volts
SENSE : High
DWAKE : 000 Seconds
DSHUTD : 090 Seconds
DLOWBATT : 02 Minutes
LOTRANS : 208.0 Volts
HITRANS : 253.0 Volts
RETPCT : 000.0 Percent
ITEMP : 25.2 C Internal
ALARMDEL : 5 seconds
BATTV : 55.1 Volts
LINEFREQ : 50.0 Hz
LASTXFER : Line voltage notch or spike
NUMXFERS : 551
XONBATT : Thu Jul 24 14:39:19 MSD 2008
TONBATT : 0 seconds
CUMONBATT: 808 seconds
XOFFBATT : Thu Jul 24 14:39:20 MSD 2008
SELFTEST : NO
STESTI : 336
STATFLAG : 0x0720000C Status Flag
REG1 : 0x00 Register 1
REG2 : 0x00 Register 2
REG3 : 0x00 Register 3
MANDATE : 02/21/07
SERIALNO : JS0708009520
BATTDATE : 02/21/07
NOMOUTV : 230
NOMBATTV : 48.0
EXTBATTS : 0
FIRMWARE : 666.6.I
APCMODEL : FWI
END APC : Thu Jul 24 15:01:17 MSD 2008

Более подробно можно прочесть в мане /usr/local/share/doc/apcupsd/apcupsd.pdf

Или скачать его ТУТ

С помощью небольшого скрипта на PERL можно парсить вывод и получать основные, нужные параметры, которые, например, отдавать для построения графиков в MRTG о загрузке, заряда батарей, температуре и т.п.

#!/usr/bin/perl

use Time::Local;

sub curr_date_unix{
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime();
$date_unix=timelocal ($sec,$min,$hour,$mday,$mon,$year+1900);
return $date_unix;
}
$cur_date=curr_date_unix();

%month_num=(‘Jan’ => ‘0’,
‘Feb’ => ‘1’,
‘Mar’ => ‘2’,
‘Apr’ => ‘3’,
‘May’ => ‘4’,
‘Jun’ => ‘5’,
‘Jul’ => ‘6’,
‘Aug’ => ‘7’,
‘Sep’ => ‘8’,
‘Oct’ => ‘9’,
‘Nov’ => ’10’,
‘Dec’ => ’11’,
);

@status=`/usr/local/sbin/apcaccess status`;

@ups_day=qw (01 02 03 04 05 06 07 08 09);

for ($i=0; $i<=$#status; $i++){
@spl=split(‘ ‘,$status[$i]);
chomp ($spl[0]);
chomp ($spl[2]);
chomp ($spl[3]);
chomp ($spl[4]);
chomp ($spl[6]);
if ($spl[0] eq LOADPCT){
$load=$spl[2];
}elsif ($spl[0] eq BCHARGE){
$charge=$spl[2];
}elsif ($spl[0] eq MAXLINEV){
$maxv=$spl[2];
}elsif ($spl[0] eq MINLINEV){
$minv=$spl[2];
}elsif ($spl[0] eq OUTPUTV){
$outv=$spl[2];
}elsif ($spl[0] eq ITEMP){
$temp=$spl[2];
}elsif ($spl[0] eq MODEL){
$model1=$spl[2];
$model2=$spl[3];
$model3=$spl[4];
}elsif ($spl[0] eq «STARTTIME:»){
$month=$spl[2];
$day=$spl[3];
$year=$spl[6];
@time_spl=split(‘:’,$spl[4]);
for ($j=1; $j<10; $j++){
if ($day eq $ups_day[$j-1]){
$day=$j;
}
}
}elsif ($spl[0] eq STATUS){
$st=$spl[2];
$st1=$spl[3];
}
}
$time=timelocal ($time_spl[2],$time_spl[1],$time_spl[0],$day,$month_num{$month},$year);
$delta= $cur_date — $time;

$min = $delta / 60;
$hours = $min / 60;
$days = sprintf(«%d»,($hours / 24));
$hours = sprintf(«%02d»,($hours — ($days * 24)));
$min = sprintf(«%02d»,($min — ($days * 60 * 24) — ($hours * 60)));
$sec = sprintf(«%02d»,($delta — ($min * 60) — ($days * 60 * 60 * 24) — ($hours * 60 * 60)));
if ( $days ne «0» ) {
$uptime = «$days days, «;
}
if ( $hours ne «0» ) {
$uptime .= «$hours:»;
}
$uptime .= «$min:$sec»;

open(UPS, «>/usr/ups.txt») || die «$!»;

printf UPS («%.0f\n»,$load);
printf UPS («LOAD\n»);

printf UPS («%.0f\n»,$charge);
printf UPS («CHARGE\n»);

printf UPS («%.0f\n»,$maxv);
printf UPS («MAXLINEV\n»);

printf UPS («%.0f\n»,$minv);
printf UPS («MINLINEV\n»);

printf UPS («%.0f\n»,$outv);
printf UPS («OUTPUTV\n»);

printf UPS («%.0f\n»,$temp);
printf UPS («ITEMP\n»);

printf UPS («%s %s\n»,$st,$st1);
printf UPS («STATUS\n»);

printf UPS («%s %s %s\n»,$model1,$model2,$model3);
printf UPS («MODEL\n»);

close(UPS);

Вывод результатов данного скрипта можно видеть в файле /usr/ups.txt:

32
LOAD
99
CHARGE
217
MAXLINEV
210
MINLINEV
213
OUTPUTV
25
ITEMP
ONLINE
STATUS
Smart-UPS 3000 RM
MODEL

И данные из этого файла уже можно скармливать MRTG для построения графиков.

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Автор: MadMax

Похожие статьи:

    Не найдено

Прочитано: 24 858 раз(а)
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 9, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту

Добавить комментарий

Вам следует авторизоваться для размещения комментария.