1.Mongodb的监控

  在Mongodb自带的命令行监控命令有两种,一个是mongostat,一个是mongotop,除了这个两个之外还有常用的db.serverStatus()、db.stats()、db.coll.stats()以及rs.status()

1. mongostat :监控数据实例中各种操作,包含mongod和mongos实例

 这里做一个简单的输出:

复制代码
[mongod@mongodb ~]$ mongostat  --port 27017
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     4|0  0.1% 0.2%       0 1.82G 109M 0|0 1|0  1.44k   48.4k    8 rs0  PRI May  6 20:36:13.574
    *0    *0     *0     *0       0     4|0  0.1% 0.2%       0 1.82G 109M 0|0 1|0  1.44k   48.5k    8 rs0  PRI May  6 20:36:14.577
    *0    *0     *0     *0       0     5|0  0.1% 0.2%       0 1.82G 109M 0|0 1|0  1.45k   48.9k    8 rs0  PRI May  6 20:36:15.573
    *0    *0     *0     *0       0     4|0  0.1% 0.2%       0 1.82G 109M 0|0 1|0  1.44k   48.6k    8 rs0  PRI May  6 20:36:16.574
    *0    *0     *0     *0       0     5|0  0.1% 0.2%       0 1.82G 109M 0|0 1|0  1.44k   48.7k    8 rs0  PRI May  6 20:36:17.573
    *0    *0     *0     *0       0     4|0  0.1% 0.2%       0 1.82G 109M 0|0 1|0  1.44k   48.6k    8 rs0  PRI May  6 20:36:18.574
    *0    *0     *0     *0       0     4|0  0.1% 0.2%       0 1.82G 109M 0|0 1|0  1.44k   48.6k    8 rs0  PRI May  6 20:36:19.575
    *0    *0     *0     *0       0     5|0  0.1% 0.2%       0 1.82G 109M 0|0 1|0  1.45k   48.8k    8 rs0  PRI May  6 20:36:20.573
复制代码

其中:mongostat  -n 30 10 --port 27017   表示每10打印一次,一共答应30次

  insert:表示每秒插入次数   query:表示每秒查询次数 update:表示每秒更新次数 delete:表示每秒删除的次数

  getmore:表示每秒执行getmore命令的次数,如游标的批量遍历

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

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

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

  flushed:表示在每次轮询间隔之间checkpoint触发的次数,对于MMAPv1存储引擎,表示当前将数据写入磁盘的次数

  vsize:表示在最后一次执行mogostat命令时,运行实例所占虚拟内存大小。

  res:表示在最后一次执行mogostat命令时,运行实例实际占用的物理内存大小。

  qrw:等待读取文档和写入文档的客户端数量(当前等待),这里可以看成是一个等待的队列长度

  arw:正在执行读取文档和执行写入文档的客户端数量(当前活跃)

  net_in|net_out:表示mongod实例接受和发送的总的数据流量,单位为byte

  conn:表示mongod运行实例当前打开的连接次数

  set:表示mongod运行实例所在的复制集名称

  repl:表示mongod运行实例在复制集的身份,如primary节点或者secondary节点

2. mongotop

  该工具用来监控mongdb数据库实例消耗在读/写操作上的时间量,统计粒度精确到数据库中的每个集合,由于mongotop工具只能连接具体的mongod实例,因此对于分片集群来说,不能直接连接mongos获取监控信息,只能连接每个分片对应的复制集或者直接连接复制集中的primary节点。默认也是连接该复制集中的primary节点,因此监控返回的统计数据也是针对复制集中的primary节点的。

  这里是做一个简单的输出 

复制代码
[mongod@mongodb ~]$ mongotop  --port 27017
2022-05-06T22:01:11.682+0800    connected to: mongodb://localhost:27017/

                    ns    total    read    write    2022-05-06T22:01:12+08:00
     admin.system.keys      0ms     0ms      0ms                             
    admin.system.roles      0ms     0ms      0ms                             
  admin.system.version      0ms     0ms      0ms                             
       config.settings      0ms     0ms      0ms                             
config.system.sessions      0ms     0ms      0ms                             
   config.transactions      0ms     0ms      0ms                             
        local.oplog.rs      0ms     0ms      0ms                             
local.replset.election      0ms     0ms      0ms                             
  local.system.replset      0ms     0ms      0ms 
复制代码

  ns:表示集合的命令空间,统计的数据针对那个集合

  read:表示运行实例消耗在这个集合中的"读操作"总时间

  write:表示运行实例消耗在这个集合中的"写操作"总时间

  total:表示运行实例消耗在这个集合中的"读/写操作"总时间

3. db.stats()

  该命令为数据库命令,用于显示具体某个数据库的统计信息

复制代码
rs0:PRIMARY> db.stats()
{
    "db" : "test",            
    "collections" : 1,
    "views" : 0,
    "objects" : 2,
    "avgObjSize" : 33,
    "dataSize" : 66,
    "storageSize" : 36864,
    "indexes" : 1,
    "indexSize" : 36864,
    "totalSize" : 73728,
    "scaleFactor" : 1,
    "fsUsedSize" : 3053395968,
    "fsTotalSize" : 18238930944,
    "ok" : 1,
    "$clusterTime" : {
        "clusterTime" : Timestamp(1651868399, 1),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    },
    "operationTime" : Timestamp(1651868399, 1)
}
复制代码

  db:代表当前数据库的命令

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

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

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

  avgObjSize:数据库中文档的平均大小,单位字节

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

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

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

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

  indexSize:当前数据库中中索引占用的存储空间

  fsUsedSize:当前Mongodb使用了多少磁盘空间,与指定的dbPath对应的路径有关

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

4.db.coll.stats()

  这个函数返回的是集合的状态信息,这里输出的信息太多,这里只输出部分信息 

复制代码
rs0:PRIMARY> db.test.stats()
{
    "ns" : "test.test",
    "size" : 66,
    "count" : 2,
    "avgObjSize" : 33,
    "storageSize" : 36864,
    "freeStorageSize" : 16384,
    "capped" : false,
    "wiredTiger" : {
        "metadata" : {
            "formatVersion" : 1
        },
复制代码

  ns:当前集合的名称

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

  count:当前集合的文档数量

  size:集合中数据占用空间大小,不包括大小

  storagesize:分配的存储空间,当删除集合中的文档时,这个值不会降低

  nindexes:索引数量

  totallindexSize:索引占用的空间总大小

  以kb单位显示:db.test.stats(1024)

  显示所有集合的统计信息:db.printCollectionStats()  

5.db.serverStatus()

  db.serverStatus()数据库命令用户显示具体某个实例上的统计信息,实例可以为mongod或mongos。例如,通过mongo连接分片集群mongos,当执行sb.serverStatus()命令后输出mongos相关的统计信息。

 如果mongo连接的是某个分片中的mongod实例,则输出mongod相关统计信息。不同类型的实例,返回的信息不一样。使用db.serverStatus()命令返回的指标信息较多。

  5.1 查看mongod实例中连接数相关信息:

    db.serverStatus().connections   

复制代码
rs0:PRIMARY> db.serverStatus().connections
{
    "current" : 18,           //表示该数据库实例中当前客户端的连接数,包括复制集之间的连接数。
    "available" : 801,     //表示该数据库实例中还可用的客户端连接数
    "totalCreated" : 101,   //表示该数据库实例中所有已创建的连接数,包括已经关闭的。
    "active" : 8,       //表示该数据库实例中当前活跃的,有读/写等操作的客户端连接数
    "exhaustIsMaster" : 6,  
    "exhaustHello" : 0,
    "awaitingTopologyChanges" : 6
}
复制代码

  5.2 查看mongod实例中的内存相关信息

    db.serverStatus().mem

    rs0:PRIMARY> db.serverStatus().mem
    { "bits" : 64, "resident" : 109, "virtual" : 1889, "supported" : true }
  • bis:表示mongodb运行实例的编译架构
  • resident:表示数据库实例进程使用的物理内存大小,单位为MB
  • virtual:表示数据库实例进程使用的虚拟内存大小,单位为MB
  • supported:表示数据库实例进程所依赖的底层操作系统是否支持扩展的内存信息    

  5.3 查看mongod实例中WireTiger存储引擎的cache相关信息

    db.serverStatus().wiredTiger.cache

  db.serverStatus().wiredTiger.cache

    这里主要对输出结果的几个关键参数进行说明:

  • maximum bytes configured:分配给cache的最大内存,单位为byte
  • bytes currently in the cache:在cache中,当前数据占用的内存大小,单位为byte,取值应该小于maximum bytes configured
  • tracked dirty bytes in the cache:在cache中,当前脏数据占用的内存大小,单位byte
  • pages read into cache:读取cache中pages数量
  • pages written from cache:从cache中写入磁盘中的pages数量     

  5.4查看mongod实例中的锁相关信息

    db.serverStaus().globalLock

复制代码
rs0:PRIMARY> db.serverStatus().globalLock
{
    "totalTime" : NumberLong("113573673000"),  //约等于服务器上线总时长,单位为微妙
    "currentQueue" : {
        "total" : 0,           //当前排队等待锁的操作总数
        "readers" : 0,      //当前排队等待读锁的操作数
        "writers" : 0      //当前排队等待写锁的操作数
    },
    "activeClients" : {
        "total" : 0,
        "readers" : 0,    //执行读操作的活跃客户端连接数
        "writers" : 0    //执行写操作的活跃客户端连接数
    }
}
复制代码

    db.serverStatus().locks:获取锁相关的详细信息,这里输出结果有些多,不再一一写了。

6.关于db.serverStatus()的总结:

  

  1.connections:关于连接数的信息

  2.locks:关于mongodb使用的锁情况

  3.network:网络使用情况统计

  4.opcounters:crud的执行次数统计

  5.repl:复制集配置信息

  6.wiredTiger:包含大量WirdTiger执行情况的信息

    . block-manager:wt数据块的读写情况

    . session:session使用数量

    . concurrentTransactins:Ticket使用情况

    . metrics:一系列性能指标统计信息

 

7. 再补充几个有用的监控指标:

  7.1 db.serverStatus().opcounters:查询、更新、插入、删除、getmore和其它命令数量 

复制代码
rs0:PRIMARY> db.serverStatus().opcounters
{
    "insert" : NumberLong(0),
    "query" : NumberLong(117),
    "update" : NumberLong(13),
    "delete" : NumberLong(0),
    "getmore" : NumberLong(5790),
    "command" : NumberLong(79399),
    "deprecated" : {
        "total" : NumberLong(1),
        "insert" : NumberLong(0),
        "query" : NumberLong(0),
        "update" : NumberLong(0),
        "delete" : NumberLong(0),
        "getmore" : NumberLong(0),
        "killcursors" : NumberLong(1)
    }
复制代码

  2. db.serverStatus().wiredTiger.concurrentTransactions

    对wiredTiger存储引擎的读/写令牌数量。令牌数量表示了可以进入存储引擎的并发操作数量。      

复制代码
rs0:PRIMARY> db.serverStatus().wiredTiger.concurrentTransactions
{
    "write" : {
        "out" : 0,
        "available" : 128,
        "totalTickets" : 128
    },
    "read" : {
        "out" : 1,
        "available" : 127,
        "totalTickets" : 128
    }
}
复制代码

  3.db.adminCommand({'replSetGetStatus':1})

  这个指标代表了写操作到达从节点需要的最小时间。过高的replication lag会减小从节点的价值并且不利于配置了写关注w>1的那些操作

  4.db.printReplicationInfo()  

rs0:PRIMARY> db.printReplicationInfo()
configured oplog size:   1000MB        //这里表示oplog的大小
log length start to end: 1697488secs (471.52hrs)     //这里表示oplog可以容纳多长时间的写操作,表示一个从节点可以离线多长时间追上主节点
oplog first event time:  Mon Apr 18 2022 22:14:02 GMT+0800 (CST)
oplog last event time:   Sun May 08 2022 13:45:30 GMT+0800 (CST)
now:                     Sun May 08 2022 13:45:31 GMT+0800 (CST)

  5.db.runCommand("isMaser")

    描述每个节点的运行状态,如果节点状态不是primary、secondary、arbiter中的一个,或无法执行上述命令则报警  

复制代码
rs0:PRIMARY> db.runCommand("isMaster")
{
    "topologyVersion" : {
        "processId" : ObjectId("627582969df9c82480064892"),
        "counter" : NumberLong(32)
    },
    "hosts" : [
        "127.0.0.1:27017",
        "127.0.0.1:27018",
        "127.0.0.1:27019"
    ],
    "setName" : "rs0",
    "setVersion" : 6,
    "ismaster" : true,
    "secondary" : false,
    "primary" : "127.0.0.1:27017",
    "me" : "127.0.0.1:27017",
    "electionId" : ObjectId("7fffffff000000000000004a"),
    "lastWrite" : {
        "opTime" : {
            "ts" : Timestamp(1651990171, 1),
            "t" : NumberLong(74)
        },
        "lastWriteDate" : ISODate("2022-05-08T06:09:31Z"),
        "majorityOpTime" : {
            "ts" : Timestamp(1651990171, 1),
            "t" : NumberLong(74)
        },
        "majorityWriteDate" : ISODate("2022-05-08T06:09:31Z")
    },
    "maxBsonObjectSize" : 16777216,
    "maxMessageSizeBytes" : 48000000,
    "maxWriteBatchSize" : 100000,
    "localTime" : ISODate("2022-05-08T06:09:34.089Z"),
    "logicalSessionTimeoutMinutes" : 30,
    "connectionId" : 179,
    "minWireVersion" : 0,
    "maxWireVersion" : 9,
    "readOnly" : false,
    "ok" : 1,
    "$clusterTime" : {
        "clusterTime" : Timestamp(1651990171, 1),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    },
    "operationTime" : Timestamp(1651990171, 1)
}
复制代码

 

  

posted on   太白金星有点烦  阅读(989)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示