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.

3
Rudra 15 Aug. 2015 im 19:55

5 Antworten

Beste Antwort

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:

4
Andrew Andrew 21 Aug. 2015 im 16:53

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(); 
});
2
Artem Baranovskii 15 Aug. 2015 im 18:37

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

4
J.M. 1 Juni 2016 im 09:10

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.

1
gzc 21 Aug. 2015 im 16:25