Есть зоопарк серверов, надо сделать так чтобы при малейшем вздохе со стороны винтов в RAID массивах - Zabbix орал что наступает конец света =)
В двух из них есть RAID на основе Adaptec 5405 + поверх этого сделан софтверный raid при помощи mdadm
В одном - на основе HP Smart Array P410. И еще два сервера, там просто софтверный рейд mdadm.
Тут напишу то что нашел по поводу мониторинга рейда через заббикс.
- mdadm
UserParameter=softraid.status,egrep "\[.*_.*\]" /proc/mdstat|wc -l
Если результат больше нуля - кричим.
- Adaptec 5405 and others
/usr/StorMan/arcconf getconfig 1 ld | grep "Status of logical device" | grep "Optimal" -c
Это показывает сколько логических девайсов в нормальном состоянии.
/usr/StorMan/arcconf getconfig 1 | awk ' /Defunct disk drive count/ { print $6 } '
Это - сколько винтов отвалилось.
UserParameter=hwraid_adaptec_5405.status,sudo /usr/StorMan/arcconf getconfig 1| grep Defunct | cut -d ":" -f 2|sed 's/ //i'
А вот это это нам и надо.
В итоге делаем:
zabbix ALL=NOPASSWD:/usr/StorMan/arcconf getconfig 1
UserParameter=hwraid_adaptec_5405.status,/usr/StorMan/arcconf getconfig 1 | awk ' /Defunct disk drive count/ { print $6 } '
Если результат больше нуля - кричим.
- HP Smart Array P410
Тут посложнее =)
Сначала надо дать права заббиксу на запуск hpacucli:
zabbix ALL=NOPASSWD:/usr/sbin/hpacucli ctrl all show status zabbix ALL=NOPASSWD:/usr/sbin/hpacucli ctrl slot=0 pd all show
#!/bin/sh # Script to parse and rewrite the hpacucli output so we can feed it to Zabbix. # [email protected] - 2010-05-13 #set -x VERSION=0.5 cleanup() { if [ -e $clog ]; then rm $clog fi } check_ok() { if [ $rawv -eq 1 ]; then echo 0 else echo 1 fi } controllerstat() { sudo hpacucli ctrl all show status > $clog #Check if another hpacucli has been active, sleep and try again if [ $(grep -c '^Another' $clog) -eq 1 ]; then sleep 10 controllerstat cleanup exit fi constat=1 chachestat=1 battstat=1 #Check Controller overall status rawv=$(grep Controller $clog|awk '{print $3}'|grep -c OK) constat=$(check_ok) #Check Cache Status rawv=$(grep Cache $clog|awk '{print $3}'|grep -c OK) cachestat=$(check_ok) #Check for a battery and it's status if available if [ $(grep -c Battery $clog) -eq 0 ]; then battstat=0 else rawv=$(grep Battery $clog|awk '{print $3}'|grep -c OK) battstat=$(check_ok) fi #Calculate overall status and return it allstat=$(( $constat + $cachestat + $battstat )) if [ $allstat -eq '0' ]; then echo 0 else echo 1 fi } diskstat() { sudo hpacucli ctrl slot=0 pd all show > $clog #Check if another hpacucli has been active, sleep and try again if [ $(grep -c '^Another' $clog) -eq 1 ]; then sleep 10 diskstat cleanup exit fi drivecount=$(grep -c physicaldrive $clog) driveok=$(grep -c OK $clog) if [ $driveok -eq $drivecount ]; then echo 0 else echo 1 fi } ### Main script ### while getopts ":cdh" opt; do case $opt in c) #Create a save tempfile with mktemp clog=$(mktemp /var/tmp/clog.XXXXXXXXXXXX) controllerstat cleanup ;; d) #Create a save tempfile with mktemp clog=$(mktemp /var/tmp/clog.XXXXXXXXXXXX) diskstat cleanup ;; h) echo "HP disk and controller check version $VERSION" echo "Usage:" echo "-c Outputs controler overall status as 0 or 1" echo "-d Outputs disk overall status as 0 or 1" echo "-h Print this help" echo "Output legend: 0 equals OK, 1 indicates something went wrong" exit 1 ;; \?) echo "Unknown option: -$OPTARG" echo "Try -h to get help" exit 1 ;; esac done
Ну а потом добавить
UserParameter=hp.cont,/zabbix/scripts/hpcheck.sh -c UserParameter=hp.disk,/zabbix/scripts/hpcheck.sh -d
Если результат больше нуля - кричим.