Un caso de uso real con el sistema de monitorización Pandora FMS: cómo depurar y solucionar un error que se produce en la recolección de datos para un agente (dispositivo, servidor, equipo), cuando se generan múltiples ficheros con extensión .data_BADXML en la carpeta /var/spool/pandora/data_in.

Funcionamiento básico de envío de datos del agente al servidor en Pandora FMS

Antes de indicar el error y el motivo del error, conviene explicar, brevemente, el funcionamiento estándar de Pandora FMS:

  • En el agente (servidor, dispositivo, PC, equipo) tendremos Pandora FMS Agent instalado. Este agente almacena, en la carpeta temporal del equipo local (en equipos Windows en C:\Program Files\pandora_agent\temp), un fichero XML con todos los datos recabados del agente, los indicados en el fichero pandora_agent.conf.
  • Una vez generado el fichero XML, Pandora Agent lo enviará al servidor de Pandora FMS Server, indicado también en el fichero pandora_agent.conf. Este envío lo realiza, por defecto, cada 5 minutos. Se trata de un fichero XML con la siguiente estructura de ejemplo:

El envío del fichero XML del agente al servidor se realiza mediante Tentacle. En realidad, el agente de Pandora FMS ejecuta el siguiente comando (una vez generado el XML con los datos):

En el ejemplo anterior, suponemos que existe el fichero XML pcalonso.2247.datasent en la carpeta temp de Pandora FMS Agent.

De hecho, nosotros mismos podríamos desarrollar un cliente de Pandora, generando el fichero XML y enviándolo con el comando anterior. Incluso podremos probar la conexión con el servidor ejecutando este comando desde una consola de símbolo de sistema en Windows o shell en Linux:

Funcionamiento básico de envío de datos del agente al servidor en Pandora FMS
  • Una vez enviado el fichero XML, el agente lo eliminará de la carpeta /temp:
  • En la parte del servidor Pandora FMS, estará corriendo el proceso tentacle, que recibirá, por el puerto estándar 41121, el fichero XML enviado por el agente. Tentacle Server lo almacenará en la carpeta /var/spool/pandora/data_in, con la extensión .data:
  • Transcurridos unos segundos el proceso de Pandora FMS Server leerá el fichero XML .data y, si el formato es correcto, lo insertará en base de datos y eliminará el fichero .data. Pero si hay algún error en el formato del XML, Pandora FMS Server renombrará el fichero .data por .data_BADXML, dejándolos en el buffer para su depuración.

Forzar un error en el formato del fichero XML del agente de Pandora FMS para envío al servidor

En este caso de uso forzaremos de forma intencionada a que se produzca un error en la conformación del XML que se envía desde un agente, con el cliente Pandora FMS Agent.

Como ejemplo, modificaremos el fichero /util/mem_percent_used.vbs, que incluye el propio agente. Cambiaremos algunas líneas para que devuelva los valores en castellano y cambiaremos el nombre del módulo, dejando, a propósito, un error en la generación del XML resultante:

No vamos a desvelar el error, de momento, para mostrar más adelante cómo localizarlo.

Si en el agente, tras modificar el fichero anterior, añadimos el módulo correspondiente (para que se ejecute el script mem_percent_used.vbs), editando su fichero pandora_agent.conf y agregando:

Si reiniciamos el servicio de Pandora FMS Agent ejecutando el script «restart_pandora_agent.bat»:

Desde el equipo servidor con Pandora FMS Server, accediendo por shell de comandos a la carpeta /var/spool/pandora/data_in y haciendo un «ls» para mostrar los ficheros que contiene, veremos que primero se habrá transferido el fichero XML del agente:

Como hemos indicado en el funcionamiento del envío de datos, si el servicio del servidor de Pandora FMS analiza el XML y es correcto, lo insertará en base de datos y lo eliminará. Pero si el fichero XML tiene algún error de formato, el servidor Pandora FMS Server renombrará el fichero, añadiendo la extensión .data_BADXML y lo dejará en la misma carpeta para su depuración:

Mientras no solucionemos el problema, cada 5 minutos (el tiempo estándar en comprobación de módulos de Pandora FMS Agent), enviará un fichero .data al servidor de Pandora FMS en la carpeta data_in. Si este fichero sigue siendo erróneo, el servidor de Pandora FMS lo renombrará a .data_BADXML y lo dejará en la carpeta /var/spool/pandora/data_in. Si se soluciona el problema, estos ficheros BADXML permanecearán (los podemos eliminar manualmente).

Depurar el error, analizar el fichero XML para localizar la línea o líneas erróneas y solucionar el error

Cuando no recibimos información actualizada de los módulos (sensores, sondas) de un agente (servidor, dispositivo, equipo) en el servidor de Pandora FMS Server, puede deberse a varios motivos. En este tutotial mostramos uno de los casos y su solución: cuando el formato del fichero XML es incorrecto.

Desde el servidor de Pandora FMS Server, abriendo una ventana de shell de comandos, listaremos el contenido de la carpeta /var/spool/pandora/data_in, filtrando por posibles ficheros con extensión .data_BADXML:

Si aparece uno o varios ficheros, revisaremos si se trata del mismo agente o de agentes diferentes. Al principio del nombre indica el agente, en el ejemplo, todos los ficheros BADXML son del mismo agente «pcalonso»:

Para revisar de forma automática la estructura del fichero XML, podemos usar la herramienta xmllint, con el comando:

Le pasamos como parámetro el último (más reciente) fichero BADXML a analizar.

Si la estructura del XML tiene algún error, esta herramienta nos mostrará la línea exacta que no cumple la sintaxis. En este ejemplo, podemos comprobar que nos devuelve exactamente el error que hemos forzado anteriormente, en la línea 402, en concreto en:

Que, efectivamente, está mal conformada, la línea debería ser:

Para solucionar el error, editaremos el fichero mem_percent_used.vbs de C:\Program Files\pandora_agent\util, que es el que conforma esa parte del XML, modificaremos la línea:

Por la nueva línea:

Guardaremos los cambios y reiniciaremos el servicio de Pandora Agent para forzar un envío de datos.

Ahora, desde el servidor, revisaremos que ya no se generan más ficheros BADXML para este agente «pcalonso». Si es así, podremos eliminar los BADXML generados:

Revisaremos cada cierto tiempo esta carpeta para que no haya ficheros BADXML. En esta carpeta /var/spool/pandora/data_in únicamente debe haber ficheros .data y de forma temporal, hasta que se inserten en base de datos.