【问题标题】:How can we monitor mongoDB queries?我们如何监控 mongoDB 查询?
【发布时间】:2015-11-08 17:04:31
【问题描述】:

我只是想知道是否有可能的方法来监控 mongoDB 查询。 我尝试使用 mongo shell 提供的解释功能。但是手动跟踪每个查询非常忙碌。 我正在使用 mongoose 作为 ODM。

我试过的是:

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

我得到了一个带有查询计划、所用时间和更多内容的对象。

【问题讨论】:

    标签: javascript performance mongodb mongoose


    【解决方案1】:

    Mongoose 开箱即用仅支持基本调试:

    mongoose.set('debug', true);
    

    但这并不能衡量查询时间,因此对于分析几乎没有用处。从 mongoose 4.* 开始,您可以使用中间件来测量请求时间: http://mongoosejs.com/docs/middleware.html

    有一些 nodejs 库可以测量不同代码块的执行时间和应用性能:

    【讨论】:

      【解决方案2】:

      读取(查询、获取更多)和写入(插入、删除、更新)操作的数量在 serverStatus 命令下的opcounters 中报告。 请记住,您还应该将这些吞吐量统计信息与资源饱和度指标相关联,例如 currentQueue.readerscurrentQueue.writers(也是 serverStatus 的一部分)。

      Here 详细介绍了收集所需指标的所有不同方法:使用实用程序、命令或与 MongoDB 集成的监控工具(在同一系列中,您还将找到正确监控 MongoDB 所需的所有统计信息)。

      【讨论】:

        【解决方案3】:

        你需要的是debugging mode:

        所有执行的收集方法都会将其参数的输出记录到您的控制台

        mongoose.set('debug', true);
        

        或者你可以添加回调作为第三个参数,让你获得额外的信息:

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

        MongoDB 还通过MMS 提供对云中 mongod 服务器的监控。

        编辑:要将您的查询保存在 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.stringify(doc)});   
        });
        
        // close stream on mongoose disconnected
        mongoose.connection.on('disconnected', function () {  
            writer.end();
        });
        

        【讨论】:

        • 我想要一种格式,以便我以后可以分析它,比如 csv。
        【解决方案4】:

        使用db.setProfilingLevel() 记录慢速查询或所有查询。然后,使用 ElasticSearch + Kibana + Logstash 来分析和监控 mongoDB 查询。

        【讨论】:

          【解决方案5】:

          我找到了一种更好的方法,即使用mongoDB profiler。它将配置文件结果写入一个名为system.profile 的集合中,该集合可以作为其他集合查询,也可以导出。

          启用分析器有两种方式:

          1. 一次性为所有数据库启用分析器
          2. 为特定数据库启用分析器。

          以下分析级别可用:

          0:无分析,1:分析慢操作,3:分析所有操作

          见:db.setProfilingLevel(2)db.getProfilingStatus()

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-07-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多