199 votes

MongoDB enregistre toutes les requêtes

La question est aussi basique qu'elle est simple... Comment enregistrer toutes les requêtes dans un fichier journal "tail" dans mongodb ?

J'ai essayé :

  • définir le niveau de profilage
  • paramétrage du démarrage du paramètre slow ms
  • mongod avec l'option -vv

Le fichier /var/log/mongodb/mongodb.log continue d'afficher uniquement le nombre actuel de connexions actives...

299voto

Kristóf Dombi Points 812

Vous pouvez enregistrer toutes les requêtes :

$ 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) signifie "enregistrer toutes les opérations".

89voto

J'ai fini par résoudre ce problème en démarrant mongod comme ceci (martelé et moche, oui... mais ça marche pour l'environnement de développement) :

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

Cela permet d'activer le profilage et de fixer le seuil des "requêtes lentes" à 1ms, ce qui fait que toutes les requêtes sont enregistrées comme "requêtes lentes" dans le fichier :

/var/log/mongodb/mongodb.log

Maintenant, j'obtiens des sorties de journal continues en utilisant la commande :

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

Un exemple de journal :

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

37voto

barak Points 604

Parce que c'est la première réponse de Google...
Pour la version 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/

29voto

student Points 87

MongoDB possède une fonction sophistiquée de profilage. L'enregistrement se fait dans system.profile collection. Les rondins peuvent être vus depuis :

db.system.profile.find()

Il existe 3 niveaux de journalisation ( source ) :

  • Niveau 0 - le profileur est désactivé, il ne collecte aucune donnée. mongod écrit toujours les opérations plus longues que le seuil slowOpThresholdMs dans son journal. C'est le niveau de profileur par défaut.
  • Niveau 1 - collecte des données de profilage pour les opérations lentes uniquement. Par défaut, les opérations lentes sont celles qui sont plus lentes que 100 millisecondes. Vous pouvez modifier le seuil des opérations "lentes" à l'aide de l'option d'exécution slowOpThresholdMs ou de la commande setParameter. Consultez la section Spécifier le seuil pour les opérations lentes pour plus d'informations.
  • Niveau 2 - collecte des données de profilage pour toutes les opérations de la base de données.

Pour voir dans quel niveau de profilage la base de données fonctionne, utilisez

db.getProfilingLevel()

et pour voir l'état

db.getProfilingStatus()

Pour modifier l'état du profilage, utilisez la commande

db.setProfilingLevel(level, milliseconds)

level fait référence au niveau de profilage et milliseconds est la durée en ms pendant laquelle les requêtes doivent être enregistrées. Pour désactiver la journalisation, utilisez

db.setProfilingLevel(0)

La requête à rechercher dans la collection de profils système pour toutes les requêtes qui ont pris plus d'une seconde, ordonnée par timestamp descendant sera

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

22voto

Mrdev Points 21

J'ai créé un outil en ligne de commande pour activer l'activité du profileur et voir les journaux dans un fichier de type "tail "able manière --> "mongotail" :

$ mongotail MYDATABASE
2015-02-24 19:17:01.194 QUERY  [Company] : {"_id": ObjectId("548b164144ae122dc430376b")}. 1 returned.
2015-02-24 19:17:01.195 QUERY  [User] : {"_id": ObjectId("549048806b5d3db78cf6f654")}. 1 returned.
2015-02-24 19:17:01.196 UPDATE [Activation] : {"_id": "AB524"}, {"_id": "AB524", "code": "f2cbad0c"}. 1 updated.
2015-02-24 19:17:10.729 COUNT  [User] : {"active": {"$exists": true}, "firstName": {"$regex": "mac"}}
...

Mais la caractéristique la plus intéressante (également comme tail ) est de voir les changements dans "en temps réel" avec le -f et filtrer occasionnellement le résultat avec grep pour trouver une opération particulière.

Voir la documentation et les instructions d'installation dans : https://github.com/mrsarm/mongotail

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X