Мониторинг температуры с помощью NetPing TS v2

()

Во многих отраслях современной промышленности периодически появляется необходимость поддерживать в некотором помещении заданную температуру и отслеживать все её изменения. При выходе температуры за рамки нужно срочно включить кондиционер (или обогреватель) и оповестить о возникновении нештатной ситуации обслуживающий персонал.

Помочь в решении этой задачи может устройство 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

Всё! Теперь будут вестись логи всех критических ситуаций. Модифицировать скрипты для выполнения других действий (например включенийя/выключения кондиционера) мы предоставим читателю.

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

P.S. Статья написана по просьбе «Алентис Электроникс» и так же опубликована на сайте компании.

Ключевые слова: netping, mrtg, мониторинг, триггер.

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

Anonymous 2009-08-05 16:04:39 (#)

Да, а ничего что устройства удаленного управления поддерживают snmp v1 - без шифрования и с возможностью перехвата паролей...
классное будет управление серверной :)

MooSE 2009-08-05 16:39:09 (#)

Цитата:

ичего что устройства удаленного управления поддерживают snmp v1 - без шифрования и с возможностью перехвата паролей


1. в твою сеть может проникнуть любой дурак? Тогда шифрование тебя не спасёт
2. если так надо по чужому каналу гнать тарфик - что мешает завернуть его в openvpn?

Anonymous 2009-11-05 19:26:03 (#)

А что произойдет в случае с отрицательной температурой на улице? куда отрисуется график (данный факт необходим при снижени температуры до некоего отрицательного значения, при котором нельзя включать кондиционеры - можно их повредить)

MooSE 2009-11-06 00:55:42 (#)

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

а вообще можно запускать несложный скрипт на perl, который будет проверять этот момент.

Anonymous 2009-11-06 07:13:58 (#)

Речь то не про саму ситуацию, а про то как MRTG будет выводить отрицательную кривульку, попробовал подправить лог файл, внес в него отрицательные значения, так на графике они уползли в зону координаты времени, прямо на цифры :( а хотелось бы почестному

MooSE 2009-11-06 08:36:50 (#)

MRTG не умеет. Я использовал Zabbix.

Anonymous 2009-11-14 15:51:21 (#)

юзайте кактус и будет вам счастье.....

MooSE 2009-11-16 00:27:06 (#)

Цитата:

юзайте кактус и будет вам счастье.....

Мыши плакали, кололись...

Новый комментарий



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