# MongoDB
# 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 >
uri = < Cadena de conexión en formato URI; >
threads = < Número de hilos que se usaran para la creación de agentes >
modules_prefix = < Prefijo de módulos >
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 moitorización de estadísticas de consultas >
network = < Activar con 1 para habilitar la moitorización de estadísticas de redes >
latency = < Activar con 1 para habilitar la moitorización de estadísticas de latencia >
```
Ejemplo
```
agents_group_id = 10
interval = 300
uri = mongodb://172.17.0.3:27017
threads = 1
modules_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 bases de datos objetivo, separando cada base de datos por comas o por líneas. El formato para una base de datos será su nombre:
Ejemplo
```
admin
db_analytics
db_geospatial
db_guides
```
**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 abertura del módulo
name --> Nombre del módulo
description --> Descripción del módulo.
operation --> Tipo de operación, value | full -> value devuelve un valor simple, full devuelve todas las filas de una cadena
datatype --> Tipo de módulo
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.
target --> Consulta personalizada
target_databases --> Agentes de bases de datos en los que se creará el módulo. Selecionar segun el nombre que se le haya asignado al agente de la base de datos. El que se ha puesto en target agents.
check_end --> Etiqueta de cierre del módulo
```
Ejemplo
```
check_begin
name DatabaseStats
description Database statistics
operation value
datatype generic_data
target db.runCommand({ dbStats: 1 })
target_databases all
check_end
check_begin
name Getcollection
description get collection
datatype generic_data_string
min_warning 10
target db.system.version.find({})
target_databases agente2
check_end
check_begin
name Getdocument
description get document
#operation value
datatype generic_data_string
min_warning 10
target db.mi_coleccion.find({ "_id": ObjectId("655b4a235d797f3769d6b03e") })
target_databases agente4
check_end
```
**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({ "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/](https://pandorafms.com/library/)
[](https://pandorafms.com/guides/public/uploads/images/gallery/2023-10/HI1image.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:
- **MongoDB target strings :** Lista de objetivos Mongodb a monitorizar por la tarea. Será una lista separada por comas o por líneas. Cada base de datos objetivo se podrá definir añadiendo su nombre.
- **Uri:** URI de conexión MongoDB estándar para conectar a un servidor de base de datos MongoDB
[](https://pandorafms.com/guides/public/uploads/images/gallery/2023-10/7dRimage.png)
También se podrá ajustar la configuración de la tarea para personalizar la monitorización deseada:
- **Max threads**: Para optimizar el tiempo de ejecución, se podrán configurar múltiples hilos para monitorizar los agentes de la tarea. Hay que tener en cuenta que configurar múltiples hilos puede aumentar el uso de CPU de la tarea.
- **Target agent**: Lista de agentes objetivo para los objetivos MongoDB a monitorizar. Es decir, los nombres con los que se generarán los agentes de cada objetivo definido en la tarea. Será una lista separada por comas o por líneas. La posición de los nombres en la lista deberá coincidir con la posición de los objetivos MongoDB en su lista, es decir, el primer nombre se usará para el primer objetivo y así sucesivamente. Si la lista se separa por líneas, las líneas en blanco se ignorarán. Si no se especifica un nombre de agente para un objetivo se usará su nombre como nombre del agente.
- **Custom module prefix**: Texto incluido como prefijo para los todos los nombres de módulos generados. Es útil para localizar los módulos generados por la tarea o distinguirlos de otros.
- **Check engine uptime**: Si se activa monitorizará el uptime de los objetivos.
- **Retrieve query statistics**: Si se activa monitorizará las estadísticas de consultas.
- **Analyze connections**: Si se activa monitorizará las conexiones.
- **Retrieve latency statistics**: Si se activa monitorizará la latencia.
- **Retrieve network statistics**: Si se activa monitorizará las redes.
- **Execute custom queries:** Si se activa habilitaras la posibilidad de ejecutar custom queries.
- **Custom queries:** Se pueden especificar los módulos con las custom queries.
[](https://pandorafms.com/guides/public/uploads/images/gallery/2024-09/image.png)
Las tareas que se completen exitosamente dispondrán de un sumario de ejecución con la siguiente información:
- **Total agents**: Total de agentes generados por la tarea.
- **Targets up**: Total de objetivos a los que ha sido posible conectar.
- **Targets down**: Total de objetivos a los que no ha sido posible conectar.
[](https://pandorafms.com/guides/public/uploads/images/gallery/2023-10/B2Qimage.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 base de datos objetivo. Ese agente contendrá los siguientes módulos
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ó. |