MongoDB 监控工具mongostat和mongotop的使用

 更新时间:2021年03月25日 09:55:55   作者:AsiaYe  
这篇文章主要介绍了MongoDB 监控工具mongostat和mongotop的使用方法,帮助大家更好的理解和学习使用MongoDB,感兴趣的朋友可以了解下

    MongoDB中自带两个监控的工具,分别是mongostat和mongotop,今天我们看看这两个工具的使用方法。

mongostat

mongostat工具提供了mongod和mongos的运行状态和数据,可以从mongostat工具的执行结果中获取如下信息:

[root@VM-0-14-centos ~]# mongostat --port=27018 -u "yeyz" --authenticationDatabase "admin" -p "123456" 
insert query update delete getmore command dirty used flushes vsize res qrw arw net_in net_out conn  set repl  time
 *0 *0 *0 *0 0 14|0 0.5% 0.6% 0 1.41G 59.0M 0|0 1|0 1.66k 83.8k 22 sharding_yeyz PRI Nov 19 11:42:08.431
 *0 *0 *0 *0 0 13|0 0.5% 0.6% 0 1.41G 59.0M 0|0 1|0 1.93k 71.7k 22 sharding_yeyz PRI Nov 19 11:42:09.434
 *0 *0 *0 *0 0 12|0 0.5% 0.6% 0 1.41G 59.0M 0|0 1|0 1.39k 70.5k 22 sharding_yeyz PRI Nov 19 11:42:10.433
 *0 *0 *0 *0 0 13|0 0.5% 0.6% 0 1.41G 59.0M 0|0 1|0 1.93k 71.8k 22 sharding_yeyz PRI Nov 19 11:42:11.433
 *0 *0 *0 *0 2 15|0 0.5% 0.6% 0 1.41G 59.0M 0|0 1|0 3.72k 74.0k 22 sharding_yeyz PRI Nov 19 11:42:12.432
 *0 *0 *0 *0 0 13|0 0.5% 0.6% 0 1.41G 59.0M 0|0 1|0 1.93k 71.8k 22 sharding_yeyz PRI Nov 19 11:42:13.432
 *0 *0 *0 *0 0 11|0 0.5% 0.6% 0 1.41G 59.0M 0|0 1|0 1.39k 70.4k 22 sharding_yeyz PRI Nov 19 11:42:14.433
 *0 *0 *0 *0 0 14|0 0.5% 0.6% 0 1.41G 59.0M 0|0 1|0 1.98k 72.6k 22 sharding_yeyz PRI Nov 19 11:42:15.434
 *0 *0 *0 *0 0 15|0 0.5% 0.6% 0 1.41G 59.0M 0|0 1|0 2.06k 137k 22 sharding_yeyz PRI Nov 19 11:42:16.431
 *0 *0 *0 *0 3 17|0 0.5% 0.6% 0 1.41G 59.0M 0|0 1|0 6.47k 77.0k 22 sharding_yeyz PRI Nov 19 11:42:17.432
insert query update delete getmore command dirty used flushes vsize res qrw arw net_in net_out conn  set repl  time
 *0 *0 *0 *0 0 14|0 0.5% 0.6% 0 1.41G 59.0M 0|0 1|0 2.23k 73.1k 22 sharding_yeyz PRI Nov 19 11:42:18.432
 *0 *0 *0 *0 0 16|0 0.5% 0.6% 0 1.41G 59.0M 0|0 1|0 2.49k 73.7k 22 sharding_yeyz PRI Nov 19 11:42:19.431
 *0 *0 *0 *0 0 11|0 0.5% 0.6% 0 1.41G 59.0M 0|0 1|0 1.39k 70.2k 22 sharding_yeyz PRI Nov 19 11:42:20.435

这里有必要将其中的某些关键列说明一下:

insert、query、update、delete 分别代表每秒的操作次数

getmore代表当前批量查询得到的文档个数,如果查询的文档多,mongodb会自动批量查询

command代表primary和secondary的节点指令个数,如果是在从库上执行,则代表从库执行的命令数据以及复制从库的其他实例的命令执行情况,二者通过|分割。

dirty代表wiretiger存储引擎的缓冲中脏字节的百分比。

used代表已经使用的wiretiger存储引擎缓存比例

flushed对于wireTiger存储引擎,表示触发检查点的次数;对于MMAPv1存储引擎,表示当前将数据写入磁盘的次数

vsize:程序应用的虚拟内存大小

res:当前已经使用的物理内存量,单位为Mb

qrw:等待读取的文档个数与等待写入的文档个数

arw:正在执行的读取文档个数与正在执行的写入文档个数

net_in|net_out  进出的网络流量

conn:当前连接数

需要注意的是mongostat是一个持续输出的命令,只要我们不手动终止,它会一直运行,输出到屏幕上。

mongotop

相比mongostat,mongotop输出的内容有限,来看下面的例子:

[root@VM-0-14-centos ~]# mongotop --port=27018 -u "yeyz" --authenticationDatabase "admin" -p "123456" 
2020-11-19T11:53:22.898+0800 connected to: 127.0.0.1:27018


     ns total read write 2020-11-19T11:53:23+08:00
    admin.system.keys 0ms 0ms 0ms    
   admin.system.roles 0ms 0ms 0ms    
   admin.system.users 0ms 0ms 0ms    
   admin.system.version 0ms 0ms 0ms    
config.cache.chunks.config.system.sessions 0ms 0ms 0ms    
  config.cache.chunks.test.test0 0ms 0ms 0ms    
  config.cache.chunks.test.test1 0ms 0ms 0ms    
   config.cache.collections 0ms 0ms 0ms    
   config.cache.databases 0ms 0ms 0ms    
   config.system.sessions 0ms 0ms 0ms 

ns,集合名字

total:读写花费时间(单位是ms)

read:读花费时间

write:写花费时间

mongotop输出的内容表示每个集合的每个表读写情况,它打印了每个库里面读写花费的时长,单位是ms,可以帮助快速定位读写瓶颈。

mongotop这个命令只运行一次,如果想每间隔一段时间,就运行一次,则可以使用:

mongotop 30

这样的写法,可以让mongotop命令每30s运行一次,这样可以持续的检测mongodb的运行状态。

除了这两个工具之外,还有一些其他的命令可以查看集群的状态:

  • db.serverStatus()
  • db.stats()
  • db.collStats()
  • rs.status()

下面分别解释这几个命令。

db.serverStatus()

这条命令会列出MongoDB的整体情况,包含主机名字、版本、进程、连续运行时间、连接状态以及操作状态。因为它显示的结果比较长,这里我们只说说常用的几个信息:

host:主机名字

version:MongoDB版本

process:PID进程号

uptime:主机的运行时间

asserts:MongoDB启动后报警的统计数量

connections:MongoDB的连接统计信息

network:MongoDB的网路情况

storageEngine:存储引擎信息

mem:当前使用的内存信息

db.stats()

该命令显示的是db的信息,没有server层面的信息,我们解释下下面db的意思。

> db.stats()
{
 "db" : "admin",
 "collections" : 3,
 "views" : 0,
 "objects" : 6,
 "avgObjSize" : 306.5,
 "dataSize" : 1839,
 "storageSize" : 106496,
 "numExtents" : 0,
 "indexes" : 5,
 "indexSize" : 139264,
 "fsUsedSize" : 38917517312,
 "fsTotalSize" : 52709240832,
 "ok" : 1
} 

db:代表当前数据库的名称

collections:当前数据库中集合的数量

view:当前数据库中视图的数量

objects:当前数据库中所有文档的数量

avgObjSize:数据库中文档的平均大小

dataSize:当前数据库的数据大小,单位是byte

storageSize:当前数据库占用硬盘空间的大小,单位是byte

numExtents:当前数据库中所有集合Extents扩展的数量统计

indexes:当前数据库中的索引数量

indexSize:当前数据库中的索引代销,单位是byte

fsUsedSize:当前MongoDb所在的硬盘已经使用的空间大小

fsTotalSize:当前MongoDb所在的硬盘总共的空间大小

ok:1表示成功,0表示失败

db.coll.stats()

这个函数返回的是集合的状态信息,由于输出的内容很多,这里我们仅说明重要的几个部分:

> db.yeyz.stats()
{
 "ns" : "test.yeyz",
 "size" : 115,
 "count" : 3,
 "avgObjSize" : 38,
 "storageSize" : 36864,
 "capped" : false,
 "wiredTiger" : {
  "metadata" : {
   "formatVersion" : 1
  },

ns:当前集合的名称

size:当前集合的大小,单位是byte

count:当前集合的文档数量

nindexes:当前集合中索引的数量

totalIndexSize:当前集合中所有索引的大小,单位是byte

rs.status()

这个函数是用来查看副本集中的成员的状态信息,如下:

yeyz_repl0:PRIMARY> rs.status()
{
 "set" : "yeyz_repl0",
 "date" : ISODate("2020-11-20T15:35:12.386Z"),
 "myState" : 1,
 "term" : NumberLong(46),
 "syncingTo" : "",
 "syncSourceHost" : "",
 "syncSourceId" : -1,
 "heartbeatIntervalMillis" : NumberLong(2000),
 "optimes" : {
  "lastCommittedOpTime" : {
   "ts" : Timestamp(1605886492, 1),
   "t" : NumberLong(46)
  },
  "readConcernMajorityOpTime" : {
   "ts" : Timestamp(1605886492, 1),
   "t" : NumberLong(46)
  },
  "appliedOpTime" : {
   "ts" : Timestamp(1605886502, 1),
   "t" : NumberLong(46)
  },
  "durableOpTime" : {
   "ts" : Timestamp(1605886502, 1),
   "t" : NumberLong(46)
  }
 },
 "lastStableCheckpointTimestamp" : Timestamp(1605886462, 1),
 "members" : [],
 "ok" : 1,
 "operationTime" : Timestamp(1605886502, 1),
 "$clusterTime" : {
  "clusterTime" : Timestamp(1605886502, 1),
  "signature" : {
   "hash" : BinData(0,"C8IXyxh/1zCqWtwxI1mfMgq9DAE="),
   "keyId" : NumberLong("6891183663887679489")
  }
 }

下面对常用的字段进行描述:

set:副本集的名称

date:当前的时间

myState:当前副本集节点的状态

term:副本集的选举数

syncingTo:从哪个副本集同步数据,如果这里是空值,则代表当前副本是primary

syncSourceHost、syncSourceId分别代表同步目标节点的host和id值

heartbeatIntervalMills:副本集心跳频率,单位为ms

optimes:副本集同步的进度信息

lastStableCheckPointTimestamp:列出最近的检查点的时间。

members:列出副本集中每个成员的信息数据。

以上就是MongoDB 监控工具mongostat和mongotop的使用的详细内容,更多关于MongoDB 监控工具的资料请关注脚本之家其它相关文章!

相关文章

  • centos7防火墙导致java程序访问mongodb3.0.1时报错的问题分析

    centos7防火墙导致java程序访问mongodb3.0.1时报错的问题分析

    这篇文章主要介绍了centos7防火墙导致java程序访问mongodb3.0.1时报错的问题分析,需要的朋友参考下
    2017-01-01
  • MongoDB的分片集群基本配置教程

    MongoDB的分片集群基本配置教程

    MongoDB拥有经典的Sharding架构能将数据分散存储在数个服务器上以作集群,这里我们就来看一下MongoDB的分片集群基本配置教程:
    2016-07-07
  • 利用mongodb查询某坐标是否在规定多边形区域内的方法

    利用mongodb查询某坐标是否在规定多边形区域内的方法

    这篇文章主要介绍了利用mongodb如何查询某坐标是否在固定多边形区域内的方法,文中给出了详细示例代码,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-02-02
  • MongoDB创建和查询视图的方式

    MongoDB创建和查询视图的方式

    本文整理mongodb的官方文档,介绍mongodb的视图创建和查询,在Mongodb中,允许使用两种方式来创建视图,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2023-12-12
  • MongoDB释放空闲空间的几种常用方法

    MongoDB释放空闲空间的几种常用方法

    这篇文章主要给大家介绍了关于MongoDB释放空闲空间的几种常用方法,分别包括compact、db.repairDatabase()、secondary节点重同步以及db.copyDatabase()这几种方法,需要的朋友可以参考借鉴,下面来一起看看吧
    2018-07-07
  • MongoDB的创建、更新和删除

    MongoDB的创建、更新和删除

    下面开始学习MongoDB最重要也是最基础的部分:C(创建)R(查询)U(更新)D(删除);由于R(查询)操作相对来说内容比较多,也比较繁琐,同时使用频率也比较高,所以下一篇会拿出来单独介绍。废话不多说,连上服务器,我们直接进入正题
    2017-05-05
  • MongoDB如何对数组中的元素进行查询详解

    MongoDB如何对数组中的元素进行查询详解

    MongoDB在文档上支持数组,其次数组上可以实现嵌套,以及数组元素也可以文档。所以下面这篇文章主要给大家介绍了关于MongoDB如何对数组中元素进行查询的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-10-10
  • CentOS 7系统下SELinux阻止MongoDB启动的问题详解

    CentOS 7系统下SELinux阻止MongoDB启动的问题详解

    这篇文章主要给大家介绍了关于CentOS 7系统下SELinux阻止MongoDB启动问题的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-11-11
  • 浅析MongoDB用户管理

    浅析MongoDB用户管理

    mongodb在2.4最新版本中对用户权限管理做了全新的调整,把权限细化了,增强了安全性,越来越像mysql的权限管理了。废话少说,我们来详细看下吧
    2014-08-08
  • Windows或Linux系统中备份和恢复MongoDB数据的教程

    Windows或Linux系统中备份和恢复MongoDB数据的教程

    不得不说MongoDB的备份回复操作对比其他数据库来说真的算得上是简便的,无论是在Windows的命令行中或者是Linux里的脚本执行,这里我们就来看一下Windows或Linux系统中备份和恢复MongoDB数据的教程
    2016-06-06

最新评论