Home Gentoo Server

Наблюдение на температура на сървърно помещение

15.09.2012 Posted by Александър Христов

Идеята се появи след като климатика в едно от сървърните помещения реши да има собствено мнение дали да работи и как да работи 🙂 . Трябваше ми скрипт който да следи температурата в помещението и над определена температура да ме известява с смс и да ми изпраща e-mail.

След търсене в интернет попаднах на тази схема. Информацията се от чипа се извлича с  digitemp.

1 вия скрип  DS18B20.pl го ползвам, да визуализира информацията в cacti и за скрипта ми.

[code lang=“perl“]

#!/usr/bin/perl

$temp0 = `digitemp -t 0 | grep „Sensor 0“ -m 1 | awk ‘{print \$7}’`;
printf(„%.0f\n“, $temp1);

[/code]

Следва самия скрипт monitor_temp_serv_room.sh който следи температурата.

[code lang=“bash“]
#!/bin/bash
######################
thermo_datchik=“../DS18B20.pl“
email=“admin@domain.com“
room=“DATA Center “
LOG=/usr/bin/logger
NORMAL_LEVEL=25
WARN_LEVEL=26
CRITICAL_LEVEL=35
error_datchik=85
time_sleep=300
######################

normal_level_r () {
(
date
echo „$room Temperature is Normal – $TEMP C*“
) | mail -s „$room monitoring“ $email
}

warn_level_u_r () {
(
date
echo „$room Temperature is UP – $TEMP C*“
) | mail -s „$room monitoring“ $email
}

warn_level_d_r () {
(
date
echo „$room Temperature is DOWN – $TEMP C*“
) | mail -s „$room monitoring“ $email
}

critical_level_r () {
(
date
echo „$room Temperature is CRITICAL – $TEMP C*, PLEASE SYSTEM DOWN“
) | mail -s „$room monitoring“ $email
#$LOG „$room Temperature is CRITICAL – $TEMP C*, SYSTEM DOWN“
sleep $time_sleep
begin_f
#halt exit 0
}

set_warn_level () {
newtemp=$TEMP
oldtemp=$TEMP
while (true) ; do
if [ „$oldtemp“ -eq „$newtemp“ ] ; then # $oldtemp = $newtemp
echo
else
if [ „$oldtemp“ -lt „$newtemp“ ] ; then # $oldtemp < $newtemp warn_level_u_r else if [ "$oldtemp" -gt "$newtemp" ] ; then # $oldtemp > $newtemp
warn_level_d_r
if [ „$newtemp“ -le $NORMAL_LEVEL ] ; then # $oldtemp < = $NORMAL_LEVEL normal_level_r begin_f fi fi fi fi oldtemp=$newtemp sleep $time_sleep TEMP=`$thermo_datchik` newtemp=$TEMP if [ "$newtemp" -ge $CRITICAL_LEVEL ] ; then critical_level_r fi done } critical_level_f () { if [ "$TEMP" -ge $CRITICAL_LEVEL ] ; then critical_level_r else set_warn_level fi } begin_f () { TEMP=`$thermo_datchik` if [ "$TEMP" -ge $WARN_LEVEL ] ; then # $TEMP >= $WARN_LEVEL
if [ „$TEMP“ -eq $error_datchik ] ; then # $TEMP = $error_datchik
sleep $time_sleep
begin_f
else
warn_level_u_r
critical_level_f
fi
else
sleep $time_sleep
begin_f
fi
}

#begin script
begin_f

[/code]

Идеята на скрипта е да следи температурата постоянно, като реагира само на промяна.

Т.е. задаваме следните температури:

NORMAL_LEVEL=25 – температура <= е нормална за сървърното помещение
WARN_LEVEL=26 – температура >= от NORMAL_LEVEL трябва да се обърне внимание
CRITICAL_LEVEL=35 – температура >= от NORMAL_LEVEL трябва да се обърне специално внимание и да се подготвят за изключване сървърите
error_datchik=85 – При недостатъчно напрежение от RS232 датчика репортува температура 85*

в един момент спира климатика, много сървъри в помещението и в момента когато сработва скрипта температурата е 29*.  Време на изчакване е 300 сек или 5 минути. След 5 мин температурата пак е 29* и в този случай системата няма да прави SMS. След още 5 минути температурата е намаляла на 27* при което се получава SMS, че температурата спада. И така на татък до нормализиране на температурата.

По принцип в началото мислех след като премине критична температура, да изключва сървъра, но в момента е направен да изчаква и пак от начало ред 41 и 42, ако все пак някой реши да ползва тази опция нека размаркира ред 40 и 43 и да маркира 41 и 42.

аз пиша скриптове – ха ха ха

13.09.2012 Posted by Александър Христов

Последно време доста ми се наложи да се науча как се пишат скриптове на bash :), и мисля че е време вече да почна да си ги събирам, се оказва после трудно да възпроизведа което съм написал :D. Самото писане се оказа не толкова сложно, и bash като език за писане на скриптове доста ми харесва, макар като съм говорил с колеги програмисти много да не го харесват защото им е леко „странен“ или различен от класическите езици за писане на сорс. Като цяло скриптове които се наложи да роди моята гениалност 🙂 са за наблюдение и архивиране на системите. Едно от важните неща който един уважаващ себе си системен администратор. Всичко което съм сътворил или ще сътворя е в тази секция :), дано да са полезни на някой освен мен :).