Creación plugin remoto con Pandora FMS
This post is also available in : 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.
Ejemplo de plugins con valores simples de salida:
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:
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:
# 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:
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.
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:
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.
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.
El equipo de redacción de Pandora FMS está formado por un conjunto de escritores y profesionales de las TI con una cosa en común: su pasión por la monitorización de sistemas informáticos.
Pandora FMS’s editorial team is made up of a group of writers and IT professionals with one thing in common: their passion for computer system monitoring.
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!
Seguridad con Lynis: monitorización de una suite informática especializada - RinconTIC
[…] que la parte fácil ha sido nuestra tarea constante de monitorización; ya hemos publicado cómo extraer el valor que nos interesa: podemos configurar Pandora FMS si dicha puntuación cae por debajo de cierto […]