Adaptec-Controller Check für "arcconf"

Lokaler Check, kopieren nach: /usr/lib/check_mk_agent/local/adaptec

#!/bin/bash
#
# 08/2011 Matthias Henze
# Lizenz: GPL v2
#
# Check für Adaptec-Controlleer die von "arcconf" unterstützt werden


# basis01:~# arcconf GETCONFIG 1 AD | grep Status
#   Controller Status                        : Optimal
#   Status                                   : ZMM Optimal
# basis01:~# arcconf GETCONFIG 1 AD | grep Model
#   Controller Model                         : Adaptec 6405

get_model () {
        MODEL=$(arcconf GETCONFIG $1 AD | grep Model | cut -d ":" -f 2)
        MODEL=${MODEL/ /}
        MODEL=${MODEL// /-}
}

for C in $(arcconf GETVERSION | grep "Controller #" | cut -d "#" -f 2)
do
        get_model $C
        STATUS=$(arcconf GETCONFIG $C AD | grep "Controller Status" | cut -d ":" -f 2)
        TEXT="Controller: $C, Status: $STATUS"
        if [ "$STATUS" != "${STATUS/Optimal}" ]; then
                ST=0
        else
                ST=2
        fi
        arcconf GETCONFIG $C AD | grep -q "ZMM" >/dev/null
        if [ $? ]; then
                ZMM=$(arcconf GETCONFIG $C AD | grep "ZMM" | grep "Status" | cut -d ":" -f 2)
                TEXT="$TEXT, $ZMM"
                if [ "$STATUS" != "${STATUS/Optimal}" ]; then
                        ST=$ST
                else
                        ST=2
                fi
        fi
        echo "$ST $MODEL - $TEXT"
done


#basis01:~# arcconf GETCONFIG 1 LD
#Logical device number 0
#   Logical device name                      : a1
#   RAID level                               : 5
#   Status of logical device                 : Optimal
#   Size                                     : 5713910 MB

for C in $(arcconf GETVERSION | grep "Controller #" | cut -d "#" -f 2)
do
        get_model $C
        arcconf GETCONFIG $C LD | awk -v M=$MODEL -v C=$C -- '
BEGIN { N=0 }
/Logical device number/    { N=N+1
                             LD[N,1]=$4 }
/Logical device name/      { LD[N,2]=$5 }
/RAID level/               { LD[N,3]=$4 }
/Status of logical device/ { LD[N,4]=$6 }
/Size/                     { LD[N,5]=$3;
                             LD[N,6]=$4 }
END {
for ( i=1; i<=N; i++ ) {
   if ( LD[i,4] == "Optimal" ) ST=0; else ST=2;
   printf("%s %s-LD-%s - Controller: %s, Logicaldrive: %s, Name: %s, RaidLevel: %s, Status: %s, Size: %s %s\n", ST,M,LD[i,1],C,LD[i,1],LD[i,2],LD[i,3],LD[i,4],LD[i,5],LD[i,6])
}
}'
done



#basis01:~# arcconf GETCONFIG 1 PD
#      Device #0
#         State                              : Online
#         Transfer Speed                     : SATA 6.0 Gb/s
#         Model                              : ST2000DL003-9VT1
#         Size                               : 1907729 MB

for C in $(arcconf GETVERSION | grep "Controller #" | cut -d "#" -f 2)
do
        get_model $C
        arcconf GETCONFIG $C PD | awk -v M=$MODEL -v C=$C -- '
BEGIN { N=0 }
/Device #/       { N=N+1;
                   split($0,a,"#");
                   DR[N,1]=a[2] }
/  State  /      { DR[N,2]=$3 }
/Transfer Speed/ { split($0,a,": ");
                   DR[N,3]=a[2] }
/Model/          { DR[N,4]=$3 }
/Size/           { DR[N,5]=$3;
                   DR[N,6]=$4 }
END {
for ( i=1; i<=N; i++ ) {
   if ( DR[i,2] == "Online" ) ST=0; else ST=2;
   printf("%s %s-DR-%s - Controller: %s, Drive: %s, State: %s, Speed: %s, Model: %s, Size: %s %s\n", ST,M,DR[i,1],C,DR[i,1],DR[i,2],DR[i,3],DR[i,4],DR[i,5],DR[i,6])
}
}
'
done

Neue Version für neueres arcconf und neuere Controller:

#!/bin/bash
#
# 08/2011 Matthias Henze
# Lizenz: GPL v2
#
# Check für Adaptec-Controlleer die von "/usr/local/bin/arcconf" unterstützt werden
 
 
# basis01:~# /usr/local/bin/arcconf GETCONFIG 1 AD | grep Status
#   Controller Status                        : Optimal
#   Status                                   : ZMM Optimal
# basis01:~# /usr/local/bin/arcconf GETCONFIG 1 AD | grep Model
#   Controller Model                         : Adaptec 6405
 
get_model () {
        MODEL=$(/usr/local/bin/arcconf GETCONFIG $1 AD | grep Model | cut -d ":" -f 2)
        MODEL=${MODEL/ /}
        MODEL=${MODEL// /-}
}
 
for C in $(/usr/local/bin/arcconf GETVERSION | grep "Controller #" | cut -d "#" -f 2)
do
        get_model $C
        STATUS=$(/usr/local/bin/arcconf GETCONFIG $C AD | grep "Controller Status" | cut -d ":" -f 2)
        TEXT="Controller: $C, Status: $STATUS"
        if [ "$STATUS" != "${STATUS/Optimal}" ]; then
                ST=0
        else
                ST=2
        fi
        /usr/local/bin/arcconf GETCONFIG $C AD | grep -q "ZMM" >/dev/null
        if [ $? ]; then
                ZMM=$(/usr/local/bin/arcconf GETCONFIG $C AD | grep "ZMM" | grep "Status" | cut -d ":" -f 2)
                TEXT="$TEXT, $ZMM"
                if [ "$STATUS" != "${STATUS/Optimal}" ]; then
                        ST=$ST
                else
                        ST=2
                fi
        fi
        echo "$ST $MODEL - $TEXT"
done
 
 
#basis01:~# /usr/local/bin/arcconf GETCONFIG 1 LD
#Logical device number 0
#   Logical device name                      : a1
#   RAID level                               : 5
#   Status of logical device                 : Optimal
#   Size                                     : 5713910 MB
 
for C in $(/usr/local/bin/arcconf GETVERSION | grep "Controller #" | cut -d "#" -f 2)
do
        get_model $C
        /usr/local/bin/arcconf GETCONFIG $C LD | awk -v M=$MODEL -v C=$C -- '
BEGIN { N=0 }
/Logical device number/    { N=N+1
                             LD[N,1]=$4 }
/Logical device name/      { LD[N,2]=$5 }
/RAID level/               { LD[N,3]=$4 }
/Status of logical device/ { LD[N,4]=$6 }
/Size/                     { LD[N,5]=$3;
                             LD[N,6]=$4 }
END {
for ( i=1; i<=N; i++ ) {
   if ( LD[i,4] == "Optimal" ) ST=0; else ST=2;
   printf("%s %s-LD-%s - Controller: %s, Logicaldrive: %s, Name: %s, RaidLevel: %s, Status: %s, Size: %s %s\n", ST,M,LD[i,1],C,LD[i,1],LD[i,2],LD[i,3],LD[i,4],LD[i,5],LD[i,6])
}
}'
done
 
 
 
#basis01:~# /usr/local/bin/arcconf GETCONFIG 1 PD
#      Device #3
#         Device is a Hard drive
#         State                              : Hot Spare
#         State                              : Online
#         Supported                          : Yes
#         Transfer Speed                     : SAS 6.0 Gb/s
#         Reported Channel,Device(T:L)       : 0,3(3:0)
#         Reported Location                  : Enclosure 0, Slot 3
#         Reported ESD(T:L)                  : 2,0(0:0)
#         Vendor                             : SEAGATE
#         Model                              : ST1000NM0001
#         Firmware                           : 0002
#         Serial number                      : Z1N3VYDW0000C333E2UA
#         World-wide name                    : 5000C500563FD9FC
#         Reserved Size                      : 538264 KB
#         Used Size                          : 953344 MB
#         Unused Size                        : 64 KB
#         Total Size                         : 953869 MB
#         Write Cache                        : Enabled (write-back)
#         FRU                                : None
#         S.M.A.R.T.                         : No
#         S.M.A.R.T. warnings                : 0
#         Power State                        : Full rpm
#         Supported Power States             : Full rpm,Powered off
#         SSD                                : No
#  .. im Fehlerfall
#         Failed logical device segments     : True


 
for C in $(/usr/local/bin/arcconf GETVERSION | grep "Controller #" | cut -d "#" -f 2)
do
        get_model $C
        /usr/local/bin/arcconf GETCONFIG $C PD | awk -v M=$MODEL -v C=$C -- '
BEGIN { N=0 }
/Device #/       { N=N+1;
                   split($0,a,"#");
                   DR[N,1]=a[2] }
/Device is/      { DR[N,99]=$4}
/  State  /      { DR[N,2]=$3" "$4 }
/Transfer Speed/ { split($0,a,": ");
                   DR[N,3]=a[2] }
/Model/          { DR[N,4]=$3 }
/Vendor/         { DR[N,5]=$3 }
/Total Size/     { DR[N,6]=$4;
                   DR[N,7]=$5 }
/Failed logical device segments/ { DR[N,2] = "Failed logical device segments"}
END {
for ( i=1; i<=N; i++ ) {
   if ( DR[i,99] == "Hard" ) {
   ST=2;
   if ( DR[i,2] == "Online " ) ST=0;
   if ( DR[i,2] == "Hot Spare" ) ST=0;
   if ( DR[i,2] == "Rebuilding" ) ST=1;
   if ( DR[i,2] == "Ready" ) ST=1;
   printf("%s %s-DR-%s - Controller: %s, Drive: %s, State: %s, Speed: %s, Model: %s %s, Size: %s %s\n", ST,M,DR[i,1],C,DR[i,1],DR[i,2],DR[i,3],DR[i,5],DR[i,4],DR[i,6],DR[i,7])
   }
}
}
'
done

S.M.A.R.T. Client-Plugin für Adaptec-Controller

#!/bin/bash
 
if which smartctl > /dev/null 2>&1 ; then
    echo '<<<smart>>>'
    for D in /dev/sg*; do
	# strip device name for final output
	DNAME=${D#/dev/}
	VEND="unkonown"
	MODEL=$(smartctl -a -d sat $D | grep -i "device model" | sed -e "s/.*:[ ]*//g" -e "s/\ /_/g")
	CMD="smartctl -d sat -v 9,raw48 -A $D"
        [ -n "$CMD" ] && $CMD | grep Always | egrep -v '^190(.*)Temperature(.*)' | sed "s|^|$DNAME $VEND $MODEL |"
    done 2>/dev/null
fi