Die Frage ist so einfach wie einfach ... Wie protokollieren Sie alle Abfragen in einer "tail" -fähigen Protokolldatei in Mongodb?
Ich habe versucht:
- Festlegen der Profilierungsstufe
- Einstellen des langsamen ms-Parameters startet
- mongod mit der Option -vv
Das /var/log/mongodb/mongodb.log zeigt immer nur die aktuelle Anzahl aktiver Verbindungen an ...
mongod -vv
arbeitete für michAntworten:
Sie können alle Abfragen protokollieren:
Quelle: http://docs.mongodb.org/manual/reference/method/db.setProfilingLevel/
db.setProfilingLevel(2)
bedeutet "alle Operationen protokollieren".quelle
db.setProfilingLevel(2,-1)
system.profile
Sammlung.db.system.profile.find().pretty()
gibt nichts für michAm Ende habe ich dieses Problem gelöst, indem ich mongod wie folgt gestartet habe (gehämmert und hässlich, ja ... aber funktioniert für die Entwicklungsumgebung):
Dies aktiviert die Profilerstellung und legt den Schwellenwert für "langsame Abfragen" auf 1 ms fest, wodurch alle Abfragen als "langsame Abfragen" in der Datei protokolliert werden:
Jetzt erhalte ich fortlaufende Protokollausgaben mit dem folgenden Befehl:
Ein Beispielprotokoll:
quelle
profile=1
undslowms=1
Zeilen sein/etc/mongodb.conf
?--profile=2
zu/etc/mongodb.conf
laut offiziellen Mongo docs, alle alle Operationen werden protokolliert.db.setProfilingLevel(level,slowms)
. Zum Beispiel:db.setProfilingLevel(2,1)
setzt den Pegel auf 2 und den langsamen Abfrageschwellenwert auf 1 ms.Weil es die erste Antwort von Google ist ...
Für Version 3
http://docs.mongodb.org/manual/reference/method/db.setLogLevel/
quelle
MongoDB
hat eine ausgefeilte Funktion der Profilerstellung. Die Protokollierung erfolgt in dersystem.profile
Sammlung. Die Protokolle können gesehen werden von:Es gibt 3 Protokollierungsstufen ( Quelle ):
Verwenden Sie, um zu sehen, auf welcher Profilebene die Datenbank ausgeführt wird
und um den Status zu sehen
Verwenden Sie den Befehl, um den Profilstatus zu ändern
Wobei
level
sich auf die Profilebene bezieht undmilliseconds
die ms ist, von welcher Dauer die Abfragen protokolliert werden müssen. Verwenden Sie zum Deaktivieren der ProtokollierungDie Abfrage, die in der Systemprofilsammlung nach allen Abfragen gesucht werden soll, die länger als eine Sekunde gedauert haben, sortiert nach absteigendem Zeitstempel
quelle
Ich habe ein Befehlszeilen-Tool erstellt, um die Profiler-Aktivität zu aktivieren und die Protokolle auf "tail " -fähige Weise anzuzeigen : "mongotail" .
Das interessantere Feature (auch wie
tail
) ist es jedoch, die Änderungen in "Echtzeit" mit der-f
Option zu sehen und gelegentlich das Ergebnis mitgrep
zu filtern , um eine bestimmte Operation zu finden.Siehe Dokumentation und Installationsanweisungen unter: https://github.com/mrsarm/mongotail
quelle
Sobald die Profilstufe mit eingestellt ist
db.setProfilingLevel(2)
.Der folgende Befehl gibt die zuletzt ausgeführte Abfrage aus.
Sie können auch das Limit (5) ändern, um weniger / mehr Abfragen anzuzeigen.
$ nin - filtert Profil- und Indexabfragen heraus
. Verwenden Sie außerdem die Abfrageprojektion {'query': 1}, um nur das Abfragefeld anzuzeigen
Protokolle mit nur Abfrageprojektion
quelle
Wenn Sie möchten, dass die Abfragen in der Mongodb-Protokolldatei protokolliert werden, müssen Sie sowohl die Protokollstufe als auch die Profilerstellung festlegen, z. B.:
(Siehe https://docs.mongodb.com/manual/reference/method/db.setLogLevel )
Wenn Sie nur die Profilerstellung festlegen, werden die Abfragen nicht in der Datei protokolliert, sodass Sie sie nur von abrufen können
quelle
Die Profilerdaten werden in eine Sammlung in Ihrer Datenbank geschrieben und nicht in eine Datei. Siehe http://docs.mongodb.org/manual/tutorial/manage-the-database-profiler/
Ich würde empfehlen, den MMS- Dienst von 10gen zu verwenden und dort Daten des Entwicklungsprofilers einzugeben , wo Sie sie in der Benutzeroberfläche filtern und sortieren können.
quelle
Ich denke , dass zwar nicht elegant, die oplog könnte teilweise für diesen Zweck verwendet werden: sie alle die Schreibvorgänge protokolliert - aber nicht das liest ...
Sie müssen die Replikation aktivieren, wenn ich recht habe. Die Informationen stammen aus dieser Antwort aus dieser Frage: Wie kann man auf Änderungen an einer MongoDB-Sammlung achten?
quelle
Das Festlegen der Profilebene auf 2 ist eine weitere Option zum Protokollieren aller Abfragen.
quelle
Ich empfehle mongosniff. Dieses Dosenwerkzeug kann alles tun, was Sie wollen und mehr. Insbesondere kann es dabei helfen, Probleme mit größeren Mongo-Systemen zu diagnostizieren und zu ermitteln, wie Abfragen weitergeleitet werden und woher sie kommen, da es auf Ihre Netzwerkschnittstelle für alle mongo-bezogenen Kommunikationen wartet.
http://docs.mongodb.org/v2.2/reference/mongosniff/
quelle
Ich habe ein Skript geschrieben, das das system.profile-Protokoll in Echtzeit ausgibt, wenn Abfragen eingehen. Sie müssen zuerst die Protokollierung aktivieren, wie in anderen Antworten angegeben. Ich brauchte das, weil ich Windows Subsystem für Linux verwende, für das Tail immer noch nicht funktioniert.
https://github.com/dtruel/mongo-live-logger
quelle
Dann
quelle
Dies wurde vor langer Zeit gefragt, aber dies kann immer noch jemandem helfen:
Der MongoDB-Profiler protokolliert alle Abfragen in der begrenzten Sammlung system.profile . Siehe dies: Datenbankprofiler
--profile=2
Option , die alle Abfragen aktiviert die Protokollierung oder wenn mongod Instanzen bereits ausgeführt wird , von mongoshell, führtedb.setProfilingLevel(2)
nach der Auswahl Datenbank. (es kann überprüft werden durchdb.getProfilingLevel()
, welche zurückkehren sollte2
)tail -f ../logs/mongologs.txt
. Dieses Skript kann im Hintergrund gestartet werden und protokolliert alle Vorgänge auf der Datenbank in der Datei.Mein Code für den abschließbaren Cursor für die system.profile-Auflistung befindet sich in nodejs. Es protokolliert alle Vorgänge zusammen mit Abfragen, die in jeder Sammlung von MyDb auftreten:
Informationen zum abschließbaren Cursor in Python mit Pymongo finden Sie im folgenden Code, der nach MyCollection filtert und nur Operationen einfügt:
Hinweis: Der Cursor "Tailable" funktioniert nur mit begrenzten Sammlungen. Es kann nicht verwendet werden, um Vorgänge in einer Sammlung direkt zu protokollieren. Verwenden Sie stattdessen den Filter:
'ns': 'MyDb.MyCollection'
Hinweis: Ich verstehe, dass die oben genannten Nodejs und der Python-Code für einige möglicherweise keine große Hilfe sind. Ich habe gerade die Codes als Referenz bereitgestellt.
Verwenden Sie diesen Link, um eine Dokumentation für den anpassbaren Cursor in den Mongodb-Treibern Ihrer Sprache / Treiberauswahl zu finden
Eine weitere Funktion, die ich nach diesem Logrotate hinzugefügt habe .
quelle
Probieren Sie dieses Paket aus, um alle Abfragen (ohne Oplog-Operationen) zu bearbeiten: https://www.npmjs.com/package/mongo-tail-queries
(Haftungsausschluss: Ich habe dieses Paket genau für diesen Bedarf geschrieben)
quelle