Zabbix lsi raidcontroller ueberwachen

Raidcontroller identifizieren

Von LSI sind zwei Serien in aktueller Serverhardware verbreitet: Megaraid und Fusion-MPT.

Die Fusion-Kontroller sind kein Raid-Controller sondern Hostbusadapter/HBA). Diese werden in der Regel dazu verwendet, das System mit einem externen Storage-System zu verbinden. Die "Raid-Logik" wird nicht vom HBA sondern dem externen Storage-System bereitgestellt. Der Kontroller weiß nichts über den Zustand von Spiegelungen, weil das Storage-System die Raidverbünde als eine Festplatte an den Kontroller übergibt.

Die Magaraid-Serie hingegen sind "echte" Raidcontroller mit einem integrierten Prozessor. Der Kontroller steuert alle Festplatten an und weiß entsprechend über alle Status von Spiegelungen und Festplattenzustand Bescheid.

Testen Sie mit lspci, welchen Kontroller Sie verwenden:

# lspci|grep LSI
16:08.0 SCSI storage controller: LSI Logic / Symbios Logic SAS1068 PCI-X Fusion-MPT SAS (rev 01)
1a:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS 1078 (rev 04)

Megaraid Serie

Megacli für Linux installieren

  • Laden Sie auf der Homepage von Avagotech (vormals LSI) das Tool MegaCli für Linux herunter. Oder versuchen Sie es über diesen Direktlink `wget http://docs.avagotech.com/docs-and-downloads/raid-controllers/raid-controllers-common-files/8-07-06_MegaCLI.zip`
  • Entpacken Sie die Zip-Datei 8-07-06_MegaCLI.zip. In dieser Datei ist MegaCli für fast alle Betriebssysteme enthalten.
  • Im Unterordner MegaCLI/MegaCli_Linux/ befindet sich die Datei MegaCli-8.XX.noarch.rpm. Benutzer von RPM-Systemen können dieses Paket direkt installieren.
  • Benutzer von Ubuntu- oder Debianlinux wandeln das RPM mit dem Befehl alien MegaCli-8.05.71-1.noarch.rpm in ein DEB-Paket um und installieren dieses.
  • Im Ordner /opt/MegaRAID/MegaCli/ liegen die ausführbaren Datei MegaCli und MegaCli64.

Testen Sie, ob Megali den Status des Controllers lesen kann.

# Anzahl der von Megacli erkannten Controller
./MegaCli64 -adpCount
# Informationen über die BBU
./MegaCli64 -AdpBbuCmd -aALL
# Liste der physikalischen Festplatten
./MegaCli64 -PDList -aALL
# Liste der Raidverbünde (Logische Laufwerke)
./MegaCli64 -LDInfo -Lall -aALL
# Status alle Adapter
./MegaCli64 -AdpAllInfo -aALL

GGf. auftauchende Meldungen wie

OSSpecificInitialize: Failed to load libsysfs.so.2.0.2 Please ensure that libsfs is present in the system.
The dependent library libsysfs.so.2.0.1 not available. Please contact LSI for distribution of the package

kann man ignorieren, solange der Status des Controllers korrekt ermittelt werden kann. Auf einigen Systemen, zum Beispiel Ubuntu 10.04 muss das Paket libsysfs-dev installiert werden, und ein symbolische Link gesetzt werden.

apt-get install libsysfs-dev
cd /usr/lib
ln -s libsysfs.so libsysfs.so.2.0.2

Sudo einrichen

Folgenden Eintrag zu Datei /etc/sudoers hinzufügen.

zabbix  ALL=(ALL) NOPASSWD:/opt/megacli/MegaCli64

Wrapper Script verwenden

#!/bin/bash

#
# Checks the status of the hardware raid.
# Checkresults are returned as text or integer.
# The script expects one parameter: The check you want to perform .
# The second paramter, the value you want to grep, is optional.
# The third parameter, the adapter number, is optional. If adapter number is missing, 0 is set.
# Thanks to https://twiki.cern.ch/twiki/bin/view/FIOgroup/DiskRefPerc
# for the nice overview
#

MEGACLI_BIN=/opt/megacli/MegaCli64
MEGACLI="sudo $MEGACLI_BIN"

# Check if Megacli is installed and executable
if [ -e $MEGACLI_BIN ]
then
    true
else
    echo "Megacli missing";
    exit 1
fi

# Set the adapternumber
if [ $3 ]
then
    ADAPTER=$3
else
    ADAPTER=0
fi

# Check if Megacli is compatible with the hardware
COUNT=$($MEGACLI -adpCount|grep "Controller Count"|grep -o "[0-9]*")
if [ $COUNT -lt 1 ]
then
    echo "No compatible adapter"
    exit 1
fi

case $1 in
    bbu)
        # Grep anything from the bbu info
        $MEGACLI -AdpBbuCmd -a${ADAPTER}|grep "$2"|head -n1|cut -d ":" -f 2|tr -d " "
    ;;
    adapter)
        # Grep anything from the adapter info
        $MEGACLI -AdpAllInfo -a${ADAPTER}
    ;;
    mediaerrors)
        # Return the total number of disk which has reported an media error.
        $MEGACLI -PDList -a${ADAPTER} |grep "Media Error Count"|grep -cv "Media Error Count: 0"
    ;;
    raiderrors)
        # Return the number of arrays which do not have state "optimal"
        $MEGACLI -LDInfo -Lall -a${ADAPTER}|grep State|grep -vc Optimal
    ;;
    alarm)
        # Return 0 if the adapter is reporting no alarm. Return 1 if an alarm is reported.
        # This check does not know what kind of alarm is reported.
        $MEGACLI -AdpAllInfo -aALL|grep -i Alarm|head -n1|grep -cv "Alarm.*Absent"
    ;;
    adapters)
        # Return the number of installed adapters
        echo $COUNT
    ;;
esac

Items einrichten

zum Beispiel so:
Beispiel für Items

Fusion Serie (mpt-status)

Einige Kontroller der Fusion-Serie verfügen über einen "kleinen" Raid-Kontroller. Diese Kontroller werden unter Linux mit dem Kernelmodul mptsas betrieben. Ein Kontroller dieser Serie ist zum Beispiel der

Der Kontroller gibt sich per lspci wie folgt aus:

LSI Logic / Symbios Logic SAS1068E PCI-Express Fusion-MPT SAS (rev 08)
Subsystem: IBM Unknown device 0394
Flags: bus master, fast devsel, latency 0, IRQ 20
I/O ports at 1000 [size=256]
Memory at 9b910000 (64-bit, non-prefetchable) [size=16K]
Memory at 9b900000 (64-bit, non-prefetchable) [size=64K]
Expansion ROM at 9bc00000 [disabled] [size=2M]
Capabilities: [50] Power Management version 2
Capabilities: [68] Express Endpoint IRQ 0
Capabilities: [98] Message Signalled Interrupts: 64bit+ Queue=0/0 Enable-
Capabilities: [b0] MSI-X: Enable- Mask- TabSize=1

Der Status eines solchen Kontrollers kann über das Kernelmodul mptctrl und Kommando mpt-status ausgelesen werden.

# modprobe mptctl
# mpt-status -p
Checking for SCSI ID:0
Checking for SCSI ID:1
# mpt-status -i 1
ioc0 vol_id 1 type IM, 2 phy, 278 GB, state OPTIMAL, flags ENABLED
ioc0 phy 1 scsi_id 3 IBM-ESXS MBD2300RC        SB16, 279 GB, state ONLINE, flags NONE
ioc0 phy 0 scsi_id 2 IBM-ESXS MBD2300RC        SB16, 279 GB, state ONLINE, flags NONE

Die RPMs von SUSE können auch unter RHEL und CentOS verwendet werden.

ftp://ftp.opensuse.org/distribution/11.2/repo/oss/suse/x86_64/mpt-status-1.2.0-172.1.x86_64.rpm

ftp://ftp.opensuse.org/distribution/11.2/repo/oss/suse/i586/mpt-status-1.2.0-172.1.i586.rpm

sudo einrichten

Fügen Sie folgenden Eintrag in der Datei /etc/sudoers hinzu, damit Zabbix den Raid-Status auslesen darf:

zabbix  ALL=(ALL) NOPASSWD:/usr/bin/mpt-status

UserParameter einrichten

Fügen Sie in der zabbix_agentd.conf folgende UserParameter ein

UserParameter=mptstatus.volumestate[*],sudo mpt-status -i $1|grep vol_id|grep -o "state [A-Z]*"
UserParameter=mptstatus.onlinedevices[*],sudo mpt-status -i $1|grep -c "scsi_id.*state ONLINE"

Fusion Serie (sas2ircu)

Nicht alle Controller der Fusion-Serie sind Raid-Controller. Einige sind nur HBAs ohne Raid-Funktion. Der bei Dell als PERC H200 Adapter verbaute Controller Symbios Logic SAS2008 ist zum Beispiel ein Raidcontroller. Dieser kann nicht mit dem Tool mpt-status überwacht werden. Diese Kontroller werden unter Linux mit dem Kernelmodul mpt2sas betrieben.

Der Controller gibt sich per lspci wie folgt aus:

Serial Attached SCSI controller: LSI Logic / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] (rev 03)
Subsystem: Dell PERC H200 Adapter
Flags: bus master, fast devsel, latency 0, IRQ 38
I/O ports at fc00 [size=256]
Memory at df2b0000 (64-bit, non-prefetchable) [size=64K]
Memory at df2c0000 (64-bit, non-prefetchable) [size=256K]
Expansion ROM at df100000 [disabled] [size=1M]
Capabilities: [50] Power Management version 3
Capabilities: [68] Express Endpoint, MSI 00
Capabilities: [d0] Vital Product Data
Capabilities: [a8] MSI: Enable- Count=1/1 Maskable- 64bit+
Capabilities: [c0] MSI-X: Enable+ Count=15 Masked-
Capabilities: [100] Advanced Error Reporting
Capabilities: [138] Power Budgeting <?>
Kernel driver in use: mpt2sas

LSI bietet für die Raid-Controller der Fusion-Serie das Tool sas2ircu, welches Sie hier downloaden können.


sas2ircu installieren

Laden Sie die Datei ibm_sw_mpt2sas_sas2ircu-4.00.00.00_linux_32-64.zip über den zuvor genannten Link herunter. Nach dem Entpacken des Zip-Files kopieren Sie die Datei sas2ircu zum Beispiel nach /opt/sas2ircu/sas2ircu

Testen Sie, ob Ihr Controller erkannt wird mit

~# /opt/sas2ircu/sas2ircu LIST
LSI Corporation SAS2 IR Configuration Utility.
Version 4.00.00.00 (2009.10.12) 
Copyright (c) 2009 LSI Corporation. All rights reserved. 


         Adapter      Vendor  Device                       SubSys  SubSys 
 Index    Type          ID      ID    Pci Address          Ven ID  Dev ID 
 -----  ------------  ------  ------  -----------------    ------  ------ 
   0     SAS2008     1000h    72h   00h:03h:00h:00h      1028h   1f1dh 
SAS2IRCU: Utility Completed Successfully.

Lesen Sie nun den Status der Festplatten mit folgenden Kommando aus. (Die ID des Controller muss ggf. angepasst werden.)

/opt/sas2ircu/sas2ircu 0 DISPLAY

sudo einrichten

Fügen Sie folgenden Eintrag in der Datei /etc/sudoers hinzu, damit Zabbix den Raid-Status auslesen darf:

zabbix  ALL=(ALL) NOPASSWD:/opt/sas2ircu/sas2ircu

Wrapper Script

Legen Sie sich folgendes Wrapper-Skript zum Beispiel in der Datei /usr/local/lib/zabbix/check_fusion_raid.sh an, welches dann als UserParamerter in den Zabbix-Agenten eingebunden wird.

#!/bin/bash

#
# Checks the status of the hardware raid.
# Checkresults are returned integer.
# The script expects one parameter: The check you want to perform .
# The second parameter, the adapter number, is optional. If adapter number is missing, 0 is set.
#

SAS2IRCU_BIN=/opt/sas2ircu/sas2ircu

# Check if SAS2IRCU is installed and executable
if [ -e $SAS2IRCU_BIN ]
then
    true
else
    echo "SAS2IRCU missing";
    exit 1
fi

# Set the adapternumber
if [ $2 ]
then
    ADAPTER=$2
else
    ADAPTER="0"
fi

SAS2IRCU="sudo $SAS2IRCU_BIN $ADAPTER DISPLAY"

case $1 in
    mediaerrors)
        # Return the total number of disk which has reported a state other then Optimal.
        $SAS2IRCU|grep -A3 "Device is a Hard disk"|grep State|grep -vc "Optimal (OPT)"
    ;;
    raiderrors)
        # Return the number of arrays which do not have state "Okay"
        $SAS2IRCU|grep "Status of volume"|grep -vc "Okay (OKY)"
    ;;
    firmware)
        # Return the version of the firmware
	$SAS2IRCU |grep "Firmware version"|cut -d":" -f2|tr -d " "
    ;;
esac

Fügen Sie dann in der Zabbix-Agent Konfiguration folgenden UserParameter ein:

UserParameter=fusion.raid[*],/usr/local/lib/zabbix/check_fusion_raid.sh $1

Items anlegen

Fusion raid items.png

Megaraid Serie (alt)

Häufig sind auch noch LSI Controller ältere Generation im Einsatz. Zum Beispiel der von Dell als Perc4 bezeichnete MegaRAID SCSI 320-2E Kontroller. Diese gibt sich wie folgt aus:

14:0e.0 RAID bus controller: Dell PowerEdge Expandable RAID controller 4 (rev 06)
Subsystem: Dell PowerEdge Expandable RAID Controller 4e/Di

Diese Kontroller werden mit dem Kernelmodul megaraid_mbox betrieben und können mit dem Tool megarc überwacht werden.

Laden Sie die Binaries für das Programm „MegaRAID SCSI MegaRC - Linux, Version 1.11“ von der Avahotech (vormals LSI) Webseite herunter. Probieren Sie den folgenden Direktlink.

Nach dem Entpacken des Zip-Files testen Sie, ob der Kontroller von megarc erkannt wird. Im Zipfile sollten zwei Dateien enthalten sein, megarc und megarc.bin. Megarc.bin ist das eigentliche Programm, welche vom Wrapper megarc ausgeführt wird.

 ./megarc -AllAdpInfo
	**********************************************************************
	      MEGARC MegaRAID Configuration Utility(LINUX)-1.11(12-07-2004)     
	      By LSI Logic Corp.,USA
	**********************************************************************
	  [Note: For SATA-2, 4 and 6 channel controllers, please specify
	  Ch=0 Id=0..15 for specifying physical drive(Ch=channel, Id=Target)]

	Type ? as command line arg for help

	AdapterNo  FirmwareType  CardType
	00	    40LD/8SPAN    PERC 4e/Di

In diesem Falle wurde ein Kontroller mit der Nummer Null erkannt. Den Status des Raids können Sie nun mit folgendem Befehl auslesen.

./megarc -ldInfo -Lall -a0

sudo einrichten

Fügen Sie folgende Sudo-Regel ein:

zabbix  ALL=(ALL) NOPASSWD:/opt/megarc/megarc.bin

UserParameter einrichten

Fügen Sie folgende UserParamter der Konfiguration des Zabbix-Agenten hinzu.

UserParameter=megarc.raidstatus,sudo /opt/megarc/megarc.bin -ldInfo -Lall -a0|grep -o "Status:.*"

Nun können Sie ein Item megarc.raidstatus vom Typ character einrichten und einen Alarm auslösen, wenn der Rückgabewert nicht den Text OPTIMAL enthält.

raidctl unter Solaris

Zur Überwachung des Raidstatus können unter Solaris das Kommando raidctl verwenden. Prüfen Sie, ob Ihr Kontroller mit raidctl ausgelesen werden kann.

#raidctl -l
Controller: 1
        Volume:c1t1d0
        Festplatte: 0.2.0
        Festplatte: 0.3.0
#raidctl -l c1t1d0
Volume                  Größe  Stripe  Status   Cache  RAID
        Sub                     Größe                  Level
                Festplatte                                      
----------------------------------------------------------------
c1t1d0                  278.4G  k. A.   OPTIMAL  OFF    RAID1
                0.3.0   278.4G          GUT     
                0.2.0   278.4G          GUT     

pfexec Regeln

Damit der User zabbix das Kommando raidctl mit Root-Rechten ausführen darf, müssen Sie ein neue Rolle für zabbix anlegen und dem Zabbix-User diese neue Rolle zuweisen (vergleichbar sudo unter Linux).

echo "zabbix:::Zabbix Monitoring Agent:">>/etc/security/prof_attr
echo "zabbix:suser:cmd:::/usr/sbin/raidctl:uid=0;gid=0">>/etc/security/exec_attr
usermod -P'zabbix' zabbix

UserParameter hinzufügen

Fügen Sie in die zabbix_agentd.conf folgende UserParameter ein

UserParameter=raid.status[*],LANG=en.US_UTF8 pfexec raidctl -l $1|grep $1|awk '{print $4}'
UserParameter=raid.good_devices[*],LANG=en.US_UTF8 pfexec raidctl -l $1|grep -c "0\.[0-9].*GOOD"

Nützliche Hinweise

Nachdem Zabbix Ihnen einen Hinweis auf einen Fehler im Raid gegeben hat, müssen Sie die Details manuell prüfen.

megacli -PDList -aALL

Dieses Kommando gibt Ihnen alle Details zu allen Festplatten aus.

Wenn Sie eine defekte Festplatte tauschen müssen, dann können Sie diese über eine LED leicht identifizieren.

megacli -PdLocate -start -physdrv[32:8] -a0
sleep 10
megacli -PdLocate -stop -physdrv[32:8] -a0

Mit diesem Kommando schalten Sie die LED von Festplatte mit Device ID 8 im Enclosure 32 an und wieder aus.

Logs des Kontrollers in eine Datei exportieren:

megacli -AdpEventLog -GetSinceReboot -f /tmp/controller.log -aALL

Links

http://www.thomas-krenn.com/de/wiki/RAID_Status_abfragen

https://twiki.cern.ch/twiki/bin/view/FIOgroup/DiskRefPerc

http://docs.avagotech.com/docs-and-downloads/raid-controllers/megaraid-sas-9260-4i/MR_SAS_SW_UG.pdf