mayor igual ejemplos consultas clausula caracteristicas basicas avanzadas mongodb logging

igual - MongoDB registrando todas las consultas



mongodb ejemplos (11)

La pregunta es tan simple como simple ... ¿Cómo se registran todas las consultas en un archivo de registro capaz de "cola" en mongodb?

Yo he tratado:

  • establecer el nivel de perfil
  • configurando el parámetro slow ms comenzando
  • mongod con la opción -vv

El /var/log/mongodb/mongodb.log sigue mostrando solo el número actual de conexiones activas ...


Creo que si bien no es elegante, el oplog podría usarse parcialmente para este propósito: registra todas las escrituras, pero no las lecturas ...

Tienes que habilitar replicatoon, si estoy en lo cierto. La información proviene de esta respuesta de esta pregunta: ¿Cómo escuchar los cambios en una colección de MongoDB?


Escribí una secuencia de comandos que imprimirá el registro de perfil del sistema en tiempo real a medida que entren las consultas. Primero debe habilitar el inicio de sesión como se indica en otras respuestas. Lo necesitaba porque estoy usando Windows Subsystem para Linux, para el cual la cola aún no funciona.

https://github.com/dtruel/mongo-live-logger


Establecer perfil de nivel 2 es otra opción para registrar todas las consultas.


Hice una herramienta de línea de comando para activar la actividad del generador de perfiles y ver los registros en una forma de "cola" : "mongotail" .

Pero la característica más interesante (también como la tail ) es ver los cambios en "tiempo real" con la opción -f , y ocasionalmente filtrar el resultado con grep para encontrar una operación en particular.

Consulte la documentación y las instrucciones de instalación en: https://github.com/mrsarm/mongotail




Puede registrar todas las consultas:

$ mongo MongoDB shell version: 2.4.9 connecting to: test > use myDb switched to db myDb > db.getProfilingLevel() 0 > db.setProfilingLevel(2) { "was" : 0, "slowms" : 1, "ok" : 1 } > db.getProfilingLevel() 2 > db.system.profile.find().pretty()

Fuente: http://docs.mongodb.org/manual/reference/method/db.setProfilingLevel/

db.setProfilingLevel(2) significa "registrar todas las operaciones".


Recomiendo ver mongosniff. Esta herramienta puede hacer todo lo que quieras y más. Especialmente puede ayudar a diagnosticar problemas con sistemas de mongo de mayor escala y cómo se enrutan las consultas y de dónde vienen, ya que funciona al escuchar su interfaz de red para todas las comunicaciones relacionadas con mongo.

http://docs.mongodb.org/v2.2/reference/mongosniff/


Terminé resolviendo esto iniciando mongod como este (martillado y feo, sí ... pero funciona para el entorno de desarrollo):

mongod --profile=1 --slowms=1 &

Esto habilita la creación de perfiles y establece el umbral para "consultas lentas" como 1 ms, lo que provoca que todas las consultas se registren como "consultas lentas" en el archivo:

/var/log/mongodb/mongodb.log

Ahora obtengo salidas de registro continuo usando el comando:

tail -f /var/log/mongodb/mongodb.log

Un registro de ejemplo:

Mon Mar 4 15:02:55 [conn1] query dendro.quads query: { graph: "u:http://example.org/people" } ntoreturn:0 ntoskip:0 nscanned:6 keyUpdates:0 locks(micros) r:73163 nreturned:6 reslen:9884 88ms


Una vez que el nivel de perfil se establece usando db.setProfilingLevel(2) .

El siguiente comando imprimirá la última consulta ejecutada.
También puede cambiar el límite (5) para ver menos / más consultas.
$ nin - filtrará las consultas de perfil e índices
Además, use la proyección de consulta {''query'': 1} solo para ver el campo de consulta

db.system.profile.find( { ns: { $nin : [''meteor.system.profile'',''meteor.system.indexes''] } } ).limit(5).sort( { ts : -1 } ).pretty()

Registros con solo proyección de consulta

db.system.profile.find( { ns: { $nin : [''meteor.system.profile'',''meteor.system.indexes''] } }, {''query'':1} ).limit(5).sort( { ts : -1 } ).pretty()


MongoDB tiene una característica sofisticada de creación de perfiles. El registro ocurre en la colección system.profile . Los registros se pueden ver desde:

db.system.profile.find()

Hay 3 niveles de registro ( source ):

  • Nivel 0 : el generador de perfiles está desactivado, no recopila ningún dato. mongod siempre escribe las operaciones más largas que el umbral de slowOpThresholdMs en su registro. Este es el nivel del perfilador predeterminado.
  • Nivel 1 : recopila datos de creación de perfiles solo para operaciones lentas. Por defecto, las operaciones lentas son aquellas más lentas de 100 milisegundos. Puede modificar el umbral para operaciones "lentas" con la opción de tiempo de ejecución slowOpThresholdMs o el comando setParameter. Consulte la sección Especificar el umbral para operaciones lentas para obtener más información.
  • Nivel 2 : recopila datos de creación de perfiles para todas las operaciones de la base de datos.

Para ver en qué nivel de perfil se está ejecutando la base de datos, use

db.getProfilingLevel()

y para ver el estado

db.getProfilingStatus()

Para cambiar el estado del perfil, use el comando

db.setProfilingLevel(level, milliseconds)

Donde level refiere al nivel de perfil y milliseconds es el ms de la cual las consultas necesitan ser registradas. Para desactivar el registro, use

db.setProfilingLevel(0)

La consulta para buscar en la colección de perfiles del sistema para todas las consultas que tomaron más de un segundo, ordenadas por marca de tiempo descendiente será

db.system.profile.find( { millis : { $gt:1000 } } ).sort( { ts : -1 } )