Nagios

Festplattentemperatur via SNMP

Mir ist gerade mal wieder danach das Blog um einen Beitrag zu erweitern und da laut Statistik der Artikel über den 3ware sehr beliebt war, machen wir mal weiter in der Nagios Kategorie:

Heute: Nagios überwacht die Temperatur der Festplatten via SNMP

Wie immer, wenn es um SNMP geht beginnen wir wieder auf dem Server den wir überwachen wollen mit einem einfachen und billigen Script:

/root/script/check_smarttemp.sh
#!/bin/bash
smartctl -a -d3ware,$1 /dev/twa0 | grep Temperature_Celsius | awk '{print $10}'

Wie man hier wunderbar sehen kann, hängt die betroffene Festplatte hinter einen 3ware RAID Controller. Das Script muss noch entsprechend angepasst werden (Pfad RAID Controller, oder ohne RAID Controller). Die Variable $1 ermöglicht uns bei Aufruf die Platte anzugeben.

Das Script ist nun soweit fertig und wir können es in den SNMP Daemon aufnehmen:

/etc/snmp/snmpd.conf
exec check_smart_0 /root/script/check_smarttemp.sh 0
exec check_smart_1 /root/script/check_smarttemp.sh 1

Hierüber können wir nun 2 Festplatten via SNMP überwachen, das lässt sich natürlich beliebig erweitern. Wie man dann auf die SNMP OIDs kommt werde ich hier nicht erklären da ich wie immer die Grundkentnisse voraussetze.

Der Nagios Server
Im libexec Ordner von Nagios schreiben wir ersteinmal ein angepasstes Plugin (das folgendes nicht wirklich Standardkonform ist, ist bekannt)

check_snmp_smart.sh
#!/bin/bash
MIB=$(($2+5))


/opt/nagios/libexec/check_snmp -H $1 -P 1 -C public -o .1.3.6.1.4.1.2021.8.1.101.$MIB -w :$3 -c :$4 | sed 's/iso.3.6.1.4.1.2021.8.1.101.'$MIB'/Temp/'

Dieses Script sogt dafür das man die Festplattennummer direkt in der Service Config anwählen kann. Es setzt natürlich voraus, das es entsprechend angepasst wird (OIDs) zudem sollte man auf allen Servern eine identische snmpd.conf benutzen, damit die OIDs nicht verschoben werden.

Das neue check Command legen wir nun als Kommando fest:

define command {
command_name check_smarttemp
command_line $USER1$/check_snmp_smart $HOSTADDRESS$ $ARG1$ $ARG2$ $ARG3$
}

Und als Service erstellt sieht das dann so aus:

define service{
use 5minute-service
host_name server
service_description Temperatur Platte 0
check_command check_smarttemp!0!35!45
}
define service{
use 5minute-service
host_name server
service_description Temperatur Platte 1
check_command check_smarttemp!1!35!45
}

Die erste Variable gibt die Festplattennummer am RAID Controller an und die beiden anderen Warn und Crit Temperatur. Das selbst geschriebene Plugin ist nur zu einem einzigen Zweck da (man könnte das auch direkt mir check_snmp.pl machen): Performance Daten für den Nagios PNP Aufsatz. Dann sieht das ganze dann nämlich so aus: Temperatur SNMP Platte 1

3 thoughts on “Festplattentemperatur via SNMP”

  1. Hallo!
    Bei mir zeigt smartctl -a -d3ware,0 /dev/twa0 | grep Celsius

    immer eine falsche Temperatur an: 19°:

    190 Temperature_Celsius 0x0022 181 139 000 Old_age Always – 19
    194 Temperature_Celsius 0x0022 181 139 000 Old_age Always – 19

    Das scheint mir etwas wenig; welche Controllermodelle hast du denn im Einsatz?

  2. Verschiedene:
    3ware Inc 9650SE SATA-II RAID
    3ware Inc 9550SX SATA-RAID
    3ware Inc 7xxx/8xxx-series PATA/SATA-RAID

    Funktioniert bei allen ohne Probleme. Ich war dabei allerdings so bequem und habe die lspci Ausgabe verwendet.

  3. das kann man eigentlich auch einfacher haben. tw_cli zeigt einem auch die Temperatur an, zB mit tw_cli /c0/p0 show temperature | awk ‘{print $4}’

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert