Wykres temperatury serwera w RRD (NetBSD)

Zastanawiałem się ostatnio jak wyrysować sobie temperaturę jaką ma serwer lub jego otoczenie (zależnie od zainstalowanych sensorów) w serwerowni, bez instalowania mysql i cacti (oraz pluginów ponieważ domyślnie z snmp chyba temperatury zczytać nie można).

W NetBSD mamy możliwość sprawdzania danych z ACPI przy pomocy envstat. Trzeba przekompilować kernel aby zawierał odpowiednie „hardware monitory”.

Działanie envstat wygląda nastepująco i różni się w zależności od maszyny, niemniej jednak różnego rodzaju temperatury powinny być widoczne:

cancer@snort~/rrd[175]13:34#envstat
 Current  CritMax  CritMin  CritCap     Unit
[ipmi0]
 PS 2 Status:        OFF
 PS 1 Status:        OFF
 CPU Vtt:      1.250                                   V
 CPU 2 VCore:      1.040                                   V
 CPU 1 VCore:      1.260                                   V
 DASD Temp:     26.000                                degC
 VBAT:      3.184                                   V
 -12V Sense:    -11.412                                   V
 12VA Sense:     12.033                                   V
 5V Sense:      5.018                                   V
 12VC Sense:     12.600                                   V
 12VB Sense:     12.600                                   V
 2.5V Sense:      2.590                                   V
 1.8V Sense:      1.810                                   V
 1.5V Sense:      1.550                                   V
 1.3V Sense:      1.400                                   V
 1.25V Sense:      1.310                                   V
 CPU 2 Temp:     29.000                                degC
 CPU 1 Temp:     29.000                                degC
 Fan 12 Tach:       1740                                 RPM
 Fan 11 Tach:       1860                                 RPM
 Fan 10 Tach:       1830                                 RPM
 Fan 9 Tach:       1890                                 RPM
 Fan 8 Tach:       1680                                 RPM
 Fan 7 Tach:       1710                                 RPM
 Fan 6 Tach:       1710                                 RPM
 Fan 5 Tach:       1860                                 RPM
 Fan 4 Tach:       1800                                 RPM
 Fan 3 Tach:       1800                                 RPM
 Fan 2 Tach:       1710                                 RPM
 Fan 1 Tach:       1680                                 RPM
 Ambient Temp:     21.000                                degC

W moim przypadku na tym serwerze interesujące jest oczywiście pole Ambient Temp:. Nie ma tu reguły i różni producenci stosują różne oznaczenia. W IBM jest Ambient Temp, w HP Rear Ambient, gdzieś indziej może być np Aux Temp: itp.  Przyjmujemy wartość Ambient Temp, że to jest to co nam chodzi i przy pomocy grep i awk wycinamy resztę:

envstat | grep "Ambient Temp" | awk '{print $3}'

W wyniku dostajemy samą temperaturę czyli 21.000

Aby oznaczyć dane na wykresie trze je umieścić w czasie, do tego wystarczy nam systemowy date działający tak aby pokazywał „timestamp” czyli czas w sekundach od początku epoki. Za timestampem dostawimy dwukropek który będzie oddzielał znacznik czasu od wartości temperatury, czyli:

date +%s:

dostajemy 1272542448: Za pomocą date -r 1272542448 można odczytać jaką dokładnie datę pokazuje timestamp: Thu Apr 29 14:00:48 CEST 2010

Potrzebne jeszcze jest jedno zewnętrzne narzędzie do gromadzenia danych oraz rysowania wykresu – RRDTool

Po zainstalowaniu z databases/rrdtool w pkgsrc możemy przystąpić do tworzenia bazy:

rrdtool create /usr/home/cancer/rrd/temperatura.rrd -s 300 \
DS:temperatura:GAUGE:400:10:50 \
RRA:AVERAGE:0.5:1:210240 \
RRA:MAX:0.5:1:210240 \
RRA:MIN:0.5:1:210240 \
RRA:LAST:0.5:1:210240 \

Taka baza będzie aktualizowana co 5 minut (-s 300), oraz będzie gromadziła dane w zakresie od 10 stopni do 50 stopni Celsjusza (tak, po awarii klimatyzacji w serwerowni może być taka temperatura :).

W zasadzie mamy wszystko. Przy pomocy rrdtool update /usr/home/cancer/rrd/temperatura.rrd timestamp:temperatura można już wypełniać bazę danymi.

Teraz trochę automatyzacji, na początek skrypt:

#!/bin/ksh
echo -n `date +%s:` >> /usr/home/cancer/rrd/temprrd.txt
echo -n `envstat | grep "Ambient Temp" | awk '{print $3}'` >> /usr/home/cancer/rrd/temprrd.txt
echo " " >> /usr/home/cancer/rrd/temprrd.txt
temperatura=`cat /usr/home/cancer/rrd/temprrd.txt`
/usr/pkg/bin/rrdtool update /usr/home/cancer/rrd/temperatura.rrd $temperatura
/usr/pkg/bin/rrdtool graph /usr/home/cancer/public_html/temperatura.png --imgformat PNG --title="Tempertatura w serwerowni" --width 800 --height 300 --vertical-label="Stopnie Celsjusza .C" --end now --start end-2592000s DEF:temp=/usr/home/cancer/rrd/temperatura.rrd:temp:AVERAGE GPRINT:temp:LAST:"aktualna %2.2lf .C" GPRINT:temp:MIN:"minimalna %2.2lf .C" GPRINT:temp:MAX:"maksymalna %2.2lf .C" GPRINT:temp:AVERAGE:"srednia %2.2lf .C" AREA:temp#6060ef LINE1:temp#0000ff
rm /usr/home/cancer/rrd/temprrd.txt

Wrzucamy go do dowolnego pliku oraz nadajemy mu prawa do wykonania. Co z czym tu się je:

1. Pierwsza linia wyświetla timestamp oraz dwukropek oraz zapisuje wszystko do pliku /usr/home/cancer/rrd/temprrd.txt. Opcja -n powoduje, że nie mamy znaku nowej lini i powrotu karetki.
2. Druga liniawycina nam temperature i wstawia ją w tym samym pliku zaraz za dwukropkiem
3. Trzecia linia dostawia spacje wraz ze znakiem końca linii.
4. Przy pomocy polecenia cat podstawiamy naszą daną z pliku temprrd.txt pod zmienną temperatura.
5. Aktualizujemy bazę danymi ze zmiennej temperatura.
6. Rysujemy wykres. WAŻNE ! Ta linia aż do temp#0000ff musi być w całości !
7. Ostatnia linia usuwa plik z danymi tymczasowymi.

Taki skrypt dodajemy do crontaba aby był uruchamiany co 5 miut:
*/5 * * * * /bin/ksh /usr/home/cancer/rrd/temprrd.sh >/dev/null 2>&1

Za kilkanaście minut powinien pojawić się wykres mniej więcej taki jak ten poniżej:

VN:F [1.9.22_1171]
Rating: 10.0/10 (2 votes cast)
VN:F [1.9.22_1171]
Rating: +1 (from 1 vote)
Wykres temperatury serwera w RRD (NetBSD), 10.0 out of 10 based on 2 ratings
Related Posts with Thumbnails

© odwiedź stronę http://maciejewski.org po więcej fajnych postów!

Podobne posty

Dodaj komentarz

Twój adres email nie zostanie opublikowany.

Time limit is exhausted. Please reload the CAPTCHA.

CommentLuv badge