原文地址:伍仪洲的博客

介绍

为什么要进行监控状态,因为在实际的情况中可能会发生一下无法预计的情况,比如阻塞的问题,阻塞的原因会有很多种情况造成,如果当我们查询文档的时候发生了阻塞,那么就会影响到后面的操作,甚至无法对后面的操作进行响应。

我们可以通过监控很快速的找到到底是哪里出了问题,这样有助于我们快速定位所在的问题,从而得到解决。

Mongodb官方提供了三种用语分析Mongodb的方式:

  1. Mongodb自带的监控工具:用于提供数据库活动的实时报告
  2. 数据库命令:以更真实的情况返回数据库状态的统计信息
  3. 第三方平台托管监控

Mongodb自带监控工具

mongostat

mongostat是官方随同mongodb下载包中一同下载的,你可以找到安装目录或者解压目录进行使用。

我们可以通过mongostat --help()进行查询可用选项,也可以通过官方文档进行查询。

Mongostat默认所返回的信息都是基于秒为单位,比如返回的insert指的是每秒插入数据库的对象数,而如果我们限制了返回时间,那么这个返回的结果是基于限制时间的平均值。

-O 和 -o

这两个选项功能非常实用,按照正常的情况,Mongostat输出的报告会有很多我们不需要的列,所以我们可以通过-o来实现,这个选项设置后只会包含我们选择想要列,并且这个选项可以重新命名列的名字,除此之外-o-O还可以添加一些服务器状态到报表中,可以参考ServerStatus

默认的mongostat输出的内容大概如下,并且每秒钟都会返回一个状态:

insert query update delete getmore command flushes mapped vsize   res faults qrw arw net_in net_out conn                time
    *0    *0     *0     *0       0     2|0       0     0B 2.39G 14.0M      0 0|0 0|0   286b   13.8k    1 Aug 24 17:34:17.615
    *0    *0     *0     *0       0     1|0       0     0B 2.39G 14.0M      0 0|0 0|0   285b   13.7k    1 Aug 24 17:34:18.618
    *0    *0     *0     *0       0     2|0       0     0B 2.39G 14.0M      0 0|0 0|0   286b   13.8k    1 Aug 24 17:34:19.617
    *0    *0     *0     *0       0     1|0       0     0B 2.39G 14.0M      0 0|0 0|0   285b   13.8k    1 Aug 24 17:34:20.617

下面的代码选项是重命名了insert列为cr,并只显示insert,query,update:

$ mongostat --host localhost -o 'insert=cr,query,update'

返回后的文档大概如下:
cr query update
*0    *0     *0
*0    *0     *0
*0    *0     *0
*0    *0     *0

-O选项除了输出默认的列之外,可以重命名列名,还可以添加ServerStatus一些字段输出到报表,比如插入文档的总数、主机地址、版本号等信息。

$ mongostat --host localhost -O 'insert=cr,host,version'

返回后的文档大概如下:

cr query update delete getmore command flushes mapped vsize   res faults qrw arw net_in net_out conn                time cr            host version
*0    *0     *0     *0       0     2|0       0     0B 2.39G 14.0M      0 0|0 0|0   286b   13.8k    2 Aug 24 17:51:34.031 *0 localhost:27040   3.4.6
*0    *0     *0     *0       0     1|0       0     0B 2.39G 14.0M      0 0|0 0|0   285b   13.8k    2 Aug 24 17:51:35.032 *0 localhost:27040   3.4.6
*0    *0     *0     *0       0     2|0       0     0B 2.39G 14.0M      0 0|0 0|0   286b   13.8k    2 Aug 24 17:51:36.032 *0 localhost:27040   3.4.6

--rowcount

--rowcount可以控制mongostat返回报表的频率,--rowcount接受的第一个参数为返回的次数,第二个参数是多少秒生成一次报表并返回。

比如我想每五秒返回一次报表,共返回十次:

$ mongostat --rowcount 10 5

--discover

监控副本集或分片的所有成员的统计信息。

mongotop

mongotop可以监控数据库或者副本集的成员中哪个集合最为繁忙。

$ mongotop --host localhost:27030

返回大概如下内容:

                  ns    total    read    write    2017-08-25T20:50:06+08:00
  admin.system.roles      0ms     0ms      0ms
admin.system.version      0ms     0ms      0ms
   local.startup_log      0ms     0ms      0ms
local.system.replset      0ms     0ms      0ms
           test.test      0ms     0ms      0ms

数据库命令

数据库命令可以提供比Mongodb自带的监控工具提供更细微的信息,如果上面的方法无法帮你定位到问题所在,你可以试试下面的数据库命令来操作问题的所在。

db.currentOp

db.currentOp()方法可以列出数据中所有正在进行的所有操作,我们可以通过返回的信息中几个比较重要的字段来找出问题所在。

opid: 操作的ID号,可以通过db.killOp()方法来结束进程,就像系统命令中的PID。

active: 表示该操作当前是否还在运行。

secs_running:这个字段非常重要,我们可以根据此字段判断哪个操作进行了阻塞。

op:操作的类型,比如是查询,可能显示的是query。

desc:表示当前操作在日志中的前缀,我们可以根据此前缀在日志中快速定位。

除此之外,我们还可以过滤参数,得到我们只想要的结果,下面是过滤其他不是当前正在查询的操作。

db.currentOp({op: 'query'});

db.serverStatus

db.serverStatus()方法返回数据库状态的一般概述,详细说明磁盘使用情况,内存使用,连接,日记记录和索引访问。

db.stats db.test.stats rs.status

db.stats()方法返回当前数据库的信息,其中objects就代表的是当前数据库所含的所有文档数量。

db.test.stats()方法返回集合的信息

rs.status()返回当前副本集的信息

参考

MongoDB权威指南(第2版)

Mongodb Docs

Mongodb 监测的更多相关文章

  1. MongoDB创建表步骤,Mongo常用的数据库操作命令,查询,添加,更新,删除_MongoDB 性能监测

    ->use Admin         (切换到创建用户) ->db.TestDb          (创建数据库) ->db.addUser(“userName”,”Pwd”)   ...

  2. MongoDB高可用集群配置的方案

    >>高可用集群的解决方案 高可用性即HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性. ...

  3. MongoDB学习笔记—Linux下搭建MongoDB环境

    1.MongoDB简单说明 a MongoDB是由C++语言编写的一个基于分布式文件存储的开源数据库系统,它的目的在于为WEB应用提供可扩展的高性能数据存储解决方案. b MongoDB是一个介于关系 ...

  4. MongoDB Replica Set 选举过程

    什么是选举? 选举是副本集选择某个成员成为primary的过程.primary是一个副本集中唯一能够接收写操作的成员. 下面的事件能够引发一次选举: 第一次初始化一个副本集 Primary失效.rep ...

  5. mongodb中的副本集搭建实践

    准备运行1个主节点,2个从节点,从节点中其中是一个是仲裁节点(Arb). --oplogSize --oplogSize --oplogSize 其中application是副本集的名称,节点必须相同 ...

  6. MongoDB Replica Set 选举过程

    Replica Set 选举过程 心跳检测 假设我们有三个节点的replica sets:X,Y和Z节点.在replica sets结构中,这三个节点每2秒会各自向其它两个节点发送一个心跳检测请求.比 ...

  7. MongoDB数据访问[C#]附源码下载(查询增删改) 转载

    安装完MongoDBhttp://localhost:28017/监测是否成功! vs 2008 C# MongoDB 源代码下载地址:http://download.csdn.net/source/ ...

  8. mongoDB知识总结

    官方说明文档:https://docs.mongodb.com/manual/mongo/ 1 NoSQL 简介 NoSQL,全称是”Not Only Sql”,指的是非关系型的数据库(相对于关系型数 ...

  9. MongoDB 复制集(二) 选举 自动故障切换

    一   复制集的高可用性简介       复制集通过故障自动切换来实现高可用性,当主节点出现故障的时候,从节点可以通过选举成为主节点,而这个过程在大多数当情况下是自动进行的,不需要手动干预.在某些情况 ...

随机推荐

  1. 终于等到你!MobileTest免费公测,华为带你走出安卓适配大坑

    一.安卓适配之痛真的无解吗? Android平台的诞生对智能手机的普及功不可没,但设备繁多.品牌众多.版本各异,芯片.摄像头.分辨率不统一等等,这些都逐渐成为Android系统发展的障碍,碎片化严重不 ...

  2. jQuery点击缩略图切换大图代码

    很多网站上都会有点击缩略图切换成大图的效果,下面来分享一下它的源码 还是先来看效果截图 运行文件 然后点击下一张 下面分享源代码 html文件 <!DOCTYPE html PUBLIC &qu ...

  3. CentOS-7.2安装Ambari-2.4.2

    一,Ambari 是什么? Ambari 跟 Hadoop 等开源软件一样,也是 Apache Software Foundation 中的一个项目,并且是顶级项目.目前最新的发布版本是 2.4.2. ...

  4. 华为OJ之放砝码

    题目描述: 现有一组砝码,重量互不相等,分别为m1.m2--mn:他们可取的最大数量分别为x1.x2--xn.现在要用这些砝码去称物体的重量,问能称出多少中不同的重量. 注: 称重重量包括0: 要对输 ...

  5. 【samba】samba 用户权限配置(转)

    首先要保证你的samba安装并配置好,关于安装和配置samba请参考此文章 http://blog.csdn.net/linglongwunv/archive/2010/01/19/5212875.a ...

  6. 解决 lispbox macOS 不兼容问题

    误打误撞,解决了很重要的入门级问题,简要记录下. lispbox 官网末尾说目前暂不兼容 10.4 以上系统: TODO: Compile on Mac OS X 10.4, for compatab ...

  7. Redis-位图法实现简单统计

    比如一个网站有1亿个用户, 现在要统计一周内连续登录的用户 方法: 可以用一个字节8个位表示7个人, 首位不算固定为0, 若某人周一登录则置为1, 没登录则为0 127.0.0.1:6379> ...

  8. [技术] OIer的STL入门教程

    注: 本文主要摘取STL在OI中的常用技巧应用, 所以可能会重点说明容器部分和算法部分, 且不会讨论所有支持的函数/操作并主要讨论 C++11 前支持的特性. 如果需要详细完整的介绍请自行查阅标准文档 ...

  9. Classy(排序)

    Description In his memoir So, Anyway. . ., comedian John Cleese writes of the class di erence betwee ...

  10. 双向循环链表(C语言描述)(一)

    双向循环链表是链表的一种,它的每个节点也包含数据域和指针域.为了方便程序维护,可以单独为数据域定义一种数据类型,这里以整型为例: typedef int LinkedListData; 双向循环链表( ...