====== Check für HP Smart Array Controller ====== Benötigt **hpacucli** und läuft nur als **Bash**-Script. Getestet mit: P410, P410i, P210 Download: http://downloads.linux.hp.com/SDR/downloads/ProLiantSupportPack/ Leider ist der Check sehr langsam obwohl das Script so gut optimiert ist wie es mir möglich ist. Es leigt in erstere Linie an dem "hpacucli" welches wirklich nicht als schnell bezeichnet werden kann. Update: Auf Anregung von Marco S. prüft der Check jetzt auch Batterie- und Cache-Status. {{:check_mk_hpsa.png?nolink&|}} =====Client Check===== Empfehlung: Ausführung 5 Minuten asynchron. #!/bin/bash # check_mk check f. HP Smart Array Controller # # 01/2011 Matthias Henze # Lizenz: GPL v2 # sample output - requires hpacucli # # # hpacucli controller all show # #Smart Array P410 in Slot 4 (sn: PACCR9SY0AXY ) # # # hpacucli controller slot=4 array all show # #Smart Array P410 in Slot 4 # # array A (SATA, Unused Space: 0 MB) # # # hpacucli controller slot=4 array A physicaldrive all show # #Smart Array P410 in Slot 4 # # array A # # physicaldrive 1I:1:1 (port 1I:box 1:bay 1, SATA, 500 GB, OK) # physicaldrive 1I:1:2 (port 1I:box 1:bay 2, SATA, 500 GB, OK) # physicaldrive 1I:1:3 (port 1I:box 1:bay 3, SATA, 500 GB, OK) # physicaldrive 1I:1:4 (port 1I:box 1:bay 4, SATA, 500 GB, OK, spare) # function is_integer() { [ "$1" -eq "$1" ] > /dev/null 2>&1 return $? } if [ -x `which /usr/sbin/hpacucli` ]; then echo '<<>>' cc=-1 CMD="hpacucli controller all show" while read -a cont; do if is_integer ${cont[5]}; then cc=$(($cc+1)) cstat=$(hpacucli controller slot=${cont[5]} show | egrep "Controller Status|Cache Status|Battery.*Status"|cut -d " " -f 3,6,9|tr -d '\n') case $(echo $cstat | wc -w) in 1) cstat=$cstat" Not Not" ;; 2) cstat=$cstat" Not" ;; esac if [ "$cstat" = " OK OK OK" -o "$cstat" = " OK OK Not" -o "$cstat" = " OK Not Not" ]; then echo "${cont[5]} OK ${cont[2]}$cstat" else echo "${cont[5]} CRIT ${cont[2]}$cstat" fi controllers[$cc]=${cont[5]} fi done < <( $CMD ) echo '<<>>' for c in $(seq 0 $cc) do ac=-1 CMD="hpacucli controller slot=${controllers[$c]} array all show" while read -a cary; do if [ "X${cary[0]}X" = "XarrayX" ]; then ac=$(($ac+1)) # collect lines read -d + -a x <<< $(hpacucli controller slot=${controllers[$c]} array ${cary[1]} show | sed 's/(Embedded)//') # collect words read -a ary <<< ${x[*]} echo "${controllers[$c]}:${cary[1]} ${ary[16]} ${ary[10]} unused: ${ary[13]} ${ary[14]}" arrays[$ac]=${cary[1]} fi done < <( $CMD ) done echo '<<>>' for c in $(seq 0 $cc) do for a in $(seq 0 $ac) do CMD="hpacucli controller slot=${controllers[$c]} array ${arrays[$a]} physicaldrive all show" while read -a pdrv; do if [ "X${pdrv[0]}X" = "XphysicaldriveX" ]; then echo -n "${controllers[$c]}:${arrays[$a]}:${pdrv[1]} ${pdrv[9]/[),]/} ${pdrv[6]/,/} ${pdrv[7]} ${pdrv[8]/,/} " if [ ${pdrv[10]} ]; then echo ${pdrv[10]/)/} else echo "assigned" fi fi done < <( $CMD ) done done fi =====Plugins===== #!/usr/bin/python # -*- encoding: utf-8; py-indent-offset: 4 -*- # check_mk check f. HP Smart Array Controller # # 01/2011 Matthias Henze # Lizenz: GPL v2 # Example output from agent: # <<>> # 4 OK PACCR9SY0AXY P410 # inventory def inventory_hpsa_controller(checkname, info): inventory = [] for line in info: item = line[0] inventory.append( (item, None) ) return inventory # check def check_hpsa_controller(item, param, info): for line in info: if line[0] == item: status = line[1] type = line[2] controller = line[3] cache = line[4] battery = line[5] infotext = "status is %s (Slot: %s, Type: %s, Controller: %s, Cache: %s, Battery: %s)" % (status, item, type, controller, cache, battery) if status == "OK": return (0, "OK - " + infotext) else: return (2, "CRITICAL - " + infotext) return (3, "UNKNOWN - Controller %s not found in agent output" % item) # declare the check to Check_MK check_info['hpsa_controller'] = \ (check_hpsa_controller, "HP Smart Array Controller Slot %s", 1, inventory_hpsa_controller) #!/usr/bin/python # -*- encoding: utf-8; py-indent-offset: 4 -*- # check_mk check f. HP Smart Array Controller # # 01/2011 Matthias Henze # Lizenz: GPL v2 # Example output from agent: # <<>> # 4:A OK SATA 0 MB # inventory def inventory_hpsa_array(checkname, info): inventory = [] for line in info: item = line[0] inventory.append( (item, None) ) return inventory # check def check_hpsa_array(item, param, info): for line in info: if line[0] == item: hw = item.split(":") slot = hw[0] array = hw[1] status = line[1] type = line[2] free = line[3] unit = line[4] infotext = "status is %s (slot: %s, array: %s, type: %s free: %s %s)" % (status, slot, array, type, free, unit) if status == "OK": return (0, "OK - " + infotext) else: return (2, "CRITICAL - " + infotext) return (3, "UNKNOWN - Array %s not found in agent output" % item) # declare the check to Check_MK check_info['hpsa_array'] = \ (check_hpsa_array, "HP Smart Array Controller Array %s", 1, inventory_hpsa_array) #!/usr/bin/python # -*- encoding: utf-8; py-indent-offset: 4 -*- # check_mk check f. HP Smart Array Controller # # 01/2011 Matthias Henze # Lizenz: GPL v2 # Example output from agent: # <<>> # 4:A:1I:1:1 OK SATA 500 GB assigned # 4:A:1I:1:2 OK SATA 500 GB assigned # 4:A:1I:1:3 OK SATA 500 GB assigned # 4:A:1I:1:4 OK SATA 500 GB spare # inventory def inventory_hpsa_drive(checkname, info): inventory = [] for line in info: item = line[0] inventory.append( (item, None) ) return inventory # check def check_hpsa_drive(item, param, info): for line in info: if line[0] == item: hw = item.split(":") slot = hw[0] array = hw[1] port = hw[2] box = hw[3] bay = hw[4] status = line[1] type = line[2] free = line[3] unit = line[4] usage = line[5] infotext = "status is %s (slot: %s, array: %s, port: %s, box: %s, bay: %s, type: %s size: %s %s, usage: %s)" % (status, slot, array, port, box, bay, type, free, unit, usage) if status == "OK": return (0, "OK - " + infotext) else: return (2, "CRITICAL - " + infotext) return (3, "UNKNOWN - Array %s not found in agent output" % item) # declare the check to Check_MK check_info['hpsa_drive'] = \ (check_hpsa_drive, "HP Smart Array Controller Drive %s", 1, inventory_hpsa_drive)