Материал просмотрен 2,314 раз(а)

Я думаю, не стоит говорить о том, что мониторинг температуры в серверной – вещь чрезвычайно важная. Когда температура выходит за пределы допустимых значений – начинают отказывать сервера (срабатывает защита). Хорошо, если имеется в наличии второй кондиционер, которым должны комплектоваться серверные помещения, кстати, весьма бюджетный вариант: Дантекс . У меня, например, стоят Мицубишки.

Итак, повторяем пинг до сервера, бежим в комнатушку, открываем окно (если оно есть) или дверь. И начинаем думать о том, как выявить перегрев помещения заранее, а не после того, как связь пропала.

Недавно мне попалась на глаза одна девайсина – 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