Как мы можем отслеживать запросы mongoDB?

Вопрос: Я просто хотел знать, есть ли способ отслеживать запросы mongoDB. Я пробовал использовать функции объяснения, предоставляемые оболочкой mongo. Но очень тяжело вручную отслеживать каждый запрос. Я использую мангуст как ODM. Тот, который я пробовал: db.customer.find({},{name:1, active:1}).explain() Я получил объект с планом запроса, временем и многими другими вещами. Лучший ответ: Mongoose из коробки поддерживает только

Вопрос:

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

Тот, который я пробовал:

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

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

Лучший ответ:

Mongoose из коробки поддерживает только базовую отладку:

mongoose.set(‘debug’, true);

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

Есть несколько nodejs libs для измерения времени выполнения различных блоков кода и производительности приложения:

Ответ №1

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

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

Ответ №2

Вам нужен режим отладки:

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

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(); }); Ответ №3

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

Ответ №4

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

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

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

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

0: нет профилирования, 1: медленные операции профиля и 3: профилировать всю операцию

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

Оцените статью
Добавить комментарий