Comunidad Funcionalidades Tecnología

Creación plugin remoto con Pandora FMS

febrero 6, 2017

Creación plugin remoto con Pandora FMS

El post está disponible también en : Inglés

Creación plugin remoto; más fácil con Pandora FMS

 

Los plugins son pequeños programas o scripts que realizan tareas determinadas respondiendo a unas necesidades que no pueden satisfacerse simplemente con la ejecución de un comando, por lo que se integran diversas acciones para poder realizarlas en una única ejecución. En Pandora FMS existen dos tipos de plugins: de agente (o ejecución local), y de servidor (o ejecución remota). En este artículo vamos a describir el funcionamiento de los plugins remotos en Pandora FMS, sus características y utilidades, así como algunas claves para la creación de un plugin remoto.

Descripción

Los plugins remotos, o plugins de servidor, serán siempre ejecutados por el servidor de Pandora FMS y generalmente apuntarán a un equipo remoto de nuestra red para extraer cierta información, por lo que será fundamental que exista conectividad entre nuestro Pandora FMS y el equipo a monitorizar. Un plugin de servidor siempre deberá devolver un único valor simple, que será recogido en un módulo en la consola de Pandora FMS; este valor puede ser de cualquier tipo soportado por los módulos de Pandora FMS: numérico, alfanumérico, booleano, etc. Este aspecto es el más importante en la creación de un plugin remoto, ya que, de tener una salida más compleja, Pandora FMS no podrá interpretarla y el plugin nunca podrá inicializarse.

Creacion plugin remoto

Ejemplo de plugins con valores simples de salida:

creacion plugin remoto

creacion plugin remoto

Desarrollo

Vamos a utilizar como ejemplo el plugin de monitorización de certificados SSL. En primer lugar debemos contemplar una incorrecta ejecución del plugin, y darle un valor de salida para que no muestre mensajes de error extraños, ya que podría causar problemas en el servidor de Pandora FMS. Estableceremos un control de parámetros:

if (($# != 1));
then
echo “0”
else

Ya que este plugin solo necesita un parámetro, controlaremos que, en caso de recibir más de uno o ninguno, devuelva valor 0, indicando algún problema. A continuación incluimos el bloque de ejecución principal. Básicamente, el plugin ejecutará las comprobaciones y almacenará la información en variables, de modo que posteriormente podamos depurar para ofrecer una salida limpia y con un único valor útil. La acción en este caso será recuperar la fecha de expiración del certificado SSL de un sitio web. El sitio web lo escogeremos indicándose como primer (y único) parámetro al ejecutar el plugin. La fecha será formateada de una forma específica, dd-MMM-yyyy:

Creacion plugin remoto

else
# Obtain day, month and year of certificate expiration
expiration_date=`echo | openssl s_client -connect $1:443 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2- | awk ‘{print $2″-“$1”-“$4}’`

Esta información ya se encuentra guardada en la variable expiration_date que utilizaremos a continuación. El siguiente paso será convertir la fecha de expiración a formato epoch así como obtener la fecha actual y convertirla al mismo formato. Después se contrastan ambas fechas y se hará una conversión a días para obtener los días de certificado restantes:

Creacion plugin remoto

# Get certificate expiration date in epoch format
cert_epoch=`date –date=”$expiration_date” +%s`

# Get current date in epoch format
curr_epoch=`date +%s`

# Get the difference and convert to days
difference=`expr $(( (cert_epoch – $curr_epoch) / 86400))`

Por último se mostrará la información recogida en un único valor simple, que representará los días. Además, se establece una condición, de modo que si se obtienen valores negativos, en caso de que el certificado ya hubiese expirado, el módulo muestre siempre valor 0:

if [ “$difference” -le 0 ]; then
# Print 0 in case of invalid certificate
echo “0”
else
# Days untill expiration
echo “$difference”
fi
fi

Cuando hayamos conseguido la creación del plugin remoto, el código tendrá este aspecto:

#!/bin/bash

if (($# != 1));
then
echo “0”
else
# Obtain day, month and year of certificate expiration
expiration_date=`echo | openssl s_client -connect $1:443 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2- | awk ‘{print $2″-“$1”-“$4}’`

# Get certificate expiration date in epoch format
cert_epoch=`date –date=”$expiration_date” +%s`

# Get current date in epoch format
curr_epoch=`date +%s`

# Get the difference and convert to days
difference=`expr $(( (cert_epoch – $curr_epoch) / 86400))`

if [ “$difference” -le 0 ]; then
# Print 0 in case of invalid certificate
echo “0”
else
# Days untill expiration
echo “$difference”
fi
fi

Registro

Ahora que ya hemos finalizado el proceso de creación del plugin remoto, vamos a registrarlo en la consola de Pandora FMS. En primer lugar debe encontrarse en el propio servidor, en una ruta accesible, por lo que se recomienda utilizar el directorio estándar de creación de plugins remotos del servidor:

/usr/share/pandora_server/util/plugin

Para hacer esto podemos valernos de la utilidad WinSCP, si nos encontramos en un sistema Windows, o bien el comando scp para transferir el plugin de un sistema Linux al servidor de Pandora. Una vez desplegado al servidor, procederemos a registrarlo en la consola, accediendo a la sección correspondiente y haciendo click en el botón de creación:

Creacion plugin remoto

creacion plugin remoto

creacion plugin remoto

Creacion plugin remoto

Rellenaremos el formulario con la información del plugin. Los campos más importantes aquí son:
– Plug-in type: por defecto Standard.
– Max. timeout: establecer un tiempo límite antes de que el servidor interrumpa la ejecución del plugin. Imprescindible para evitar problemas de ejecuciones atascadas.
– Plug-in command: ejecución del plugin, con la ruta absoluta.
– Plug-in parameters: parámetros que se le pasarán al plugin. Si son variables (definidos por el usuario y diferentes en cada caso), emplearemos las macros _fieldX_. Estas macros serán reemplazadas posteriormente por los valores indicados a la hora de crear el módulo.

El resto de los campos tienen carácter descriptivo, por lo que los completamos para ayudar en el uso de la herramienta.

Creación plugin remoto

Ejecución

Una vez finalizado el paso de creación del plugin remoto en la consola, crearemos el módulo que realizará el chequeo como tal. Buscaremos un agente y crearemos un nuevo módulo de tipo plug-in server:

Creación plugin remoto

Ahora únicamente debemos completar los campos que hemos declarado en el paso anterior; en este caso, la dirección web sobre la que queremos comprobar su certificado SSL. Es imprescindible que escojamos correctamente el tipo de módulo en función del valor devuelto por el plugin; los posibles tipos que podremos utilizar aquí son:

– Generic boolean: datos booleanos (1 o 0).
– Generic numeric: datos numéricos.
– Generic numeric incremental: incremento numérico entre dos ejecuciones, entre el número de segundos transcurridos. Para tasas de datos por segundo.
– Generic numeric incremental (absolute): incremento numérico entre dos ejecuciones, sin tener en cuenta el tiempo transcurrido.
– Generic string: datos alfanuméricos.

Creación plugin remoto

Los campos clave aquí son Type y Plugin, donde debemos indicar el tipo de dato y el plugin a utilizar de entre los que hay registrados en la consola. También aquí podemos definir los umbrales warning y critical para los diferentes estados del módulo. Una vez inicializados y recogiendo información se verán en la consola dentro del agente como cualquier otro módulo.

Creación plugin remoto


    Written by:



    2 comments
    1. Jimmy Olano

      Con todo respeto, para el ejemplo de verificación de validez de certificados SSL, considero importante que devuelva valores negativos para diferenciar de cuaqluier otro tipo de error, quiero decir, que el certificado esté vencido NO es un error, el guion hizo su trabajo y obtuvo su respuesta (consideración aparte es que la base de datos acepte valores negativos). Mi basamento es el siguiente: con un valor negativos el usuario sabrá inmediatamente que el certificado está vencido, con un valor cero el operador comenzará a revisar comunicaciones, DNS, etc. para hallar la causa del valor cero, como ser humano pensará muchas cosas distintas. Gracias por leer mi humilde opinión.

      • Carla Andres

        Hola Jimmy, Es una opción muy interesante, a través del valor devuelto obtener un código de error en negativo, tener un listado en la ayuda para relacionar el "código" con el "error" y así nos permita saber con exactitud el problema al instante. Sería una fucionalidad muy útil, lo revisaremos al detalle para ver si se puede implementar en un próximo futuro. Muchas gracias por tu aportación!

    Leave a comment

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.