Я думаю, не стоит говорить о том, что мониторинг температуры в серверной – вещь чрезвычайно важная. Когда температура выходит за пределы допустимых значений – начинают отказывать сервера (срабатывает защита). Хорошо, если имеется в наличии второй кондиционер, которым должны комплектоваться серверные помещения, кстати, весьма бюджетный вариант: Дантекс . У меня, например, стоят Мицубишки.
Итак, повторяем пинг до сервера, бежим в комнатушку, открываем окно (если оно есть) или дверь. И начинаем думать о том, как выявить перегрев помещения заранее, а не после того, как связь пропала.
Недавно мне попалась на глаза одна девайсина – USB-термометр, весьма, кстати, недорогой. Называется TEMPer.
Есть разные виды устройств, внутренние и внешние датчики температуры и влажности. Самый простой (который нас полностью удовлетворяет) – это единственный внутренний датчик температуры.
Такой термометр продается под разными брендами, чаще всего под торговой маркой PCsensor компании RDing Technology.
Комплектация составляет USB-удлинитель, датчик и диск с ПО. Кроме самого датчика – все остальное оказывается ненужным. Прога под Windows годится лишь для демонстрации, а удлинитель весьма неудобен.
В качестве софта для Windows можно использовать программу ThermoHID (url), где есть необходимые функции (пороговые значения температуры, отправка сообщения по почте, построение графика во времени и т.д.)
Под Unix-системы все намного интереснее. Благодоря драйверу uthum, значения температуры складываются в одну из переменных sysctl. (BSD)
# sysctl hw.sensors.uthum1
hw.sensors.uthum1.temp0=24.50 degC (inner)
Конечно в других системах все может быть представлено иначе. Но в любом случае продолжу рассматривать этот вариант.
# sysctl hw.sensors.uthum.temp0 | awk '{print $1}'
hw.sensors.uthum1.temp0=24.00
Отсекаем то, что было после пробела. Теперь, по хорошему нужно ещё взять только цифровое значение температуры:
# sysctl hw.sensors.uthum1.temp0 | awk '{print $1}' | awk -F"=" '{print $2}'
24.00
То, что нужно.
Ну а теперь осталось завести веб-сервер, собирать статистику и демонстрировать её по запросу, примерный скрипт на языке оболочки:
#!/bin/sh # Пути к программе и данным
PATH_TO_RRDTOOL=/usr/local/bin/rrdtool
PATH_TO_DB=/usr/local/rrd/temperdb.rrd
PATH_TO_IMG=/usr/local/rrd/temper/png
# Чтение температуры и период для базы данных в секундах.
# С той же периодичностью требуется запускать сам скрипт.
GETTEMP=`sysctl hw.sensors.uthum1.temp0 | awk '{print $1}' | awk -F"=" '{print $2}'`
STEP=60 # Описания и данные для построения графика
GRAPH_TITLE='Temperature'
GRAPH_LEGEND='Temp.'
T_MIN=0
T_MAX=35
# Проверка и создание базы данных, если не существует.
# В примере – для данных за час, сутки, неделю и месяц.
if ! [ -f $PATH_TO_DB ] then
$PATH_TO_RRDTOOL create $PATH_TO_DB -s $STEP DS:temperature:GAUGE:300:0:40 \
RRA:AVERAGE:0.5:1:60 \
RRA:AVERAGE:0.5:5:288 \
RRA:AVERAGE:0.5:10:1008 \
RRA:AVERAGE:0.5:60:1488
fi
# Внесение в базу нового отсчёта
$PATH_TO_RRDTOOL update $PATH_TO_DB N:$GETTEMP
# Создадим функцию для построения графиков
function CreateImg {
# Получение текущих даты и времени
CURRENT_DATE=`date +%Y," "%B," "%d`
CURRENT_HOUR=`date +%H`
CURRENT_MIN=`date +%M`
# Разные пояснения на графиках за разные временные периоды
case $1 in
hour)
GRAPH_TYPE="last hour"
VAR_SPEC="(1 min read)"
;;
day)
GRAPH_TYPE="last twenty-four hours"
VAR_SPEC="(5 min avg read)"
;;
week)
GRAPH_TYPE="last week"
VAR_SPEC="(10 min avg read)"
;;
month)
GRAPH_TYPE="last month"
VAR_SPEC="(30 min avg read)"
;;
esac
# Создание файла с графиком по заданным параметрам
$PATH_TO_RRDTOOL graph $PATH_TO_IMG/$2 \
-s -1$1 \
-e now \
-a PNG \
-t "$GRAPH_TITLE - $GRAPH_TYPE" \
-l $T_MIN \
-u $T_MAX \
-r \
-E \
-i \
-R light \
-w 500 \
-h 200 \
DEF:temperature=$PATH_TO_DB:temperature:AVERAGE \
LINE3:temperature#009900:"$GRAPH_LEGEND" \
GPRINT:temperature:LAST:"Current\: %0.1lf°C" \
GPRINT:temperature:MAX:"[ Max\: %0.1lf°C" \
GPRINT:temperature:MIN:"Min\: %0.1lf°C ] $VAR_SPEC" \
COMMENT:"Get time\: $CURRENT_DATE - $CURRENT_HOUR\:$CURRENT_MIN" }
# Конец функции CreateImg
# Вызов функции построения графиков за разные периоды
CreateImg 'hour' 'img0_last_hour.png'
CreateImg 'day' 'img1_last_day.png'
CreateImg 'week' 'img2_tast_week.png'
CreateImg 'month' 'img3_last_month.png'
Пихаем всё это в планировщик cron и получаем графики типа этого:
Бинго!
Источник: http://spvd.ru/page/rding-temper
Comments: