MongoDB registrando todas las consultas

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 …

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”.

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 

Porque su primera respuesta de google …
Para la versión 3

 $ mongo MongoDB shell version: 3.0.2 connecting to: test > use myDb switched to db > db.setLogLevel(1) 

http://docs.mongodb.org/manual/reference/method/db.setLogLevel/

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

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 ( fuente ):

  • Nivel 0 : el generador de perfiles está desactivado, no recostack 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 : recostack 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 : recostack 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 } ) 

Los datos del perfilador se escriben en una colección en su base de datos, no en un archivo. Ver http://docs.mongodb.org/manual/tutorial/manage-the-database-profiler/

Recomendaría utilizar el servicio MMS de 10gen y los datos del generador de perfiles de desarrollo allí, donde puede filtrarlos y clasificarlos en la interfaz de usuario.

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() 

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?

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

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/

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