Ich habe heute für die Arbeit ein Script geschrieben um unsere mdadm RAID’s mit Zabbix zu überwachen. Ich freue mich natürlich über Tipps, da ich noch das Script schreiben übe. Ich hab also noch nicht so viel Erfahrung, aber ich entdecke langsam die praktische Seite daran. :-D
Jedenfalls ist das das Script:
#!/bin/bash
export PATH=/usr/bin:/bin:/usr/sbin/:/sbin/
disk=$1
case $2 in
state)
state=$(sudo mdadm --detail /dev/$disk | grep -i "State :" | cut -d ":" -f 2 | awk -F ' ' '{print $1 $2 $3}')
if [ "$(echo $state | grep clean | wc -l)" -eq "1" ]; then
s1=1
else
s1=0
fi
if [ "$(echo $state | grep degrade | wc -l)" -eq "1" ]; then
s2=2
else
s2=0
fi
if [ "$(echo $state | grep recovering | wc -l)" -eq "1" ]; then
s3=4
else
s3=0
fi
s4=$(echo $(($s1 + $s2 + $s3)))
case $s4 in
"0" | "1")
echo clean
;;
"2" | "3")
echo degrade
;;
"4" | "5" | "6" | "7")
echo recovery
;;
esac
;;
mdstat)
grep -A1 $disk /proc/mdstat | grep -o _ | wc -w
;;
esac
Kurze Erklärung zu state: Ich greppe mir da aus der Ausgabe von mdadm die Zeile State heraus wo der Status des RAID’s ausgegeben wird. Dies können drei Stadien sein – clean, degrade, recovering (auch alle gleichzeitig). Aus diesem Grund habe ich noch die Addition hinzugefügt um einen Status auszugeben. Ich gebe aber immer nur einen Status aus: Wenn nur clean, dann logischer Weise clean – wenn clean,degrade dann degrade, da ja die Information wichtig ist das etwas mit dem RAID nicht in Ordnung ist – wenn recovering enthalten ist, dann wird recovery ausgegeben.
Kurze Erkläung zu mdstat: Ist relativ simpel. Platten die OK sind werden in /proc/mdstat mit U angeben und fehlende mit _ , da ich wissen will wie viele ausgefallen sind greppe ich hier nach _ .
Im Anschluss muss das Script noch ausführbar gemacht und in /etc/zabbix/zabbix-agentd.conf folgende Zeile hinzufügen werden:
UserParameter=mdadm[*], sh /pfad/zu/mdadm_chk.sh $1 $2
Da man für mdadm root-Rechte benötigt muss man noch folgende Zeile in /etc/sudoers:
zabbix ALL=NOPASSWD:/pfad/zu/mdadm_chk.sh,/sbin/mdadm
Jetzt einmal den Agent neu starten und schon müsste es funktionieren. Items und Trigger hab ich wie folgt angelegt: