h1

Monitorizando un RAID en Linux II

10/10/08

¿Recordáis que hace poco contaba cómo monitorizar un software RAID en Linux? ¡Pues no funciona!

Después de una temporada en la que yo me las veía muy feliz porque no recibía ningún correo caí en la cuenta de que la resincronización que tengo programada para los fines de semana tiene que generar algún evento y el script debería haber enviado algún emilio. Vamos, que no me llegaba alertas porque no estaba monitorizando nada.

Debería haber investigado por qué no funcionaba pero la navaja de Occam (y me jefe metiendo prisa) me decía que buscara otra salida.

Así que he decidido monitorizarlo el RAID a lo bruto. Os voy a contar cómo lo he hecho pero aviso que este método tiene un cero en elegancia (aunque un 10 en usabilidad).

Básicamente lo que hacemos es crear una copia del fichero “/proc/mdstat” cuando el RAID está bien. Nuestro script compara el mdstat actual con la copia buena y actúa en consecuencia.

#!/bin/sh
#
# raidmon.sh
#
# Script para monitorizar un SW RAID.
#
# 01/09/2008 - Version inicial (renombrada a raidmon.sh_original).
#
# 29/09/2008 - Viendo el poco exito de la version inicial se
#              pasa ha hacer a lo bruto.
#
################################################################

F_OK=/root/scripts/mdstat.ok
F_LOG=/root/scripts/raidmon.log
F_TMP=/root/scripts/.raidmon.tmp
F_MDS=/root/scripts/.mdstat.ahora
cat /proc/mdstat > $F_MDS

DEST=paco@pepe.com,pepe@paco.com
MAQ="$(hostname)"

###############
function emilio
###############
# $1: Asunto
# $2: Cuerpo
{
  echo > $F_TMP
  echo "$2" >> $F_TMP
  echo >> $F_TMP
  echo "Fichero mdstat:" >> $F_TMP
  echo >> $F_TMP
  cat $F_MDS >> $F_TMP
  echo >> $F_TMP
  /bin/mail -s "$1" -r "BOFH@infierno.com" "$DEST" < $F_TMP
  return 0
}

echo "################" >> $F_LOG
echo "Fecha: $(date)" >> $F_LOG

diff $F_MDS $F_OK

if [ $? -ne 0 ]; then

  if [ "$(grep resync $F_MDS)" ]; then
    # Resincronizacion en marcha:
    emilio "RAID de $MAQ: Mantenimiento" "Se esta resincronizando el RAID de $MAQ."

  else
    # Algo va mal:
    emilio "RAID de $MAQ: Error" "Algo pasa en el RAID de $MAQ."
  fi

  # Hacemos log:
  cat $F_TMP >> $F_LOG

else
  # Todo correcto. Hacemos log:
  echo "OK" >> $F_LOG

fi

rm $F_TMP $F_MDS 2> /dev/null

exit 0

No olvideis crear el fichero bueno:

cat /proc/mdstat > mdstat.ok

Ahora sólo nos quedaría meterlo en el crontab (con que se ejecute cada hora es suficiente) y ya tenemos nuestro RAID monitorizado… o eso espero ;P

Anuncios

5 comentarios

  1. Pero los eventos no los genera ya el demonio mdadm, y los manda al correo que especificas en el /etc/mdadm/mdadm.conf?

    # instruct the monitoring daemon where to send mail alerts
    MAILADDR direccioncorreo

    O estamos hablando de cosas distintas?


  2. Si lees el primer artículo verás que mi intención era recibir emilios solo para los eventos deseados. Si lo configuro como tú apuntas el demonio mdadmd no para de spamearme :(

    Todas las propuestas serán bienvenidas como culturilla general pero como es una máquina de producción no puedo toquetear mucho =/

    Gracias ^^


  3. Touché.


  4. pasa ha hacer a lo bruto

    Y bien bruto, oiga


  5. xDDDDDDDD

    Madre mía!!!!! Qué metedura de pata!!!!

    Voy a cambiar el script antes de que lo vea nadie jajaja

    Aquí lo dejo para la posteridad.



Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: