Ich wollte nur wissen, ob es eine Möglichkeit gibt, MongoDB-Abfragen zu überwachen. Ich habe es mit der Erklärungsfunktion der Mongo-Shell versucht. Es ist jedoch sehr hektisch, jede einzelne Abfrage manuell zu verfolgen. Ich benutze Mungo als ODM.
Das, was ich versucht habe, ist:
db.customer.find({},{name:1, active:1}).explain()
Ich habe ein Objekt mit dem Abfrageplan, der benötigten Zeit und vielen weiteren Dingen erhalten.
5 Antworten
Mongoose Out-of-the-Box unterstützt nur das grundlegende Debuggen:
mongoose.set('debug', true);
Dies misst jedoch nicht die Abfragezeit und ist daher für die Profilerstellung fast sinnlos. Seit Mungo 4. * können Sie Middleware verwenden, um die Anforderungszeit zu messen: http://mongoosejs.com/docs/middleware.html
Es gibt einige NodeJS-Bibliotheken zum Messen der Ausführungszeit verschiedener Codeblöcke und der App-Leistung:
Was Sie benötigen, ist der Debugging-Modus:
Alle ausgeführten Erfassungsmethoden protokollieren die Ausgabe ihrer Argumente in Ihrer Konsole
mongoose.set('debug', true);
Oder Sie können einen Rückruf als drittes Argument hinzufügen, mit dem Sie zusätzliche Informationen erhalten:
mongoose.set('debug', function (collection, method, query, doc [, options]) {
console.log(/* your log format */);
});
MongoDB bietet auch die Überwachung Ihres Mongod-Servers in einer Cloud mit MMS
BEARBEITEN: Um Ihre Abfragen in csv zu speichern, können Sie csv-write verwenden -stream Modul mit folgendem Beispiel:
var csvWriter = require('csv-write-stream');
var fs = require('fs');
var writer = csvWriter();
// create write stream to `queries.csv` file
writer.pipe(fs.createWriteStream('queries.csv'));
mongoose.set('debug', function (collection, method, query, doc [, options]) {
writer.write({collection: collection, method: method, query: query, doc: JSON.strinfigy(doc)});
});
// close stream on mongoose disconnected
mongoose.connection.on('disconnected', function () {
writer.end();
});
Die Anzahl der Lese- (Abfrage, Getmore) und Schreibvorgänge (Einfügen, Löschen, Aktualisieren) wird in opcounters unter dem Befehl serverStatus . Denken Sie daran, dass Sie diese Durchsatzstatistiken auch mit Ressourcen-Sättigungsmetriken wie currentQueue.readers
und currentQueue.writers
(ebenfalls Teil von serverStatus ) korrelieren sollten.
Hier werden die verschiedenen Möglichkeiten zum Sammeln der von Ihnen verwendeten Metriken beschrieben Bedarf: Verwenden von Dienstprogrammen, Befehlen oder Überwachungstools, die in MongoDB integriert sind (in derselben Serie finden Sie auch alle Statistiken, die Sie zur ordnungsgemäßen Überwachung von MongoDB benötigen).
Verwenden Sie db.setProfilingLevel()
, um langsame Abfragen oder alle Abfragen zu protokollieren. Verwenden Sie dann ElasticSearch + Kibana + Logstash, um MongoDB-Abfragen zu analysieren und zu überwachen.
Ich habe einen besseren Weg gefunden, dies mit dem mongoDB-Profiler . Es schreibt das Profilergebnis in eine Sammlung mit dem Namen system.profile
, die als andere Sammlungen abgefragt und auch exportiert werden kann.
Es gibt zwei Möglichkeiten, den Profiler zu aktivieren:
- Aktivieren Sie den Profiler für alle Datenbanken gleichzeitig
- Aktivieren Sie den Profiler für eine bestimmte Datenbank.
Folgende Profilierungsstufen stehen zur Verfügung:
0: Keine Profilerstellung, 1: Profil langsame Operationen und 3: Profil alle Operationen
Siehe: db.setProfilingLevel (2) und db.getProfilingStatus ()