MongoDB logging toutes les requêtes

la question est aussi fondamentale que simple... Comment enregistrer toutes les requêtes dans un fichier"tail" en mongodb?

j'ai essayé:

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

/var/log/mongodb/mongodb.log n'affiche que le nombre actuel de connexions actives...

128
demandé sur João Rocha da Silva 2013-03-04 18:53:32

11 réponses

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

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

db.setProfilingLevel(2) signifie" enregistrer toutes les opérations".

202
répondu Kristof Dombi 2018-01-19 14:45:41

j'ai fini par résoudre ceci en démarrant mongod comme ceci (martelé et laid, ouais... mais travaille pour le développement environnement):

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

cela permet le profilage et définit le seuil pour les "requêtes lentes" comme 1ms, faisant en sorte que toutes les requêtes soient enregistrées en tant que "requêtes lentes" dans le fichier:

/var/log/mongodb/mongodb.log

maintenant j'obtiens des sorties de journal continu en utilisant la commande:

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

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
72
répondu João Rocha da Silva 2013-03-04 15:07:03

parce que sa première réponse 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 /

30
répondu barak 2015-04-24 14:03:52

j'ai fait un outil en ligne de commande pour activer l'activité de profileur et voir les journaux dans un "queue "capable voie: " mongotail .

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

voir documentation et instructions d'installation dans: https://github.com/mrsarm/mongotail

19
répondu Mariano Ruiz 2015-02-24 19:17:36

MongoDB a une caractéristique sophistiquée de profilage. L'enregistrement se fait dans la collection system.profile . Les rondins peuvent être vus de:

db.system.profile.find()

il y a 3 niveaux d'enregistrement ( source ):

  • niveau 0 - le profileur est éteint, ne recueille pas de données. mongod écrit toujours des opérations plus longues que le seuil de slowOpThresholdMs à son journal. C'est la valeur par défaut profiler.
  • niveau 1 - recueille des données de profilage pour les opérations lentes seulement. Par défaut, les opérations lentes sont celles qui sont plus lentes que 100 millisecondes. Vous pouvez modifier le seuil pour les opérations "lentes" avec l'option d'exécution slowOpThresholdMs ou la commande setParameter. Voir la section Spécifier le seuil pour les opérations lentes pour plus d'informations.
  • Niveau 2 - collecte des données de profilage pour tous opérations de base de données.

pour voir le niveau de profilage de la base de données, utilisez

db.getProfilingLevel()

et de voir le statut

db.getProfilingStatus()

Pour changer le statut de profilage, utilisez la commande

db.setProfilingLevel(level, milliseconds)

level se réfère au niveau de profilage et milliseconds est le ms dont la durée des requêtes doit être enregistrée. Pour arrêter la journalisation, utilisez

db.setProfilingLevel(0)

la requête à regarder dans la collection de profil de 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 } )
19
répondu student 2017-11-03 16:06:19

les données du profileur sont écrites à une collection dans votre base de données, pas à fichier. Voir http://docs.mongodb.org/manual/tutorial/manage-the-database-profiler/

je recommande d'utiliser le service MMS de 10gen, et d'y alimenter les données du profileur de développement, où vous pouvez les filtrer et les trier dans L'interface utilisateur.

7
répondu Hans N. Hjort 2013-03-04 14:56:40

une fois que le niveau de profilage est défini en utilisant db.setProfilingLevel(2) .

la commande ci-dessous affichera la dernière requête exécutée.

Vous pouvez changer la limite (5) aussi bien pour voir moins/plus de requêtes.

$nin-filtrera le profil et indexera les requêtes

Aussi, utilisez la projection de requête {'query': 1} pour voir seulement le champ de requête

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

des Journaux avec seulement requête de projection

db.system.profile.find(
{ 
    ns: { 
        $nin : ['meteor.system.profile','meteor.system.indexes']
    }
},
{'query':1}
).limit(5).sort( { ts : -1 } ).pretty()
7
répondu Faiz Mohamed Haneef 2015-11-14 07:18:14

je pense que bien que non élégant, le oplog pourrait pourrait être partiellement utilisé à cette fin: il enregistre toutes les Écritures - mais pas les lectures...

vous devez activer replicatoon, si j'ai raison. Les informations sont de cette réponse de cette question: Comment écouter les changements à une collection MongoDB?

4
répondu ppeterka 2017-05-23 12:10:31

définir profilinglevel à 2 est une autre option pour enregistrer toutes les requêtes.

4
répondu Shnkc 2013-11-27 15:58:01

je vous recommande vivement de visiter mongosniff. Cet outil peut faire tout ce que vous voulez et plus encore. En particulier, il peut aider à diagnostiquer les problèmes avec les systèmes mongo à grande échelle et la façon dont les requêtes sont acheminées et d'où elles proviennent, car il fonctionne en écoutant votre interface réseau pour toutes les communications liées à mongo.

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

3
répondu Daniel Williams 2013-12-17 20:33:20

j'ai écrit un script qui imprimera le système.journal de profil en temps réel les requêtes viennent. Vous devez activer la journalisation d'abord comme indiqué dans d'autres réponses. J'en avais besoin car J'utilise le sous-système Windows Pour Linux, pour lequel tail ne fonctionne toujours pas.

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

1
répondu user3413723 2016-12-14 14:53:18