miércoles, 30 de septiembre de 2009

HOW-TO - CREANDO UN PLUGIN PARA NAGIOS

El nagios ya tiene varios plugins que se pueden descargar desde la página oficial.
No obstante en muchos casos tenemos que realizar chequeos especificos que no se pueden realizar  con los plugins genericos.
Por eso y porque un compañero vino hoy a preguntar como carajo hacía para hacer un chequeo que le habíamos pedido (Pepo, nuestro experimento fue un exito).

Los script pueden realizarse en cualquier lenguaje que pueda ejecutarse desde consola.

La lógica se puede hacer con un script común teniendo en cuenta que lo mas importante es lo que muestra en la salida y el exit que tenga siguiendo las relaciones de :

exit 0 - OK
exit 1 - WARNING
exit 2 - CRITICAL

Un ejemplo en bash para chequear si se están almacenando correctamente las imagenes de un determinado dispositivo:

#/bin/bash

#Le paso como argumento el nombre del monitor

MONITOR=$1
CMINIMA=$2
DIR_TEMP="/home/commands/tmp";

USER="root"
PASS="password"
BD="base"

#Obtengo el ID de la Camara
IDCAM=`echo "SELECT Id FROM tabla1 WHERE Name = '${MONITOR}'" | /usr/bin/mysql -u $USER -p$PASS -D $BD --skip-column-names`


#Con el ID de la camara saco el ultimo evento cerrado y la cantidad de imagenes

UECLOSE=`echo "select Frames from tabla2 where MonitorId='${IDCAM}' and EndTime is not null order by StartTime desc limit 1" | /usr/bin/mysql -u $USER -p$PASS -D $BD --skip-column-names`

UECLOSEDATE=`echo "select StartTime from tabla2 where MonitorId='${IDCAM}' order by StartTime desc limit 1" | /usr/bin/mysql -u $USER -p$PASS -D $BD --skip-column-names`

UE=`echo "select Id from Events where MonitorId='${IDCAM}' order by StartTime desc limit 1" | /usr/bin/mysql -u $USER -p$PASS -D $BD --skip-column-names`
UESTORE=`cat $DIR_TEMP/ULTIMO_VENTO_$IDCAM`;

if [ $UE -eq  $UESTORE ]
then

        UFTAM=`du -sk /var/www/html/events/${IDCAM}/${UE} | awk '{print $1}'`;


        AFTAM=`cat $DIR_TEMP/GRABA_CAM_$IDCAM`;

        echo $UFTAM > $DIR_TEMP/GRABA_CAM_$IDCAM

        if [ $UFTAM -eq  $AFTAM ]
                then
                RESPONDE="7";

     else
                RESPONDE="9";
        fi
else
        UFTAM=`du -sk /var/www/html/events/${IDCAM}/${UE} | awk '{print $1}'`;
        echo $UFTAM > $DIR_TEMP/GRABA_CAM_$IDCAM
        RESPONDE="9";
fi

#echo "---------------------------";
#echo "DEBUG";
#echo "---------------------------";
#echo "ULTIMO EVENTO" $UESTORE
#echo "EVENTO ACTUAL" $UE
#echo "TAMANO ANTERIOR" $UFTAM
#echo "TAMANO ACTUAL" $AFTAM
#echo "ESTADO DE GRABACIONES" $RESPONDE;
#echo "---------------------------";


echo $UE > $DIR_TEMP/ULTIMO_VENTO_$IDCAM

if [ $RESPONDE -eq 9 ]
then

        if [ $UECLOSE -lt $CMINIMA ]
        then
                 echo "ALERTA - ${UECLOSE} IMAGENES EN EL ULTIMO EVENTO CERRADO";
        exit 1

                echo "OK - ${UECLOSE} IMAGENES / ${UECLOSEDATE} FECHA ULTIMO EVENTO";
                exit 0

        else
                echo "OK - ${UECLOSE} IMAGENES / ${UECLOSEDATE} FECHA ULTIMO EVENTO HM";
                exit 0
        fi
else
        RCAM = `/usr/local/bin/zmdc.pl restart zmc -m $IDCAM`;
        echo "ALERTA - UE:${UESTORE} / ${UECLOSEDATE} FECHA ULTIMO EVENTO";
        exit 2
fi


Esto lo ponemos dentro de un archivo que se situará (en instalación default) /usr/local/nagios/libexec/
Se le darán permisos de ejecución correspondientes y se lo asociará al grupo que lo pueda ejecutar sin problemas.

Una vez realizado esto se debe generar el comando:

/usr/local/nagios/objects/commands.cfg

define command{
command_name check_cimage
command_line /home/commands/check_cimage $ARG1$ $ARG2$
}


Con eso se realizará el chequeo que necesitemos sin problemas.


Hernán Mazzeo

1 comentario:

  1. hola buenas tardes, tengo una pregunta después que haces el plugin como haces para que nagios lo lea? cual es el procedimiento como tal?

    ResponderEliminar