Utilizando mdadm en modo monitor lo configuré para que ejecutara un script cuando detectara algún evento del raid. De todos los eventos posibles, los que a mi me interesan son:
El resto de eventos no me afectan demasiado, así que simplemente los guardaré en un log. Para ejecutar un script cuando se produce un evento en el raid en lugar de la notificación por email, es necesario hacer un pequeño cambio en el archivo /etc/init.d/mdadm.
PROGRAM=/root/scripts/monitorRaid.sh
start-stop-daemon -S -p $PIDFILE -x $MDADM -- -F -i $PIDFILE -p $PROGRAM -f --scan
El script monitorRaid.sh que he creado es el siguiente:
shian:~# cat scripts/monitorRaid.sh
#!/bin/sh
# Script de generación de alarmas según el estado del raid
#
# Iván López Martín
# http://lopezivan.blogspot.com
#####
RAID_EVENT=$1
LOG_DIR=/var/local/raid
LOG_FILE=monitor_raid.log
SMS_PROGRAM=/root/scripts/enviaSMS.sh
GMAIL_USER=usuario@gmail.com
GMAIL_PASS=mipassword
if [ $RAID_EVENT == "Fail" ]; then
date >> $LOG_DIR/$LOG_FILE
echo Fail >> $LOG_DIR/$LOG_FILE
echo >> $LOG_DIR/$LOG_FILE
# Envío del SMS
$SMS_PROGRAM $GMAIL_USER $GMAIL_PASS "ERROR CRITICO: Ha fallado un disco del raid."
elif [ $RAID_EVENT == "DegradedArray" ]; then
date >> $LOG_DIR/LOG_FILE
echo DegradedArray >> $LOG_DIR/$LOG_FILE
echo >> $LOG_DIR/$LOG_FILE
# Envío del SMS
$SMS_PROGRAM $GMAIL_USER $GMAIL_PASS "RECORDATORIO: El raid está funcionando con un solo disco."
elif [ $RAID_EVENT == "RebuildStarted" ]; then
date >> $LOG_DIR/$LOG_FILE
echo RebuildStarted >> $LOG_DIR/$LOG_FILE
echo >> $LOG_DIR/$LOG_FILE
elif [ $RAID_EVENT == "RebuildFinished" ]; then
date >> $LOG_DIR/$LOG_FILE
echo RebuldFinished >> $LOG_DIR/$LOG_FILE
echo >> $LOG_DIR/$LOG_FILE
# Envío del SMS
$SMS_PROGRAM $GMAIL_USER $GMAIL_PASS "INFO: Ha terminado la reconstrucción del raid."
else
date >> $LOG_DIR/$LOG_FILE
echo $RAID_EVENT >> $LOG_DIR/$LOG_FILE
echo >> $LOG_DIR/$LOG_FILE
fi
Para probar que está todo bien configurado, podemos ejecutar el monitor del raid en modo Test:
shian:~# mdadm -F -p /root/scripts/monitorRaid.sh --scan -t -1
shian:~# tail -3 /var/local/raid/monitor_raid.log
Mon May 21 18:15:17 CEST 2007
TestMessage
Si vemos el mensaje de prueba significa que la monitorización es correcta, ahora sólo queda esperar a que falle algún disco (ojalá no ocurra) para que el programa de alarmas por sms cumpla su función.
Adicionalmente he creado otro script que ejecuto por medio de crontab cada 10 minutos que monitoriza la ocupación de los filesystems (en este caso sólo el del raid) y cuando se supera un umbral se envía una notificación por SMS.
shian:~# cat monitorFS.sh
#!/bin/sh
# Script de monitorización del tamaño de un filesystem y envío de alarmas por SMS
#
# Iván López Martín
# http://lopezivan.blogspot.com
######
FILESYSTEM=$1
TMP_DIR=/root/scripts
SMS_PROGRAM=/root/scripts/enviaSMS.sh
GMAIL_USER=usuario@gmail.com
GMAIL_PASS=mipassword
SPACE_USED=`df | grep $FILESYSTEM | awk '{print $5}' | sed 's/%//g'`
if [ "$SPACE_USED" -gt 90 ] ; then
if ! [ -f $TMP_DIR/.fs_90 ] ;then
SEND_SMS=YES
THRESHOLD=90
touch $TMP_DIR/.fs_90
fi
elif [ "$SPACE_USED" -gt 80 ] ; then
if ! [ -f $TMP_DIR/.fs_80 ] ;then
SEND_SMS=YES
THRESHOLD=80
touch $TMP_DIR/.fs_80
fi
elif [ "$SPACE_USED" -gt 70 ] ; then
if ! [ -f $TMP_DIR/.fs_70 ] ;then
SEND_SMS=YES
THRESHOLD=70
touch $TMP_DIR/.fs_70
fi
elif [ "$SPACE_USED" -gt 60 ] ; then
if ! [ -f $TMP_DIR/.fs_60 ] ;then
SEND_SMS=YES
THRESHOLD=60
touch $TMP_DIR/.fs_60
fi
fi
if [ "$SEND_SMS" == "YES" ] ; then
# Envio del SMS
$SMS_PROGRAM $GMAIL_USER $GMAIL_PASS "El filesystem" $FILESYSTEM "supera el "$THRESHOLD"%."
fi
12 comentarios:
Me ha gustado mucho la idea seguro que puedo aprovecharla en algun lado.
Saludos.
Hola was,
me alegro de que te pueda resultar útil. Muchas gracias por visitar el blog.
Saludos, Iván.
hola,
buscando por google he encontrado tu blog.
Me encanta!!!
Éste articulo es MUY util.
Mis felicitaciones :)
Hola Anónimo,
muchas gracias. Espero que te haya resultado útil y lo puedas aprovechar para algo.
Saludos, Iván.
Muchas gracias Ivan, he añadido un link en mi pagina a este magnifico script. Me ayudo a solventar el reventon de uno de mis discos.
Gracias.
Hola correoskk1234,
me alegro de que el script te haya servido y hayas podido recuperar de nuevo el raid.
Muchas gracias por el enlace :-D.
Saludos, Iván.
Hola Ivan:
queria preguntarte si este script me serviria con aix 5.2
hay que ponerle parametros para que funcione?
gracias.
Hola Daniel,
nunca he trabajado con Aix pero como puedes ver el script no hace nada del otro mundo. Lo único más particular es el envío de los sms y para eso lo único que necesitas es instalar la máquina virtual de java en el Aix.
Respecto a los parámetros, el único que recibe es:
RAID_EVENT=$1
y luego se va comparando con distintos valores para enviar la alerta concreta. El valor de ese parámetro lo genera automáticamente mdadm cuando está ejecutando en modo monitor.
Como te he dicho no sé si Aix tendrá algo similar, pero siempre puedes tomar la idea base del script y adaptarlo a tus necesidades.
Saludos y gracias por la visita, Iván.
Muy interesante. Gracias por el artículo.
Justamente mañana tengo que cambiar un disco de un sistema productivo que falló el viernes pasado a última hora y gracias al esquema de RAID por software que implementé, siguió tirando todo el fin de semana. Una maravilla.
Voy a ver si pruebo este script con algunos de mis equipos que usan RAID por software. Lo que me gustaría consultarte, si es que sabés, es lo siguiente. Estaría bueno que tanto en el log como en los mensajes de texto que se envían quede registrado cuál es el dispositivo md que falló. ¿Sabés si hay alguna variable que pueda agregarse para contar con esta información también en las alertas?
Gracias de nuevo por el artículo.
Saludos,
Daniel
Hola Daniel,
me alegro de que te haya gustado el artículo y te pueda ser útil.
Respecto a tu consulta, por lo que sé, sólo se envían al script los eventos que se generan en el raid, pero no qué dispositivo los genera.
Como solución, se me ocurre que en el script de monitorización compruebes el estado de /proc/mdstat para comprobar qué raid es el que te ha fallado. Y esperemos que sólo sea uno...
Muchas gracias por tu comentario.
Saludos, Iván.
Hola Ivan, tu blog me sirvio muchisimo para comenzar a trabajar con raid por soft, te comento que he tenido un problema con un raid 5 que arme con mdadm es de 4 disco, por segunda vez se me rompio un disco, el monitoreo me aviso remplace el disco y salio funcionando todo bien, hasta aqui todo perfecto, al otro dia al encender el equipo me informaba que el raid estaba inactivo pense que se solucionaba poniendo clean en el archivo array_state pero el problema es que al intentar agregar esa linea al archivo me daba un error, despues me indico que no podia reconstruir el array a partir de dos disco, me informaba que se habian roto dos discos, verifique los discos y estaban bien, buscando en internet sugerian rearmar el arreglo, al hacerlo detecto los 4 discos pero al querer montarlo no reconoce el file system pide dar formato, esperando que haya alguna alternativa todavia no le di formato al nuevo arreglo. Se te ocurre algo sobre el posible problema o la forma de solucionarlo, se que es mucho pedir pero veo que tenes experiencia con el mdadm y quizas ya hayas pasado por algo pareceido.
muchas gracias y nuevamente felicitaciones por el blog.
saludos
Nicolas
Hola Nicolas Feruglio,
¡qué mala pata lo que te ha ocurrido!. Lo siento pero me temo que no te puedo ayudar. Aunque he escrito algún artículo hablando sobre el raid 5, mi experiencia con este tipo de raid por software termina ahí. Los raid que he creado y con los que más me he pegado han sido siempre de tipo raid 1.
Espero que encuentres la manera de recuperar la información.
Saludos, Iván.
Publicar un comentario