MongoDB

Este documento describe la funcionalidad MongoDB del discovery de PandoraFMS.

Introducción

Este plugin tiene como finalidad monitorizar bases de datos MongoDB, mediante métricas que son claves para conocer el rendimiento y estado de la bases de datos, como son el número de conexiones, número de consultas, latencia, network y tiempo de actividad. Estos datos se verán reflejados en PandoraFMS, en módulos que aportaran el valor estadístico, dentro de un agente que representará a cada base de datos.

Este plugin está desarrollado para usarse con Pandora FMS Discovery, por lo que a diferencia de otros plugins no genera agentes por XML, si no que todo lo descubierto se devuelve en la salida JSON del plugin.

Prerrequisitos

Este plugin realiza conexiones remotas a las bases de datos a monitorizar, por lo que es necesario asegurar la conectividad entre el servidor de Pandora FMS y dichas bases de datos.

A su vez los siguientes permisos son requeridos para el usuario que se utiliza para conectar.

Para las bases de datos 

role read o dbAdmin

Para stats de server

role clusterMonitor o clusterAdmin

Parámetros y configuración

Parámetros

--conf Ruta al archivo de configuración
--target_databases Ruta al archivo de configuración que contiene los targets de las bases de datos
--target_agents Ruta al archivo de configuración que contiene los targets de los agentes
--custom_queries Ruta al archivo de configuración que contiene llos módulos con consultas personalizadas

Archivo de configuración (--conf)

agents_group_id = < ID del grupo en el que se crearán los agentes >
interval = < Intervalo de monitorización de los agentes en segundos >
threads = < Número de hilos que se usaran para la creación de agentes >
scan_databases = < Activar con 1 para habilitar este token para monitorizar las bases de datos de las instancias configuradas >
agent_per_database = < Activar con 1 para habilitar este token para monitorizar las bases de datos de las instancias configuradas. >
db_agent_prefix = <  Prefijo para los agentes de base de datos creados. >
modules_prefix = < Prefijo para los módulos creados >
execute_custom_queries = < Activar con 1 para habilitar el uso de consultas personalizadas >
analyze_connections = < Activar con 1 para habilitar la monitorización de conexiones >
engine_uptime = < Activar con 1 para habilitar la monitorización del tiempo en ejecución >
query_stats = < Activar con 1 para habilitar la monitorización de estadísticas de consultas >
network = < Activar con 1 para habilitar la monitorización de estadísticas de redes >
latency = < Activar con 1 para habilitar la monitorización de estadísticas de latencia >

Ejemplo

agents_group_id = 10
interval = 300
threads = 1
modules_prefix = Mongodb.
scan_databases = 1
agent_per_database = 1
db_agent_prefix = Mongodb.
execute_custom_queries = 1
analyze_connections = 1
network = 1
query_stats = 1
latency = 1
engine_uptime = 1

Listado de bases de datos objetivo (--target_databases)

El contenido del fichero será un listado de instancias objetivo, separando cada instancia por comas o por líneas. Se debe especificar el URI de conexion de cada una.

Ejemplo

mongodb://172.17.0.2:27017
mongodb://172.17.0.7:27017

Si que quiere monitorizar bases concretas de una instancia, se deben especificar con "|" y separando cada base de datos con ";".

Ejemplo :

mongodb://172.17.0.7:27017|pandora_db;pandora_db2

Si que quiere descartar bases concretas de una instancia, se deben especificar con "|" y separando cada base de datos con ";" , incluyendo un ! antes del "|":

Ejemplo :

mongodb://172.17.0.7:27017!|pandora_db;pandora_db2

Listado de agentes objetivo (--target_agents)

El contenido del fichero será un listado de bases de nombres de agentes, separando cada agente por comas o por líneas. Estos nombres de agentes se usarán para volcar la información de cada base de datos objetivo en el nombre de agente indicado correspondiente, en lugar de dejar que el plugin genere los nombres de agentes de forma automática.

La posición de cada nombre de agente en el listado debe coincidir con la posición de la base de datos objetivo en su propio listado, es decir, el nombre para la primera base de datos objetivo será el primer nombre de este listado, teniendo en cuenta que las líneas en blanco son ignoradas.

Ejemplo

agente1,,agente3
agente4
agente5,agente6,agente7,,agente9

Consultas personalizadas (--custom_queries)

Se debe introducir un módulo por cada consulta personalizada que se pretenda monitorizar. Los módulos deben seguir una estructura, que es la siguiente:

check_begin      --> Etiqueta de apertura del módulo
name             --> Nombre del módulo
description      --> Descripción del módulo.
operation        --> Tipo de operación: value (devuelve un valor simple) | full (devuelve todas las filas como string).
datatype         --> Tipo de módulo: generic_data | generic_data_string | generic_proc.
min_warning      --> Configuración del umbral mínimo de warning
max_warning      --> Configuración del umbral máximo de warning
str_warning      --> Configuración de string de warning
warning_inverse  --> Activar el intervalo inverso con 1 para umbral de warning
min_critical     --> Configuración del umbral mínimo de critical
max_critical     --> Configuración del umbral máximo de critical
str_critical     --> Configuración de string de critical
critical_inverse --> Activar el intervalo inverso con 1 para umbral de crítico
module_interval  --> Este intervalo se calcula como un multiplicador del intervalo del agente.
crontab          --> Expresión cron de 5 campos (minuto, hora, día del mes, mes, día de la semana).
                    Solo se ejecuta la query cuando la fecha/hora actual coincide con la expresión.
                    Si no se especifica, la query se ejecuta en cada intervalo.
                    Formato: crontab <minuto> <hora> <día_mes> <mes> <día_semana>
                    Ejemplos:
                      * * * * *      → cada minuto (siempre)
                      0 9 * * 1-5    → de lunes a viernes a las 09:00
                      */15 * * * *   → cada 15 minutos
                      * 12-15 * * 1  → los lunes entre las 12:00 y 15:59
target           --> Consulta personalizada.
                    Comandos permitidos: dbStats, collStats, find, count, aggregate, listCollections.
target_instances --> Las consultas personalizadas se ejecutarán en las bases de datos pertenecientes
                    a las instancias configuradas aquí. Si no se especifica se monitorizarán todas,
                    igual que si se especifica "all". Para elegir una o varias particulares separar por ",".
target_databases --> Las consultas personalizadas se ejecutarán en las bases de datos configuradas aquí.
                    Si no se especifica se monitorizarán todas, igual que si se especifica "all".
                    Para elegir una o varias particulares separar por ",".
check_end        --> Etiqueta de cierre del módulo

Módulo contra instancias y bases de datos concretas

check_begin
name DatabaseStats
description Database statistics
operation value
datatype generic_data
target db.runCommand({ dbStats: 1 })
target_instances mongodb://172.17.0.2:27017
target_databases pandora_db, pandora_db2
check_end

Módulo con find a todas las instancias y bases de datos

check_begin
name Getcollection
description get collection
datatype generic_data_string
min_warning 10
target db.system.version.find({})
target_instances all
target_databases all
check_end

Módulo con find usando ObjectId

check_begin
name Getdocument
description get document
datatype generic_data_string
min_warning 10
target db.mi_coleccion.find({ "_id": ObjectId("655b4a235d797f3769d6b03e") })
check_end

Módulo con crontab (solo se ejecuta de lunes a viernes a las 09:00)

check_begin
name db_stats_diario
description Daily database stats
operation value
datatype generic_data
target db.runCommand({ dbStats: 1 })
target_instances all
target_databases all
crontab 0 9 * * 1-5
check_end

Módulo con crontab (solo en horario laboral de 8:00 a 18:00)

check_begin
name documentos_oficina
description Document count during office hours
operation value
datatype generic_data
target db.mi_coleccion.find({ "activo": true })
target_instances all
target_databases all
crontab * 8-17 * * 1-5
check_end

Módulo con crontab cada 30 minutos

check_begin
name check_cada_media_hora
description Check every 30 minutes
operation value
datatype generic_data
target db.runCommand({ dbStats: 1, scale: 1 })
target_instances all
target_databases all
crontab */30 * * * *
check_end

Funcionamiento del filtro por crontab

  1. Al inicio de cada ejecución del plugin, se evalúan todas las custom queries.
  2. Las queries que no tienen el campo crontab se ejecutan siempre (comportamiento clásico, retrocompatible).
  3. Las queries que sí tienen crontab solo se incluyen si la fecha/hora actual coincide con la expresión cron.
  4. Las queries descartadas por crontab no generan conexiones a base de datos ni consultas.
  5. El filtro se aplica una sola vez antes de lanzar los hilos de monitorización.

Formato de la expresión cron

La expresión sigue el formato estándar de 5 campos separados por espacios:

Campo Valores permitidos
Minuto 0-59
Hora 0-23
Día del mes 1-31
Mes 1-12
Día semana 0-7 (0 y 7 = domingo, 1 = lunes)

Cada campo admite los siguientes formatos:


Consultas para el parámetro target de los módulos

Se pueden ejecutar comandos siguiendo el siguiente formato:

db.runCommand(< comando >)

o

runCommand(< comando >)

Conocer la respuesta esperada, para configurar el tipo de módulo en string o data según se requiera.

**Por precaución solo se ejecutará el siguiente tipo de comandos : dbStats,collStats,find,cound,aggregate,listCollections**

Se pueden ejecutar consultas find para obtener datos de las colecciones y documentos:

db.< colección >.find({})

o

< colección >.find({})

Con la posibilidad de especificar consultas dentro del metodo find:

db.< coleccion >.find({ "<columna de documento": "valor de la columna" })

ejemplo:

db.mi_coleccion.find({ "_id": ObjectId("655b4a235d797f3769d6b03e") })

Ejecución manual

El formato de la ejecución del plugin es el siguiente:

./pandora_mongodb \
--conf < ruta al fichero de configuración > \
--target_databases < ruta al fichero de configuración que contiene las bases de datos objetivo > \
[ --target_agents < ruta al fichero de configuración de agentes > ] \

Por ejemplo:

./pandora_mongodb \
--conf /usr/share/pandora_server/util/plugin/mongodb.conf \
--target_databases /usr/share/pandora_server/util/plugin/targets.conf \
--target_agents /usr/share/pandora_server/util/plugin/target_agents.conf 

 

Discovery

Este plugin puede integrarse con el Discovery de Pandora FMS.

Para ello se debe cargar el paquete ".disco" que puede descargar desde la librería de Pandora FMS:

https://pandorafms.com/library/ 

image.png

Una vez cargado, se podrán monitorizar entornos de MongoDB creando tareas de Discovery desde la sección Management > Discovery > Applications.

Para cada tarea se solicitarán los siguientes datos mínimos:

Captura desde 2026-02-04 14-13-37.png

También se podrá ajustar la configuración de la tarea para personalizar la monitorización deseada:

Captura desde 2026-03-30 16-08-03.png

Captura desde 2026-02-04 14-36-32.png

Por ultimo, se podrá configurar consultas personalizadas en el ultimo paso de la tarea (opcional).

Captura desde 2026-02-04 14-16-07.png

Las tareas que se completen exitosamente dispondrán de un sumario de ejecución con la siguiente información:

image.png

Las tareas que no se completen exitósamente dispondrán de un sumario de ejecución registrando los errores producidos.

Agentes y módulos generados por el plugin

El plugin creará un agente por cada instancia objetivo. Ese agente contendrá los siguientes módulos

A nivel de instancia 

Si esta activado engine_uptime:

uptime Muestra el tiempo en el que el servidor MongoDB ha estado en funcionamiento desde su última reinicialización o inicio.

Si esta activado query_stats:

queries command Cantidad de consultas en MongoDB que implican operaciones de comando.
queries delete     Cantidad de operaciones de eliminación realizadas en la base de datos MongoDB.
queries getmore Cantidad de operaciones "getmore" ejecutadas, "getmore" se utiliza para obtener más resultados de una consulta cuando los resultados no caben en un solo lote.
queries insert Cantidad de operaciones de inserción realizadas en la base de datos MongoDB.
queries query Cantidad de operaciones de consulta realizadas en la base de datos MongoDB.
queries update Cantidad de operaciones de actualización realizadas en la base de datos MongoDB.

Si esta activado analyze_connections:

connections available Número de conexiones disponibles en el servidor MongoDB
connections current Número actual de conexiones activas en el servidor MongoDB
connections totalCreated Cantidad total de conexiones que se han creado en el servidor MongoDB desde que se inició o reinició.
MONGODB connection Disponibilidad de la conexión actual

Si esta activado latency:

commands latency Latencia promedio de las operaciones de tipo comando en MongoDB.
commands ops Número total de operaciones de tipo comando realizadas en MongoDB.
reads latency Latencia promedio de las operaciones de lectura en MongoDB.
reads ops Cantidad total de operaciones de lectura realizadas en MongoDB.
writes latency Latencia promedio de las operaciones de escritura en MongoDB.
writes ops Cantidad total de operaciones de escritura realizadas en MongoDB.

Si esta activado network:

bytesIn Cantidad total de bytes que han sido recibidos por el servidor MongoDB desde que se inició o se reinició.
bytesOut Cantidad total de bytes que han sido enviados por el servidor MongoDB hacia los clientes o aplicaciones desde que se inició o se reinició.
numRequests Número total de solicitudes o peticiones que ha recibido el servidor MongoDB desde que se inició o se reinició.

A nivel de base de datos

<db_name> collections Número de colecciones en la base de datos.
<db_name> indexes Número de índices en la base de datos.
<db_name> indexSize Tamaño total de todos los índices en la base de datos en bytes.
<db_name> views Número de vistas en la base de datos.
<db_name> objects Número de documentos (objetos) en la base de datos.
<db_name> avgObjSize Tamaño promedio de los documentos en la base de datos en bytes.
<db_name> ataSize Tamaño total de los datos dentro de la base de datos en bytes.
<db_name> storageSize Cantidad total de espacio usado por la base de datos en disco, incluyendo índices y padding, en bytes.
<db_name> totalSize Suma de dataSize e indexSize, representando el tamaño total de la base de datos en bytes
<db_name> fsUsedSize Espacio usado en el sistema de archivos donde reside la base de datos en bytes.
<db_name> fsTotalSize Tamaño total del sistema de archivos donde reside la base de datos en bytes.
<db_name> status Estado de la base de datos (1 = OK, 0 = error).