La monitorización es un componente fundamental de la administración de bases de datos. Un buen conocimiento de los informes de MongoDB le permitirá evaluar el estado de su base de datos y mantener su implementación sin crisis. Además, comprender los parámetros operativos normales de MongoDB le permitirá diagnosticar problemas antes de que se conviertan en fallos.
Este documento presenta una visión general de las herramientas de supervisión disponibles y las estadísticas de reporte disponibles en MongoDB. También introduce estrategias de diagnóstico y sugerencias para la supervisión de sets de réplicas y clústeres fragmentados.
Estrategias de supervisión
MongoDB ofrece varios métodos para recopilar datos sobre el estado de una instancia de MongoDB en ejecución:
MongoDB distribuye un conjunto de utilidades que proporcionan reporte en tiempo real sobre las actividades de la base de datos.
MongoDB ofrece varias comandos de base de datos que devuelven estadísticas respecto al estado actual de la base de datos con mayor fidelidad.
MongoDB Atlas es una base de datos como servicio alojada en la nube para ejecutar, supervisar y mantener implementaciones de MongoDB.
MongoDB Cloud Manager es un servicio alojado que supervisa las implementaciones de MongoDB en ejecución para recopilar datos y ofrecer visualización y alertas en función de esos datos.
MongoDB Ops Manager es una solución on-premises disponible en MongoDB Enterprise Advanced que supervisa las implementaciones activas de MongoDB para recopilar datos, proporcionar visualización y emitir alertas basadas en esos datos.
Cada estrategia puede ayudar a responder diferentes preguntas y es útil en distintos contextos. Estos métodos son complementarios.
Herramientas de informes de MongoDB
Esta sección brinda una visión general de los métodos de reporte distribuidos con MongoDB. También ofrece ejemplos de los tipos de preguntas que cada método es más adecuado para ayudarle a abordar.
Utilidades
La distribución de MongoDB incluye varias utilidades que devuelven rápidamente estadísticas sobre el rendimiento y la actividad de las instancias. Normalmente, estos son más útiles para diagnosticar problemas y evaluar el funcionamiento normal.
mongostat
mongostat Captura y devuelve el recuento de operaciones de base de datos por tipo (p. ej., inserción, consulta, actualización, eliminación, etc.). Estos recuentos informan sobre la distribución de la carga en el servidor.
Utiliza mongostat para comprender la distribución de los tipos de operaciones y para informar la planificación de capacidad. Consulta la mongostat página de referencia para obtener más detalles.
mongotop
mongotop Realiza un seguimiento e informa la actividad actual de lectura y escritura de una instancia de MongoDB, e informa estas estadísticas por colección.
Use mongotop para comprobar si la actividad y el uso de tu base de datos cumplen tus expectativas. Consulta la mongotop página de referencia para obtener más detalles.
Comandos
MongoDB incluye una serie de comandos que informan sobre el estado de la base de datos.
Estos datos pueden proporcionar un nivel de granularidad más fino que las utilidades discutidas anteriormente. Considera usar sus resultados en scripts y programas para desarrollar alertas personalizadas, o para modificar el comportamiento de tu aplicación en respuesta a la actividad de tu instancia. El método db.currentOp() es otra herramienta útil para identificar las operaciones en curso de la instancia de la base de datos.
serverStatus
El comando serverStatus o db.serverStatus() desde la shell devuelve una visión general del estado de la base de datos, detallando el uso del disco, el uso de la memoria, la conexión, el registro y el acceso al índice. El comando devuelve rápidamente y no tiene un impacto en el rendimiento de MongoDB.
serverStatus genera una cuenta del estado de una instancia de MongoDB. Este comando rara vez se ejecuta directamente. En la mayoría de los casos, los datos son más significativos cuando se recopilan, como se vería con las herramientas de supervisión, incluyendo MongoDB Cloud Manager y Ops Manager. Sin embargo, todos los administradores deberían estar familiarizados con los datos proporcionados por serverStatus.
dbStats
El comando dbStats, o db.stats() desde la shell, devuelve un documento que aborda el uso del almacenamiento y los volúmenes de datos. La dbStats refleja la cantidad de almacenamiento utilizado, la cantidad de datos contenidos en la base de datos y los contadores de objetos, colecciones e índices.
Utilice estos datos para supervisar el estado y la capacidad de almacenamiento de una base de datos específica. Este resultado también te permite comparar el uso entre bases de datos y determinar el tamaño promedio de documento en una base de datos.
collStats
El collStats o db.collection.stats() desde la shell que proporciona estadísticas que se asemejan a dbStats a nivel de colección, incluyendo un recuento de los objetos en la colección, el tamaño de la colección, la cantidad de espacio en disco utilizado por la colección e información sobre sus índices.
replSetGetStatus
El replSetGetStatus comando ( desde el shell) devuelvers.status() una descripción general del estado del conjunto de réplicas. El documento replSetGetStatus detalla el estado y la configuración del conjunto de réplicas, así como las estadísticas de sus miembros.
Utilice estos datos para garantizar que la replicación esté configurada correctamente y para comprobar las conexiones entre el host actual y los demás miembros del conjunto de réplicas.
Herramientas de supervisión alojadas (SaaS)
Estas son herramientas de supervisión proporcionadas como un servicio alojado, generalmente a través de una suscripción paga.
Nombre | notas |
|---|---|
MongoDB Cloud Manager es una suite basada en la nube para gestionar implementaciones de MongoDB. MongoDB Cloud Manager ofrece funcionalidades de supervisión, copia de seguridad y automatización. Para una solución on-premises, consulte también Ops Manager, disponible en MongoDB Enterprise Advanced. | |
VividCortex proporciona información detallada sobre la carga de trabajo de la base de datos de producción y el rendimiento de las query de MongoDB, con una resolución de un segundo. Realiza un seguimiento de latencia, rendimiento, errores y más para garantizar la escalabilidad y el rendimiento excepcional de tu aplicación en MongoDB. | |
Tablero para MongoDB, alertas específicas de MongoDB, cronograma de cambio por falla de la replicación, y aplicaciones móviles para iPhone, iPad y Android. | |
IBM cuenta con una oferta de SaaS de Gestión del Rendimiento de Aplicaciones que incluye la monitorización de MongoDB, así como de otras aplicaciones y middleware. | |
New Relic ofrece soporte total para la gestión del rendimiento de aplicaciones. Además, los Plugins y Insights de New Relic le permiten ver métricas de supervisión desde Cloud Manager en New Relic. | |
Supervisión de infraestructura para visualizar el rendimiento de tus implementaciones de MongoDB. | |
Supervisión, Detección de Anomalías y Alertas SPM supervisa todas las métricas clave de MongoDB junto con la infraestructura incl. Docker y otras métricas de aplicaciones, p.ej. Node.js, Java, NGINX, Apache, HAProxy o Elasticsearch. SPM proporciona correlación de métricas y registros. | |
Pandora FMS proporciona el plugin PandoraFMS-mongodb-monitoring para supervisar MongoDB. |
Registro de procesos
Durante el funcionamiento normal, las instancias mongod y mongos informan de una cuenta activa de toda la actividad y operaciones del servidor ya sea en la salida estándar o en una entrada de registro. Los siguientes ajustes de ejecución controlan estas opciones.
quiet. Limita la cantidad de información escrita en el registro o de salida.verbosity. Aumenta la cantidad de información escrita en el registro o salida. También puedes modificar el nivel de verbosidad del registro durante el tiempo de ejecución con el parámetrologLevelo el métododb.setLogLevel()en la shell.path. Permite el registro en un archivo, en lugar de en la salida estándar. Debe especificar la ruta completa de la entrada de registro al ajustar esta configuración.logAppend. Agrega información a un archivo de registro en lugar de sobrescribir el archivo.
Nota
Los siguientes comandos de base de datos también afectan el registro:
getLog. Muestra los mensajes recientes del registro de procesosmongod.logRotate. Rota las entradas de registro solo para los procesos demongod. Consulta Rotar archivos de registro.
Restricción de registro
Disponible solo en MongoDB Atlas y MongoDB Enterprise
Un mongod o mongos que se ejecuta con redactClientLogData restringe cualquier mensaje que acompañe a un evento de registro determinado antes de registrarlo, y deja solo los metadatos, los archivos fuente o los números de línea relacionados con el evento. redactClientLogData evita que información potencialmente sensible ingrese al registro del sistema, a costa de perder detalle diagnóstico.
Por ejemplo, la siguiente operación inserta un documento en un mongod que se ejecuta sin restricción de registros. El mongod tiene el nivel de verbosidad del registro establecido en 1:
db.clients.insertOne( { "name" : "Joe", "PII" : "Sensitive Information" } )
Esta operación produce el siguiente evento de registro:
{ "t": { "$date": "2024-07-19T15:36:55.024-07:00" }, "s": "I", "c": "COMMAND", ... "attr": { "type": "command", ... "appName": "mongosh 2.2.10", "command": { "insert": "clients", "documents": [ { "name": "Joe", "PII": "Sensitive Information", "_id": { "$oid": "669aea8792c7fd822d3e1d8c" } } ], "ordered": true, ... } ... } }
Cuando mongod se ejecuta con redactClientLogData y realiza la misma operación de inserción, produce el siguiente evento de registro:
{ "t": { "$date": "2024-07-19T15:36:55.024-07:00" }, "s": "I", "c": "COMMAND", ... "attr": { "type": "command", ... "appName": "mongosh 2.2.10", "command": { "insert": "###", "documents": [ { "name": "###", "PII": "###", "_id": "###" } ], "ordered": "###", ... } ... } }
Utiliza redactClientLogData en conjunto con Cifrado en Reposo y TLS/SSL (Cifrado de Transporte) para ayudar al cumplimiento de los requisitos regulatorios.
Diagnóstico de problemas de rendimiento
Al desarrollar y operar aplicaciones con MongoDB, es posible que desees analizar el rendimiento tanto de la base de datos como de la aplicación. MongoDB Performance discute algunos de los factores operativos que pueden influir en el rendimiento.
Replicación y supervisión
Además de los requisitos básicos de monitorización para cualquier instancia de MongoDB, en el caso de los conjuntos de réplicas, los administradores deben monitorizar el retardo de replicación. El "retardo de replicación" se refiere al tiempo que se tarda en copiar (es decir, replicar) una operación de escritura del servidor principal al secundario. Un pequeño retraso puede ser aceptable, pero surgen problemas importantes a medida que aumenta el retardo de replicación, como:
Aumenta la presión del caché en el nodo primario.
Las operaciones que ocurrieron durante el período de retraso no se replican en uno o más secundarios. Si utilizas la replicación para garantizar la persistencia de los datos, retrasos excepcionalmente largos pueden afectar la integridad de tu conjunto de datos.
Si el atraso de la replicación supera la longitud del operation log (oplog), entonces MongoDB tendrá que realizar una sincronización inicial en el secundario, copiando todos los datos del primario y reconstruyendo todos los índices. [1] Esto es poco común en circunstancias normales, pero si se configura el oplog para que sea más pequeño que el valor por defecto, puede surgir este problema.
Nota
El tamaño del oplog solo se puede configurar durante la primera ejecución utilizando el argumento
--oplogSizepara el comandomongod, o, de preferencia, la configuraciónoplogSizeMBen el archivo de configuración de MongoDB. Si no especifica esto en la línea de comandos antes de ejecutar con la opción--replSet,mongodcreará un oplog de tamaño por defecto.De forma predeterminada, el registro 5 de operaciones representa el por ciento del espacio de disco disponible en 64sistemas de bits. Para obtener más información sobre cómo cambiar el tamaño del registro de operaciones, consulte Cambiar el tamaño del registro de operaciones de los miembros del conjunto de réplicas autoadministradas.
Control de flujo
A partir de MongoDB 4.2, los administradores pueden limitar la velocidad a la que el servidor principal aplica sus escrituras con el objetivo de mantener el retraso por debajo de un valor majority
committed máximo flowControlTargetLagSeconds configurable.
Por defecto, el control de flujo es enabled.
Consulte también: Verifique el atraso de la replicación.
Estado del set de réplicas
Los problemas de replicación son la mayoría de las veces el resultado de problemas de conectividad de red entre miembros, o el resultado de un primario que no cuenta con los recursos necesarios para soportar el tráfico de la aplicación y la replicación. Para comprobar el estado de una réplica, utiliza el replSetGetStatus o el siguiente asistente en el shell:
rs.status()
La referencia proporciona una visión general más detallada replSetGetStatus de esta salida. En general, observe el valor de y preste especial atención a optimeDate la diferencia de tiempo entre los miembros primario y secundario.
| [1] | El oplog puede crecer más allá de su límite de tamaño configurado para evitar borrar el majority commit point. |
Aplicación lenta de entradas del Oplog
Los miembros secundarios de un set de réplicas ahora registran entradas de oplog que tardan más que el umbral de una operación lenta en aplicarse. Estos mensajes lentos del oplog:
Se registran para los secundarios en el
diagnostic log.Se documentan en el registro bajo el componente
REPLcon el textoapplied op: <oplog entry> took <num>ms.No depende de los niveles de registro (ya sea a nivel del sistema o del componente)
No depende del nivel de perfil.
Se ven afectados por
slowOpSampleRate.
El perfilador no captura entradas lentas del oplog.
Particionado y supervisión
En la mayoría de los casos, los componentes de los clústeres fragmentados se benefician de la misma supervisión y análisis que todas las demás instancias de MongoDB. Además, los clústeres requieren un mayor supervisión para garantizar que los datos se distribuyan eficazmente entre los nodos y que las operaciones de particionamiento funcionen de manera adecuada.
Tip
Consulta la documentación de particionado para obtener más información.
servidor de configuración
La base de datos de configuración mantiene un mapa que identifica qué documentos se encuentran en cada fragmento. El clúster actualiza este mapa a medida que los fragmentos se mueven entre fragmentos. Cuando un servidor de configuración deja de ser accesible, ciertas operaciones de fragmentación dejan de estar disponibles, como mover fragmentos e iniciar mongos instancias. Sin embargo, los clústeres siguen siendo accesibles desde instancias que ya están en mongos ejecución.
Dado que los servidores de configuración inaccesibles pueden afectar seriamente la disponibilidad de un clúster fragmentado, se debe supervisar los servidores de configuración para garantizar que el clúster permanezca bien equilibrado y que las instancias de mongos puedan reiniciarse.
MongoDB Cloud Manager y Ops Manager supervisan los servidores de configuración y pueden generar notificaciones si un servidor de configuración deja de ser accesible. Consulte la documentación de MongoDB Cloud Manager y la documentación de Ops Manager para obtener más información.
Balance y distribución de fragmento
Las implementaciones más eficaces de clústeres particionados balancean equitativamente los fragmentos entre las particiones. Para facilitar esto, MongoDB cuenta con un proceso de balanceador en segundo plano que distribuye datos para asegurar que los fragmentos siempre estén distribuidos óptimamente entre las particiones.
Emite el comando db.printShardingStatus() o sh.status() al mongos desde mongosh. Esto devuelve una visión general de todo el clúster, incluido el nombre de la base de datos y una lista de los fragmentos.
Bloqueos obsoletos
Para verificar el estado del bloqueo de la base de datos, conéctese a una mongos instancia usando mongosh. Emita la siguiente secuencia de comandos para cambiar a la base de datos config y mostrar todos los bloqueos pendientes en la base de datos partición:
use config db.locks.find()
El proceso de balanceo utiliza un bloqueo especial de "balanceador" que impide que se realicen otras actividades de balanceo. En la base de datos config, utilice el siguiente comando para ver el bloqueo de "balanceador".
db.locks.find( { _id : "balancer" } )
El principal del servidor de configuración CSRS mantiene el bloqueo de "balanceador" usando un ID de proceso llamado "ConfigServer." Este bloqueo nunca se libera. Para determinar si el balanceador está funcionando, consulta Verifica si el balanceador está en funcionamiento.
Vigilante del nodo de almacenamiento
Nota
El Watchdog de nodo de almacenamiento está disponible tanto en las ediciones Community como MongoDB Enterprise.
El nodo de almacenamiento Watchdog monitorea los siguientes directorios de MongoDB para detectar falta de respuesta del sistema de archivos:
El directorio
--dbpathEl directorio
journaldentro del directorio--dbpathEl directorio del archivo
--logpathEl directorio del archivo
--auditPath
Nota
A partir de MongoDB 6.1, el registro en la bitácora siempre está habilitado. Como resultado, MongoDB remueve la opción storage.journal.enabled y las opciones de línea de comandos --journal y --nojournal correspondientes.
Por defecto, el Watchdog del nodo de almacenamiento está deshabilitado. Solo puedes habilitar el Watchdog de nodos de almacenamiento en un mongod durante el inicio configurando el parámetro watchdogPeriodSeconds a un número entero mayor o igual a 60. Sin embargo, una vez habilitado, puedes pausar el watchdog del nodo de almacenamiento y reiniciarlo durante el tiempo de ejecución. Consulte el parámetro watchdogPeriodSeconds para más detalles.
Si alguno de los sistemas de archivos que contienen los directorios monitoreados deja de responder, el sistema de vigilancia del nodo de almacenamiento finaliza el mongod y sale con un código de estado de 61. Si el mongod es el principal de un conjunto de réplicas, la finalización inicia una conmutación por error, lo que permite que otro miembro se convierta en principal.
Una vez que un mongod haya terminado, puede que no sea posible reiniciarlo limpiamente en la misma máquina.
Nota
Symlinks
Si alguno de sus directorios monitoreados es un enlace simbólico a otros volúmenes, el Watchdog del nodo de almacenamiento no monitorea el objetivo del enlace simbólico.
Por ejemplo, si el mongod utiliza storage.directoryPerDB: true (o --directoryperdb) y crea un enlace simbólico de un directorio de base de datos a otro volumen, el Watchdog del nodo de almacenamiento no sigue el enlace simbólico para supervisar el objetivo.
El tiempo máximo que el Watchdog del nodo de almacenamiento puede tardar en detectar un sistema de archivos no receptivo y finalizar es casi dos veces el valor de watchdogPeriodSeconds.