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:
© odwiedź stronÄ™ http://maciejewski.org po wiÄ™cej fajnych postów!