A veces, decodificar los registros de errores de MongoDB puede ser complicado y puede consumir una gran parte de su valioso tiempo. En este artículo, aprenderemos a examinar los registros de errores de MongoDB analizando cada parte de los mensajes de registro.
Formato común para líneas de registro de MongoDB
Aquí está el patrón de línea de registro para la versión 3.0 y superior...
<timestamp> <severity> <component> [<context>] <message>
Patrón de línea de registro para versiones anteriores de MongoDB solo incluido:
<timestamp> [<context>] <message>
Veamos cada etiqueta.
Marcas de tiempo
El campo de marca de tiempo del mensaje de registro almacena la hora exacta en que se insertó un mensaje de registro en el archivo de registro. Hay 4 tipos de marcas de tiempo compatibles con MongoDB. El formato predeterminado es:iso8601-local. Puede cambiarlo usando el parámetro --timeStampFormat.
Nombre del formato de marca de tiempo | Ejemplo |
---|---|
iso8601-local | 1969-12-31T19:00:00.000+0500 |
iso8601-utc | 1970-01-01T00:00:00.000Z |
ctime | miércoles 31 de diciembre 19:00:00.000 |
ctime-no-ms | miércoles 31 de diciembre 19:00:00 |
Gravedad
La siguiente tabla describe el significado de todos los posibles niveles de gravedad.
Nivel de gravedad | Descripción |
---|---|
F | Fatal:el error de la base de datos ha provocado que ya no se pueda acceder a la base de datos |
E | Error:errores de la base de datos que detendrán la ejecución de la base de datos. |
W | Advertencia:mensajes de la base de datos que explican el comportamiento potencialmente dañino de la base de datos. |
Yo | Informativo:mensajes solo con fines informativos, como "Se ha aceptado una nueva conexión". |
D | Depuración:principalmente útil para depurar los errores de la base de datos |
Componente
Después de la versión 3.0, los mensajes de registro ahora incluyen "componentes" para proporcionar una categorización funcional de los mensajes. Esto le permite restringir fácilmente su búsqueda mirando los componentes específicos.
Componente | Descripción del error |
---|---|
Acceso | Relacionado con el control de acceso |
Comando | Relacionado con los comandos de la base de datos |
Control | Relacionado con actividades de control |
FTDC | Relacionado con las actividades de recopilación de datos de diagnóstico |
Geo | Relacionado con el análisis de formas geoespaciales |
Índice | Relacionado con las operaciones de indexación |
Red | Relacionado con las actividades de la red |
Consulta | Relacionado con consultas |
REPL | Relacionado con conjuntos de réplicas |
REPL_HB | Relacionado con los latidos de conjuntos de réplicas |
Restaurar | Relacionado con las operaciones de reversión de db |
Fragmentación | Relacionado con la fragmentación |
Almacenamiento | Relacionado con las actividades de almacenamiento |
Diario | Relacionado con las actividades de la revista |
Escribir | Relacionado con las operaciones de escritura de db |
Contexto
La parte de contexto del mensaje de error generalmente contiene el hilo o la identificación de la conexión. Otros valores pueden ser initandlisten. Esta parte está rodeada por corchetes. Los mensajes de registro de cualquier conexión nueva a MongoDB tendrán un valor de contexto como initandlisten, para todos los demás mensajes de registro, será la identificación del hilo o la identificación de la conexión. Por ejemplo
2018-05-29T19:06:29.731+0000 [initandlisten] connection accepted from 127.0.0.1:27017 #1000 (13 connections now open)
2018-05-29T19:06:35.770+0000 [conn1000] end connection 127.0.0.1:27017 (12 connections now open)
Mensaje
Contiene el mensaje de registro real.
Ubicación del archivo de registro
La ubicación predeterminada en el servidor es:/var/log/mongodb/mongodb.log
Si el archivo de registro no está presente en esta ubicación, puede verificar el archivo de configuración de MongoDB. Puede encontrar el archivo de configuración de MongoDB en cualquiera de estas dos ubicaciones.
/etc/mongod.conf or /yourMongoDBpath/mongod.conf
Una vez que abra el archivo de configuración, busque la opción logpath en él. La opción logpath le dice a MongoDB dónde registrar todos los mensajes.
Análisis de un mensaje de registro simple
Este es un ejemplo de un mensaje de error típico de MongoDB...
2014-11-03T18:28:32.450-0500 I NETWORK [initandlisten] waiting for connections on port 27017
Marca de tiempo:2014-11-03T18:28:32.450-0500
Severidad:I
Componente:RED
Contexto:[initandlisten]
Mensaje:esperando conexiones en el puerto 27017
La parte más importante de este error es la parte del mensaje. En la mayoría de los casos, puede averiguar el error mirando este campo. A veces, si el mensaje no es claro para usted, entonces puede optar por la parte del componente. Para este mensaje, el valor del Componente es Red, lo que significa que el mensaje de registro está relacionado con un problema de red.
Si no puede resolver su error, puede verificar la gravedad del mensaje de registro que dice que este mensaje tiene fines informativos. Además, también puede consultar otras partes del mensaje de registro, como la marca de tiempo o el contexto, para encontrar la causa raíz completa.
Decodificación de mensajes de registro de errores comunes
-
Mensaje:
2018-05-10T21:19:46.942 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
Resolución: Crear usuario administrador en la base de datos de autenticación
-
Mensaje:
2018-05-10T21:19:46.942 E COMMAND [initandlisten] ** ERROR: getMore command failed. Cursor not found
Resolución: Elimine el tiempo de espera del cursor o aumente el tamaño del lote del cursor.
-
Mensaje:
2018-05-10T21:19:46.942 E INDEX [initandlisten] ** ERROR:E11000 duplicate key error index: test.collection.$a.b_1 dup key: { : null }
Resolución: Violación de la restricción de clave única. Intente insertar el documento con una clave diferente.
-
Mensaje:
2018-05-10T21:19:46.942 E NETWORK [initandlisten] ** ERROR:Timed out connecting to localhost:27017.
Resolución: La latencia entre el controlador y el servidor es demasiado grande, el controlador puede fallar. Puede cambiar la configuración agregando la opción connectionTimeout en la cadena de conexión.
-
Mensaje:
2018-05-10T21:19:46.942 E WRITE [initandlisten] ** ERROR: A write operation resulted in an error. E11000 duplicate key error index: test.people.$_id_ dup key: { : 0 }
Resolución: Elimina la duplicación del valor del campo _id de los documentos en conflicto.
-
Mensaje:
2018-05-10T21:19:46.942 E NETWORK [initandlisten] ** ERROR: No connection could be made because the target machine actively refused it 127.0.0.1:27017 at System.Net.Sockets.Socket.EndConnect
Resolución: El servidor no se está ejecutando en el puerto 27017 o intente reiniciar el servidor con el host y el puerto correctos.
Herramientas de administración de registros
MongoDB 3.0 actualizó sus funciones de registro para brindar una mejor perspectiva de todas las actividades de la base de datos. Hay muchas herramientas de administración de registros disponibles en el mercado, como MongoDB Ops Manager, entradas de registro, mtools, etc.
Conclusión
El registro es tan importante como la replicación o la fragmentación para una buena y adecuada gestión de la base de datos. Para una mejor gestión de la base de datos, uno debería poder decodificar los registros fácilmente para rectificar las excepciones/errores rápidamente. Espero que después de leer este tutorial, se sienta más cómodo al analizar registros complejos de MongoDB.