Nagios

3ware Monitoring

Da ich heute in einem Forum zum erneuten Male eine Frage zum Monitoring aufgeschnappt habe, dokumentieren wir doch einmal, wie das bei uns läuft. Als zentrales Monitoring kommt das gute alte Nagios zum Einsatz, mit einigen Sateliten- Servern (pro größeres Netzwerk), da Nagios nicht nur unsere Server sondern auch die von uns verwalteten Netzwerke überwacht (incl. Router, Switche, APs, VoIP Telefone etc.) auf NDO Backend.

Aber lange Rede kurzer Sinn, nun zum eigentlichen Punkt:

Die Überwachung der 3ware Controller funktioniert aus einer Symbiose zwischen Nagios – SNMP – Bash – tw_cli (3ware Command- Line)

Fangen wir mal ganz unten an:

tw_cli
Ich setze jetzt einfach einmal voraus, das dies bereits installiert ist, wird bei den meisten Distris schon mitgeliefert (z.B. Gentoo) alternativ natürlich auf der Seite von 3ware zu finden.

Bash- Script
Das folgende Bash- Script beruht auf dem Grundgerüst von Markus Jaschen (mal vielen Dank an dieser Stelle) und wurde innerhalb weniger Minuten ein wenig verändert. Wie immer mal wieder keine Zeit gehabt und deswegen schnell etwas zusammengetackert, es sieht nicht schön aus, aber es funktioniert.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/bin/sh 
# 
# This script checks 
# 
# - RAID Status 
# - Drive Status 
# 
# on a 3ware 7006-2 ATA RAID Controller. 
# 
# returns 1 if RAID error was detected, 2 if DISK error was detected 
# 
# Marcus T. Jaschen < rikman (@) gmail > 
# 2006-02-03 
 
# tw_cli binary location 
TWCLI=/sbin/tw_cli 
 
# controller name 
CONTROLLER=c0 
 
# get complete status 
STATUS_CONTROLLER=`$TWCLI /$CONTROLLER show` 
 
# check for RAID status 
STATUS_RAID=`echo "$STATUS_CONTROLLER" | grep "^u0" | awk '{ print $3; }'` 
 
[[ $STATUS_RAID != "OK" ]]  { 
STATUS_RAID = "CRITICAL" 
exit 1 
} 
 
# check for disk status 
STATUS_DISKS=`echo "$STATUS_CONTROLLER" | grep "^p[[:digit:]]" | awk '{ print $2; }'` 
 
[[ -z `echo "$STATUS_DISKS" | grep -v "^OK$"` ]] || { 
STATUS_RAID = "CRITICAL" 
exit 2 
} 
 
echo $STATUS_RAID 
 
exit 0

Das ganze schieben wir in eine Datei (z.B. /root/script/check_raid.sh), passen den Controller an ($CONTROLLER) und machen diese ausführbar. Das ganze können wir nun einmal mit /root/script/check_raid.sh testen (es sollte OK zurückgeliefert werden, wenn nicht: PANIK . . .).

SNMP
Nun können wir den Status lokal einsehen, ganz toll, aber irgendwie soll ja nun auch unser Monitoring- Server etwas davon mitbekommen. Also nutzen wir SNMP, damit können wir Kinderleicht den Status remote abfragen. Ich setze wiedereinmal voraus das etwas installiert ist, diesmal ist es Net-SNMP und die public community angepasst ist. Jetzt müssen wir nur noch folgende Zeilen in die /etc/snmp/snmpd.conf (oder wo auch immer sie liegen mag) hinzufügen:

exec check_raid /root/script/check_raid.sh

Natürlich muss auch eine passende rocommunity konfiguriert sein, damit unser Nagios- Server überhaupt diesen Server per SNMP abfragen kann. Zum Abschluss nur noch den SNMP- Dienst neustarten.

Nagios
Der letzte Schritt dieses kleinen HowTos, die konfiguration von Nagios. Mithilfe des Nagios Plugins “check_snmp” kann man folgendes command in der Konfiguration anlegen:

define command {
command_name check_raid
command_line $USER1$/check_snmp -H $HOSTADDRESS$ -P 1 -C public -o .1.3.6.1.4.1.2021.8.1.101.1 -r OK
}

Die lange Zahlenkette ist die sog. oid, wird diese per SNMP angerufen, wird unser Bash- Script aufgerufen und der Wert per SNMP zurückgeliefert. Diese oid lautet allerdings nur so für den ersten Eintrag in der snmpd.conf, weitere exec- Anweisungen haben eine fortlaufende oid. Nun brauchen wir nur noch den Hostservice für check_raid konfigurieren, zum Beispiel so:

define service{
use 5minute-service
host_name unser-server
service_description RAID Controller
check_command check_raid
}

Und fertig ist das ganze.

Bevor irgendwelche Beschwerden kommen: Ja, dieses HowTo setzt Grundwissen im Bereich Linux / SNMP / Nagios voraus, wer bereits das hier gelesen hat, es unbedingt braucht, aber die Grundkenntnisse nicht hat, kann diese sich ziehmlich schnell zusammenlesen, gerade im Bereich Nagios ist http://www.nagios-wiki.de eine ausgezeichnete Anlaufstelle.

9 thoughts on “3ware Monitoring”

  1. danke für das shellscript, aber irgendwie würfelt dein blog alle sonderzeichen durcheinander.

    [code]
    #!/bin/sh
    #
    # This script checks
    #
    # – RAID Status
    # – Drive Status
    #
    # on a 3ware 7006-2 ATA RAID Controller.
    #
    # returns 1 if RAID error was detected, 2 if DISK error was detected
    #
    # Marcus T. Jaschen
    # 2006-02-03

    # tw_cli binary location
    TWCLI=/usr/sbin/tw_cli

    # controller name
    CONTROLLER=c0

    # get complete status
    STATUS_CONTROLLER=`$TWCLI /$CONTROLLER show`

    # check for RAID status
    STATUS_RAID=`echo “$STATUS_CONTROLLER” | grep “^u0” | awk ‘{ print $3; }’`

    [[ $STATUS_RAID != “OK” ]] &# check for disk status
    STATUS_DISKS=`echo “$STATUS_CONTROLLER” | grep “^p[[:digit:]]” | awk ‘{ print $2; }’`

    [[ -z `echo “$STATUS_DISKS” | grep -v “^OK$”` ]] || {
    STATUS_RAID=”CRITICAL”
    exit 2
    }

    echo $STATUS_RAID

    exit 0
    [/code]

  2. Das Skript meldet bei einem Controller mit freien Ports auch 2.

    Folgende Zeile muss angepasst werden:

    [[ -z `echo “$STATUS_DISKS” | grep -v “^OK$”` ]] || {

    in:

    [[ -z `echo “$STATUS_DISKS” | grep -v “^OK$” | grep -v “^NOT-PRESENT$”` ]] || {

  3. Hallo,
    das Script läuft gut. Danke dafür 🙂

    Jetzt habe ich aber 2 Raid laufen u0 und u1.

    Wie erweiter ich am besten das Script?

    Danke

Schreibe einen Kommentar

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