Мониторинг ИБП с помощью Network UPS Tool и MRTG

()

Несмотря на появление мощных и современных систем мониторинга, MRTG по прежнему остаётся популярным инструментом для мониторинга небольших сетей. Во многом это обусловлено простотой настройки и большими возможностями для расширения с помощью всевозможных скриптов.

Одновременно набирает популярность Network UPS Tool (NUT) - инструмент управления источниками бесперебойного питания, отличающийся широким спектром поддерживаемого оборудования и богатым функционалом. Ну и разумеется с помощью несложных скриптов можно строить графики в MRTG по данным из NUT. Далее будет рассмотрено конкретное решение этой задачи.

Начальные данные: настроенный NUT-сервер по адресу «192.168.12.253», на котором доступен ИБП с именем «main». Для получения данных также необходима авторизация на NUT-сервере: логин: «monitoring», пароль: «P4sSw0rD». Необходимо нарисовать два графика: величины заряда батареи и величины нагрузки на ИБП. Оба значения - в процентах.

Решение заключается в написании скрипта, который будет запрашивать данные у NUT-сервера и отдавать их в нужном формате. Писать будем на Perl, так как для него есть удобная библиотека для взаимодействия с NUT, усановить которую в Debian и Ubuntu можно командой:

apt-get install libups-nut-perl

Скрипт достаточно прост и все данные о ИБП получает в параметрах командной строки. Листинг скрипта:

#!/usr/bin/perl

use strict;
use warnings;
use diagnostics;

use Getopt::Long;

use UPS::Nut;

=usage
Все параметры опциональны. Доступные параметры:

        --name=ups_name (default: default)
        --host=hostname (default: localhost)
        --user=username (default: no username)
        --pass=password (default: empty password)
=cut

# Значения по умолчанию
my $ups_host = "localhost";
my $ups_name = "default";
my $ups_username = "";
my $ups_password = "";

# Получаем параметры
GetOptions(
        "host=s" => \$ups_host,
        "name=s" => \$ups_name,
        "user=s" => \$ups_username,
        "pass=s" => \$ups_password,
);

# Подключаемся к NUT-серверу
my $ups = new UPS::Nut(
        NAME => $ups_name,
        HOST => $ups_host,
        USERNAME => $ups_username,
        PASSWORD => $ups_password,
) or die("Can't connect to UPS!\n");

# Получаем данные
my $ups_load = $ups->Request("ups.load");
my $ups_batt_charge = $ups->Request("battery.charge");

# Печатаем данные
print $ups_load ? "$ups_load\n" : "0\n";
print $ups_batt_charge ? "$ups_batt_charge\n" : ""\n";

Сохраняем скрипт под именем «/usr/local/scripts/mrtg_nut_ups.pl» и переходим к настройке MRTG. Нам надо добавить в конфигурацию следующие строки:

Target[nut_localhost_main]: `/usr/local/scripts/mrtg_nut_ups.pl --host=192.168.12.253 --name=main --user=monitoring --pass=P4sSw0rD`
MaxBytes[nut_localhost_main]: 100
Title[nut_localhost_main]: UPS main via NUT on localhost
PageTop[nut_localhost_main]: <h1>UPS main via NUT on localhost</h1>
AbsMax[nut_localhost_main]: 200
Options[nut_localhost_main]: gauge
YLegend[nut_localhost_main]: percent
ShortLegend[nut_localhost_main]: %
Legend1[nut_localhost_main]: UPS Load
Legend2[nut_localhost_main]: Battery charge
LegendI[nut_localhost_main]: UPS Load
LegendO[nut_localhost_main]: Battery charge

Через некоторое время на графике появятся первые данные. У автора этих строк с бытовым ИБП «IPPON BACK Basic 650VA», питающим домашний сервер график выглядит так:

График заряда батареи и загрузки ИБП (NUT+MRTG)

Подобным образом можно построить графики и других параметров ИБП. Например напряжение в сети и температура ИБП. Полный список доступных параметров можно увидеть в выводе команды:

upsc main@192.168.12.253

На этом всё. Приятной работы!

Ключевые слова: nut, nut-server, mrtg, perl.

Подписаться на обновления: RSS-лента Telegram канал Twitter

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

Ladm 2018-04-21 22:42:38 (#)

MooSE, ты работу сменил? наиболее важный параметр - внутреннее состояние батареи, но к сожалению эта штука врятли его может показывать.

Anonymous 2018-04-22 07:13:04 (#)

А напряжение оно не выводит сети там и на выходе из упса для наглядности стабильности сети? :)

MooSE 2018-04-22 13:38:01 (#)

MooSE, ты работу сменил?
Нет. С чего ты взял?:)

наиболее важный параметр - внутреннее состояние батареи
У штатного nut-monitor есть триггер на выход из строя батареи. Можно прикрутить отправку почты или СМС.

А напряжение оно не выводит сети там и на выходе из упса для наглядности стабильности сети?
Ну вот у меня с домашнего ИБП можно получить такие данные:
battery.charge: 100
battery.voltage: 13.50
battery.voltage.high: 13.00
battery.voltage.low: 10.40
battery.voltage.nominal: 12.0
device.type: ups
driver.name: blazer_usb
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.version: 2.7.2
driver.version.internal: 0.11
input.current.nominal: 2.0
input.frequency: 50.3
input.frequency.nominal: 50
input.voltage: 233.4
input.voltage.fault: 233.4
input.voltage.nominal: 220
output.voltage: 233.4
ups.beeper.status: enabled
ups.delay.shutdown: 30
ups.delay.start: 180
ups.load: 9
ups.productid: 5161
ups.status: OL
ups.temperature: 25.0
ups.type: offline / line interactive
ups.vendorid: 0665


Как видишь напряжение тут есть и графики рисовать можно:)

Ladm 2018-04-22 20:25:39 (#)

Просто статьи новые активно начали появляться. Для частного дома все очень даже хорошо у тебя с сетью.

MooSE 2018-04-22 21:59:30 (#)

Да просто немного оптимизировал своё время:) Плюс начал разгребать накопившиеся черновики:)

Anonymous 2018-10-20 04:36:07 (#)

Забавно, я тоже делал что то подобное. Тоже на perl и для домашнего сервера, но у меня были плохие воспоминания о MRTG с его rrd, в которых вечно не хватало гибкости и детализации. В результате перл-скрипт я сделал демоном, льющим данные в mysql а для отображения их - cgi скрипт и html страничку с highcharts. Ну и некоторые оптимизации пришлось делать чтобы SSD не страдал...

И ещё у меня один вопрос - почему вы на русском пишете? Или где то есть англ. версия?

MooSE 2018-10-20 10:43:18 (#)

И ещё у меня один вопрос - почему вы на русском пишете? Или где то есть англ. версия?

Каким свободно владею, на том и пишу:) Английской версии нет и недостатком это не считаю.

плохие воспоминания о MRTG с его rrd

Строго говоря MRTG и RRD Tool это разные вещи, хотя и созданы одними и теми же людьми. И RRD как раз создан чтобы решить проблемы MRTG. Но с ним надо освоиться. Да и MRTG весьма неплох, если понимать как он работает и где его ограничения.

Anonymous 2018-10-20 16:08:34 (#)

Каким свободно владею, на том и пишу:) Английской версии нет и недостатком это не считаю.

Дело ваше, конечно. Я английским не владею, но свой технический бложик веду на английском (хоть и корявом) это значительно увеличивает аудиторию и не только за счёт англоязычных "товарищей"!

MooSE 2018-10-20 20:25:10 (#)

это значительно увеличивает аудиторию
Я в первую очередь делаю заметки для себя, чтобы если потом под рукой был свой собственный опыт. Аудитория это хорошо, но это не цель.
Новый комментарий

Жирный текстКурсивный текстПодчёркнутый текстЗачёркнутый текстПрограммный кодСсылкаИзображение




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