2015-08-15 2 views
1

Я просто хотел узнать, есть ли способ отслеживать запросы mongoDB. Я пробовал использовать функции объяснения, предоставляемые оболочкой mongo. Но очень тяжело вручную отслеживать каждый запрос. Я использую мангуст как ODM.Как мы можем отслеживать запросы mongoDB?

Тот, который я попытался это:

db.customer.find({},{name:1, active:1}).explain() 

я получил объект с планом запроса, временем, затраченным и многими другими вещами.

ответ

3

Mongoose вне коробки поддерживает только основные отладки:

mongoose.set('debug', true); 

Но это не измеряет время запроса так почти не использовать для профилирования. С мангуста 4.* Вы можете использовать промежуточное программное обеспечение для измерения времени запроса: http://mongoosejs.com/docs/middleware.html

Есть некоторые nodejs ЛИЭСА для измерения времени выполнения различных блоков коды и производительности приложений:

1

Что вам нужно debugging mode:

Все выполненные методы сбора будет регистрировать выпуск своих аргументов в консоль

mongoose.set('debug', true); 

Или вы могли бы добавить функцию обратного вызова в качестве третьего аргумента, что позволяет получить дополнительная информация:

mongoose.set('debug', function (collection, method, query, doc [, options]) { 
    console.log(/* your log format */); 
}); 

MongoDB также обеспечивает мониторинг вашего mongod сервера в облаке с MMS

EDIT: для сохранения запросов в формате CSV можно использовать csv-write-stream модуль на следующем примере:

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(); 
}); 
+0

Я хочу, чтобы он был в формате, чтобы я мог проанализировать его позже, например csv. – Rudra

+0

Я обновил свой ответ. –

0

Я нашел лучший способ от этого, используя mongoDB profiler. Он записывает результат профиля в коллекцию под названием system.profile, которую можно запросить как другие коллекции и также можно экспортировать.

Есть два способа включения профилировщика:

  1. Включение профилировщика для всех баз данных сразу
  2. Включение профилировщика для конкретной базы данных.

следующие уровни профилирования доступны:

0: Нет профилирования, 1: Разрез медленных операций и 3: профиль всем операциям

См: db.setProfilingLevel(2) и db.getProfilingStatus()

1

Используйте db.setProfilingLevel() для регистрации медленных запросов или всех запросов. Затем используйте ElasticSearch + Kibana + Logstash для анализа и мониторинга запросов mongoDB.

4

Число операций чтения (запроса, getmore) и записи (вставки, удаления, обновления) s указаны в opcounters в соответствии с командой serverStatus. Помните, что вы также должны соотнести эти статистические данные пропускной способности вместе с метриками насыщенности ресурса, такими как currentQueue.readers и currentQueue.writers (также часть serverStatus).

Here подробно описаны различные способы сбора необходимых показателей: с помощью утилиты, команд или инструментов мониторинга, интегрированных с MongoDB (в той же серии вы также найдете всю статистику, необходимую для правильного мониторинга MongoDB).

Смежные вопросы