Во многих отраслях современной промышленности периодически появляется необходимость поддерживать в помещении заданную температуру и отслеживать все её изменения. При выходе температуры за рамки нужно срочно включить кондиционер (или обогреватель) и оповестить о возникновении нештатной ситуации обслуживающий персонал.
Помочь в решении этой задачи может устройство NetPing TS v2, производства компании ООО «Алентис Электроникс» с подключенными к нему датчиками TS1 и TS2 того же производителя. Далее будет приведено описание примера такого решения.
Итак, начальные условия:
- Сервер мониторинга под управлением Debian или основанного на нём дистрибутива (Ubuntu, Mepis) с адресом 192.168.2.1;
- Устройство NetPing TS v2 с прошивкой версии 50.4, имеющее IP-адрес 192.168.2.10 и SNMP-Community «SWITCH», доступ к которому разрешён как минимум с сервера мониторинга;
- Два температурных датчика — TS1 и TS2, причём TS1 стоит на улице, а TS2 расположен внутри контролируемого помещения
Приступаем к решению поставленной задачи. Полностью нашим потребностям удовлетворяем система мониторинга MRTG, написанная на Perl. Однако, прежде чем продолжить, расскажем о ней подробнее.
MRTG расшифровывается как Multi Router Traffic Grapher. Изначально эта система создавалась исключительно для мониторинга сетевых интерфейсов, и наследие этого просматривается до сих пор. Например, на одном графике нельзя отображать более двух показателей, именуемых входным и выходным трафиком. Однако самое главное, что устройство умеет опрашивать устройства по SNMP и осуществляет поддержку триггеров, которые включаются при выходе отслеживаемых параметров за допустимые рамки.
Чтобы не уходить далеко от терминологии, используемой в MRTG, мы будем именовать наши температуры «входом» и «выходом». Причём «входом» мы будем называть температуру на улице, а «выходом» — температуру в помещении.
Приступаем к развёртыванию нашего решения. Для начала установим mrtg:
apt-get install mrtg
Далее нам понадобиться «Описание встроенного ПО для DKSF 50.4-08 NetPing TS v2». Конкретно нас интересуют OID, по которым можно получить текущую температуру на датчиках.
Для тех, кому лень читать документацию приведём их здесь:
- TS1: 1.3.6.1.4.1.25728.50.8.1005
- TS2: 1.3.6.1.4.1.25728.50.8.1017
Теперь приступаем к конфигурированию MRTG. Для этого создадим файл /etc/mrtg.cfg следующего содержания:
# Директория, куда будут складываться графики
WorkDir: /var/www/mrtg# Директория, где будут создаваться временные файлы
# Её нужно указывать, только если вы будете использовать триггеры
ThreshDir: /tmp# Эти параметры задают цвета на страничках и графиках. Они не обязательны, но улучшают внешний вид
Background[_]: #EEEEEC
Colours[_]: GREEN#4E9A06,BLUE#3465A4,ORANGE#CE5C00,ORANGE#CE5C00# Отключаем поддержку IPv6 (она нам не нужна)
EnableIPv6: no# Отключаем загрузку MIB-файлов. В этом случае MRTG не будет запрашивать у устройства sysName и sysUptime (нам это не нужно).
NoMib2: Yes# Описываем нужный график
# В параметра Target нужно описать через амперсанд два OID (входной и выходное), потом через двоеточие SNMP Community,
# И наконец после ‘@’ — хост.
Target[netping]: 1.3.6.1.4.1.25728.50.8.1017&1.3.6.1.4.1.25728.50.8.1005:SWITCH@192.168.2.10# Изначально тут указывается пропускная способность канала, но мы используем это значение в качестве максимальной температуры
# На этом уровне на графиках будет нарисована красивая красная пунктирная линия
MaxBytes[netping]: 30
# Перечисляем параметры этого графика
# — gauge указывает, что нужно рисовать график абсолютных величин параметров, а не скоростей их изменения;
# — nopercent указывает на отсутствие необходимости считать отношение текущей величины к MaxBytes;
# — nobanner указывает, что нам не нужен логотип MRTG внизу страницы с графиками.
Options[netping]: gauge,nopercent,nobanner
# Заголовок (html-title) страницы с графиками
Title[netping]: Temperature
# Надпись вверху страницы
PageTop[netping]: <h1>Term statistics</h1>
# Короткие описания графиков
LegendI[netping]: degree of celcius (external)
LegendO[netping]: degree of celcius (internal)
# Развёрнутые описания графиков
Legend1[netping]: external temperature
Legend2[netping]: internal temperature
# Единица измерения на графиках
ShortLegend[netping]: degree
Подробнее о конфигурации MRTG можно прочитать в официальной документации.
Если WorkDir не существует, её нужно создать:
mkdir -p /var/www/mrtg
Через некоторое время в директории /var/www/mrtg появится файл netping.html, и небольшой набор сопутствующих файлов. Если открыть этот файл в браузере, можно просматривать графики, которые обновляются каждые пять минут.
Для доступа к этим графикам по сети удобно будет использовать небольшой web-сервер. Например, thttpd.
Установим его:
apt-get install thttpd
Далее приведём файл /etc/thttpd/thttpd.conf к следующему виду:
port=80
dir=/var/www/mrtg
chroot
user=www-data
cgipat=/cgi-bin/*
throttles=/etc/thttpd/throttle.conf
logfile=/var/log/thttpd.log
charset=utf-8
И перезапустим web-сервер:
invoke-rc.d thttpd restart
После этого графики можно просматривать открывая в браузере на странице http://192.168.2.1/netping.html. Выглядеть она будет примерно вот так:
Теперь нам нужно настроить триггер, который будет включаться при превышении температуры порога в 30 градусов и выключаться при возврате оной в норму. Для этого снова обратимся к документации MRTG и внимательно прочитаем секцию «THRESHOLD CHECKING». Конкретно нас должны заинтересовать параметры: ThreshMaxO, ThreshProgO и ThreshProgOKO. Приведём краткое описание этих параметров:
- ThreshMaxO — Максимальное значение «выхода» (в нашем случае как раз температуры в помещении). При достижении этого значения триггер будет включаться;
- ThreshProgO — Программа, которая будет выполняться при включении триггера. Ей передаются три параметра: имя графика, значение порога, и значение в момент срабатывания триггера;
- ThreshProgOKO — Программа, которая будет выполняться при выключении триггера. Ей так же передаются три параметра: имя графика, значение порога и значение в момент выключения триггера.
В качестве программ, обрабатывающих переключение состояний триггера, можно использовать скрипты. Сейчас напишем два скрипта, которые просто будут вести логи событий.
Первый скрипт (/root/scripts/netping_bad.sh):
#!/bin/sh
LOGFILE=»/tmp/netping-bad.log»
echo ==================== >> ${LOGFILE}
date +»%Y/%m/%d %H:%M:%S» >> ${LOGFILE}
echo «Graph: ${1}» >> ${LOGFILE}
echo «Threshold value: ${2}» >> ${LOGFILE}
echo «Current value: ${3}» >> ${LOGFILE}
Второй скрипт (/root/scripts/netping_good.sh):
#!/bin/sh
LOGFILE=»/tmp/netping-good.log»
echo ==================== >> ${LOGFILE}
date +»%Y/%m/%d %H:%M:%S» >> ${LOGFILE}
echo «Graph: ${1}» >> ${LOGFILE}
echo «Threshold value: ${2}» >> ${LOGFILE}
echo «Current value: ${3}» >> ${LOGFILE}
Теперь добавим в файл конфигурации MRTG следующие строки:
ThreshMaxO[netping]: 29
ThreshProgO[netping]: /root/scripts/netping_bad.sh
ThreshProgOKO[netping]: /root/scripts/netping_good.sh
Всё! Теперь будут вестись логи всех критических ситуаций. Модифицировать скрипты для выполнения других действий (например, включения/выключения кондиционера) мы предоставим читателю. На этом всё. Приятной работы!
Вадим Калинников
E-mail: moose@ylsoftware.com
Web: http://ylsoftware.com