La question est aussi basique que simple ... Comment consigner toutes les requêtes dans un fichier journal capable de "queue" dans mongodb?
J'ai essayé:
- définition du niveau de profilage
- réglage du paramètre ms lent démarrage
- mongod avec l'option -vv
Le fichier /var/log/mongodb/mongodb.log continue d'afficher uniquement le nombre actuel de connexions actives ...
mongod -vv
travaillé pour moiRéponses:
Vous pouvez enregistrer toutes les requêtes:
Source: http://docs.mongodb.org/manual/reference/method/db.setProfilingLevel/
db.setProfilingLevel(2)
signifie «consigner toutes les opérations».la source
db.setProfilingLevel(2,-1)
system.profile
collection.db.system.profile.find().pretty()
ne donne rien pour moiJ'ai fini par résoudre cela en démarrant mongod comme ça (martelé et moche, ouais ... mais fonctionne pour l'environnement de développement):
Cela active le profilage et définit le seuil des «requêtes lentes» sur 1 ms, ce qui entraîne la journalisation de toutes les requêtes en tant que «requêtes lentes» dans le fichier:
Maintenant, j'obtiens des sorties de journal continues en utilisant la commande:
Un exemple de journal:
la source
profile=1
et ?slowms=1
/etc/mongodb.conf
--profile=2
à/etc/mongodb.conf
selon docs officiels mongo, toutes toutes les opérations seront enregistrées.db.setProfilingLevel(level,slowms)
. Par exemple:db.setProfilingLevel(2,1)
définira le niveau sur 2 et le seuil de requête lente sur 1 ms.Parce que sa première réponse google ...
Pour la version 3
http://docs.mongodb.org/manual/reference/method/db.setLogLevel/
la source
MongoDB
a une fonction sophistiquée de profilage. La journalisation se produit dans lasystem.profile
collection. Les journaux peuvent être consultés à partir de:Il existe 3 niveaux de journalisation ( source ):
Pour voir le niveau de profilage dans lequel la base de données s'exécute, utilisez
et pour voir le statut
Pour modifier l'état du profilage, utilisez la commande
Où
level
fait référence au niveau de profilage etmilliseconds
correspond à la durée en ms pendant laquelle les requêtes doivent être enregistrées. Pour désactiver la journalisation, utilisezLa requête à rechercher dans la collection de profils système pour toutes les requêtes qui ont duré plus d'une seconde, classées par horodatage décroissant, sera
la source
J'ai créé un outil en ligne de commande pour activer l'activité du profileur et voir les logs de manière "tail" : "mongotail" .
Mais la fonctionnalité la plus intéressante (comme
tail
) est de voir les changements en "temps réel" avec l'-f
option, et de filtrer occasionnellement le résultat avecgrep
pour trouver une opération particulière.Voir la documentation et les instructions d'installation sur: https://github.com/mrsarm/mongotail
la source
Une fois le niveau de profilage défini, utilisez
db.setProfilingLevel(2)
.La commande ci-dessous imprimera la dernière requête exécutée.
Vous pouvez également modifier la limite (5) pour voir moins / plus de requêtes.
$ nin - filtrera les requêtes de profil et d'indexation
. Utilisez également la projection de requête {'query': 1} pour afficher uniquement le champ de requête
Journaux avec uniquement la projection de requête
la source
si vous souhaitez que les requêtes soient enregistrées dans le fichier journal mongodb, vous devez définir à la fois le niveau de journalisation et le profilage, comme par exemple:
(voir https://docs.mongodb.com/manual/reference/method/db.setLogLevel )
Si vous ne définissez que le profilage, les requêtes ne sont pas enregistrées dans un fichier, vous ne pouvez donc l'obtenir qu'à partir de
la source
Les données du profileur sont écrites dans une collection de votre base de données, pas dans un fichier. Voir http://docs.mongodb.org/manual/tutorial/manage-the-database-profiler/
Je recommanderais d'utiliser le service MMS de 10gen et les données du profileur de développement de flux là-bas, où vous pouvez les filtrer et les trier dans l'interface utilisateur.
la source
Je pense que sans être élégant, l' oplog pourrait être partiellement utilisé à cette fin: il enregistre toutes les écritures - mais pas les lectures ...
Vous devez activer la réplication, si j'ai raison. Les informations proviennent de cette réponse à cette question: Comment écouter les modifications apportées à une collection MongoDB?
la source
La définition de profilinglevel sur 2 est une autre option pour consigner toutes les requêtes.
la source
Je recommande de vérifier 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 à plus grande échelle, la façon dont les requêtes sont acheminées et leur provenance, car il fonctionne en écoutant votre interface réseau pour toutes les communications liées à mongo.
http://docs.mongodb.org/v2.2/reference/mongosniff/
la source
J'ai écrit un script qui imprimera le journal system.profile en temps réel lorsque les requêtes arrivent. Vous devez d'abord activer la journalisation comme indiqué dans d'autres réponses. J'en avais besoin parce que j'utilise le sous-système Windows pour Linux, pour lequel la queue ne fonctionne toujours pas.
https://github.com/dtruel/mongo-live-logger
la source
ensuite
la source
Cela a été demandé il y a longtemps, mais cela peut encore aider quelqu'un:
Le profileur MongoDB enregistre toutes les requêtes dans le système de collecte plafonné . Voir ceci: profileur de base de données
--profile=2
option qui permet de journaliser toutes les requêtes OU si les instances mongod sont déjà en cours d'exécution, à partir de mongoshell, exécutezdb.setProfilingLevel(2)
après avoir sélectionné la base de données. (il peut être vérifié pardb.getProfilingLevel()
, qui devrait revenir2
)tail -f ../logs/mongologs.txt
. Ce script peut être lancé en arrière-plan et il enregistrera toutes les opérations sur la base de données dans le fichier.Mon code pour le curseur disponible pour la collection system.profile est dans nodejs; il enregistre toutes les opérations ainsi que les requêtes se produisant dans chaque collection de MyDb:
Pour le curseur disponible en python utilisant pymongo, reportez-vous au code suivant qui filtre pour MyCollection et insère uniquement l'opération:
Remarque: le curseur disponible ne fonctionne qu'avec les collections plafonnées. Il ne peut pas être utilisé pour enregistrer directement des opérations sur une collection, utilisez plutôt un filtre:
'ns': 'MyDb.MyCollection'
Remarque: je comprends que les nodejs et le code python ci-dessus peuvent ne pas être d'une grande aide pour certains. Je viens de fournir les codes pour référence.
Utilisez ce lien pour trouver de la documentation sur le curseur disponible dans votre langue / choix de pilote Mongodb Drivers
Une autre fonctionnalité que j'ai ajoutée après ce logrotate .
la source
Essayez ce package pour suivre toutes les requêtes (sans opérations oplog): https://www.npmjs.com/package/mongo-tail-queries
(Avertissement: j'ai écrit ce package exactement pour ce besoin)
la source