Мониторинг температуры на Dell Force10 по SNMP + WEB
Итак, есть у меня железка, под названием Dell Force10. Потребовалось мониторить, как колеблется на ней температура в течении дня, времени суток, времени года ( т.к. железка стоит в железном ящике на улице). Поэтому включив на ней snmp, написал небольшой скрипт на bash, который закинул в cron:
*/10 * * * * /home/disnetern/force_temp.sh > /dev/null 2>&1
Каждые 10 минут скрипт опрашивает температуру 6-ти датчиков ( по 1 на каждой плате), потом с помощью rrdtool собираем эти данные в базу и рисуем 4 графика: суточный, недельный, месячный и годовой. Формируется 4 файла .png с графиками:
#!/bin/bash
IP="10.20.30.238" //ip коммутатора
PASS="public" //community
MIB=".1.3.6.1.4.1.6027.3.8.1.2.1.1.5" // Собственно сам MIB для force10 температуры датчиков
M0=`/usr/bin/snmpwalk -v 2c -c $PASS $IP $MIB.1 | cut -d : -f4 | cut -c 2-3`
M1=`/usr/bin/snmpwalk -v 2c -c $PASS $IP $MIB.2 | cut -d : -f4 | cut -c 2-3`
P0=`/usr/bin/snmpwalk -v 2c -c $PASS $IP $MIB.3 | cut -d : -f4 | cut -c 2-3`
P1=`/usr/bin/snmpwalk -v 2c -c $PASS $IP $MIB.4 | cut -d : -f4 | cut -c 2-3`
M2=`/usr/bin/snmpwalk -v 2c -c $PASS $IP $MIB.5 | cut -d : -f4 | cut -c 2-3`
M3=`/usr/bin/snmpwalk -v 2c -c $PASS $IP $MIB.6 | cut -d : -f4 | cut -c 2-3`
RRDTOOL="/usr/bin/rrdtool"
DATABASE="/var/www/html/rrd/temp.rrd"
IMAGE_PATH="/var/www/html"
TITLE_TEXT='Temp Force 10'
UNDER_TEXT='Temperature'
L_MIN=0
L_MAX=99
PERIOD=600
if ! [ -f $DATABASE ] //Формируем базу для сбора значений температуры
then
$RRDTOOL create $DATABASE -s $PERIOD \
DS:M0:GAUGE:6000:0:99 \
DS:M1:GAUGE:6000:0:99 \
DS:P0:GAUGE:6000:0:99 \
DS:P1:GAUGE:6000:0:99 \
DS:M2:GAUGE:6000:0:99 \
DS:M3:GAUGE:6000:0:99 \
RRA:AVERAGE:0.5:1:576 \
RRA:AVERAGE:0.5:6:672 \
RRA:AVERAGE:0.5:24:732 \
RRA:AVERAGE:0.5:144:1460
fi
#LOAD=$M0:$M1:$P0:$P1:$M2:$M3
$RRDTOOL update $DATABASE N:$M0:$M1:$P0:$P1:$M2:$M3 //Запихиваем значения в базу
function DRAW_GRAPHIC //Формируем и рисуем графики
{
NOW_HOUR=`date +%H`
NOW_MIN=`date +%M`
NOW_SEC=`date +%S`
case $2 in
day)
TIME_TEXT="last 24 hours"
;;
week)
TIME_TEXT="last week"
;;
month)
TIME_TEXT="last month"
;;
year)
TIME_TEXT="last year"
;;
esac
$RRDTOOL graph $IMAGE_PATH/$1 \
-s -1$2 \
-e now \
-a PNG \
-v 'celcium' \
-t "$TITLE_TEXT [$HOSTNAME] -s $TIME_TEXT" \
-l $L_MIN \
-u $L_MAX \
-r \
-E \
-i \
-R light \
--zoom 1.2 \
-w 800 \
-h 800 \
DEF:M0=$DATABASE:M0:AVERAGE \
DEF:M1=$DATABASE:M1:AVERAGE \
DEF:P0=$DATABASE:P0:AVERAGE \
DEF:P1=$DATABASE:P1:AVERAGE \
DEF:M2=$DATABASE:M2:AVERAGE \
DEF:M3=$DATABASE:M3:AVERAGE \
LINE3:M0#55cc00:"LC 0" \
LINE3:M1#002233:"LC 1" \
LINE3:P0#cc1155:"RPM 0" \
LINE3:P1#22bb11:"RPM 1" \
LINE3:M2#aa3322:"LC 2" \
LINE3:M3#bb44bb:"LC 3" \
COMMENT:" " \
COMMENT:"Last\: LC0=$M0 LC1=$M1" \
COMMENT:"RPM0=$P0 RPM1=$P1" \
COMMENT:"LC2=$M2 LC3=$M3"
}
DRAW_GRAPHIC 'force_d.png' 'day'
DRAW_GRAPHIC 'force_w.png' 'week'
DRAW_GRAPHIC 'force_m.png' 'month'
DRAW_GRAPHIC 'force_y.png' 'year'
Теперь получившиеся 4 графика закидываем в html страничку, и пихаем в папку с web-сервером с авто обновлением страницы:
<html> <head> <meta http-equiv="Refresh" content="60" /> <title> RRD graphics Temperature fo Force 10</title> </head> <body bgcolor='#ccddcc'> <h2> <font face='Arial'> Temperature</font></h2> <img src='force_d.png'> <br> <img src='force_w.png'> <br> <img src='force_m.png'> <br> <img src='force_y.png'> <br> </body> </html>








Comments
So empty here ... leave a comment!