Job / Praca

    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:

    Related Posts with Thumbnails

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

    Add your widget here