列举mongodb监控的常用命令

1.监控统计

mongostat 可用于查看当前QPS/内存使用/连接数,以及多个shard的压力分布

命令参考

./mongostat --port 27071  -u admin -p xxx --authenticationDatabase=admin --discover -n 30 3

参数说明

-discover 提供集群中所有节点的状态

-n 30 3 表示输出30次,每次休眠3秒钟

输出示例

                   insert query update delete getmore command  %dirty  %used flushes mapped vsize   res faults qr|qw  ar|aw netIn netOut conn    set repl                      time
185.1.12.101:10001 499 4886 2042 1612 237 756|0 3.8 80.1 0 28.5G 19.1G n/a 3|0 1|1 4m 7m 5545 shard0 PRI 2017-03-06T11:48:17+08:00

指标说明

指标名 说明
inserts/s 每秒插入数
query/s 每秒查询数
update/s 每秒更新数
delete/s 每秒删除数
getmore/s 每秒getmore数
command/s 每秒命令数,涵盖了增删改查和其他操作
dirty/% WriedTiger引擎参数,缓存中无效数据百分比
used/% WriedTiger引擎参数,正在使用的缓存百分比
flushs/s 每秒执行fsync将数据写入硬盘次数
mapped/MB 所有的被mmap的数据量
vsize/MB 虚拟内存使用量
res/MB 物理内存使用量
faults/s 每秒访问失败数,与内存swap有关
qrqw 客户端读写等待队列数量,高并发时,一般队列值会升高
araw 客户端读写活跃个数
netIn 网络接收数据量
netOut 网络发送数据量
conn 当前连接数
set 所属集合(分片)
repl 复制状态(主节点/二级节点..)
time 时间戳

官方说明

https://docs.mongodb.com/manual/reference/program/mongostat/

2.热点操作

mongotop 用于查看当前占用比例较高的DB操作,即热点操作。

命令参考

./mongotop --port 10001  -u admin -p xxx --authenticationDatabase=admin

输出示例

	ns    				total	read	write	2017-03-20T15:22:36+08:00
nscl.T_De**ata 407ms 266ms 140ms
nscl.T_OAUT**EN 251ms 242ms 8ms
nscl.T_Subs**tion 180ms 180ms 0ms
nscl.T_De**istory 61ms 0ms 61ms

官方说明

https://docs.mongodb.com/manual/reference/program/mongotop/

3.慢操作检测

profile是mongodb实现慢操作检测的模块,官方说明

连接shell(使用root)

./mongo --port 10001  -u root -p xxx --authenticationDatabase=admin
use admin

注意

profile操作必须连接mongod进程,而mongos无法执行此类操作

profile设置

db.setProfilingLevel(0) 不输出慢查询
db.setProfilingLevel(1,100) 统计慢查询,100ms是阈值
db.setProfilingLevel(2) 统计所有操作
db.getProfilingLevel()

查询慢查询

db.system.profile.find().limit(10).sort( { ts : -1 } ).pretty()
db.system.profile.find().limit(10).sort( { millis : -1 } ).pretty()

查询当前操作

db.currentOp()
  • 样例-查询等待锁的增删改查
db.currentOp(
{
"waitingForLock" : true,
$or: [
{ "op" : { "$in" : [ "insert", "update", "remove" ] } },
{ "query.findandmodify": { $exists: true } }
]
}
)
  • 样例-查询活跃query操作
db.currentOp(true).inprog.forEach(
function(opDoc){
if(!opDoc.active && opDoc.op=='query')
printjson(d)
}
)

currentOp更多说明

4. 集合状态分析

数据库状态

db.stats()
->
{
"db" : "test", //当前数据库
"collections" : 3, //集合数量
"objects" : 165606718, //对象数量
"avgObjSize" : 381, //对象平均大小
"dataSize" : 63142130610, //所有数据总大小
"storageSize" : 16384, //数据占磁盘大小
"numExtents" : 3,
"indexes" : 479, //索引数
"indexSize" : 8011636736, //索引大小
"fileSize" : 201326592 //预分配给数据库的文件大小
}

集合状态

db.xxx.stats()
->
...
"sharded" : true, //是否分片
"capped" : false, //是否限制大小
"ns" : "nscl.T_BUSINESS_LOG",
"count" : 26541837, //表数量
"size" : 14991828070, //表大小
"storageSize" : 3615076352, //占磁盘大小
"totalIndexSize" : 2640109568, //索引大小
"avgObjSize" : 564.8376210734773,
"nindexes" : 6,
"nchunks" : 374 //chunk数量
...

5. 分片均衡

利用sh.statusdb.printShardingStatus()查看当前分片均衡状态

输出样例

--- Sharding Status ---
sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("5aa8dea3102264450d128285")
}
shards:
{ "_id" : "shard0", "host" : "shard0/135.177.126.24:10001,135.177.126.25:10001", "state" : 1 }
most recently active mongoses:
"3.4.10" : 3
autosplit:
Currently enabled: yes
balancer:
Currently enabled: yes
Currently running: no
Balancer lock taken at Sun Mar 25 2018 12:12:57 GMT+0800 by ConfigServer:Balancer
Balancer active window is set between 01:00 and 06:00 server local time
Failed balancer rounds in last 5 attempts: 0
Migration Results for the last 24 hours:
No recent migrations
databases:
{ "_id" : "app1", "primary" : "shard0", "partitioned" : true }
{ "_id" : "app2", "primary" : "shard0", "partitioned" : true }
app2.T_APIStat
shard key: { "recordTime" : "hashed" }
unique: false
balancing: true
chunks:
分段 说明
shards 分片列表信息,包含主备节点
active mongose 当前活跃的mongos进程
autosplit 自动切分chunk开关
balancer 当前均衡器状态信息,包括最近均衡的统计
databases 数据库分库信息,包括每个集合的分片信息、chunks分布

6. 副本集同步

利用sh.status查看当前副本集状态

{
"set" : "shard0",
"date" : ISODate("2018-04-10T06:56:37.674Z"),
"myState" : 2,
"term" : NumberLong(11),
"syncingTo" : "135.177.126.25:10001",
"heartbeatIntervalMillis" : NumberLong(2000),
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1523343395, 1),
"t" : NumberLong(11)
},
"appliedOpTime" : {
"ts" : Timestamp(1523343395, 1),
"t" : NumberLong(11)
},
"durableOpTime" : {
"ts" : Timestamp(1523343395, 1),
"t" : NumberLong(11)
}
},
"members" : [
{
"_id" : 0,
"name" : "135.177.126.24:10001",
"health" : 1.0,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 276079,
"optime" : {
"ts" : Timestamp(1523343395, 1),
"t" : NumberLong(11)
},
"optimeDate" : ISODate("2018-04-10T06:56:35.000Z"),
"syncingTo" : "135.177.126.25:10001",
"configVersion" : 1,
"self" : true
},
{
"_id" : 1,
"name" : "135.177.126.25:10001",
"health" : 1.0,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 276057,
"optime" : {
"ts" : Timestamp(1523343395, 1),
"t" : NumberLong(11)
},
"optimeDurable" : {
"ts" : Timestamp(1523343395, 1),
"t" : NumberLong(11)
},
"optimeDate" : ISODate("2018-04-10T06:56:35.000Z"),
"optimeDurableDate" : ISODate("2018-04-10T06:56:35.000Z"),
"lastHeartbeat" : ISODate("2018-04-10T06:56:37.320Z"),
"lastHeartbeatRecv" : ISODate("2018-04-10T06:56:36.007Z"),
"pingMs" : NumberLong(0),
"electionTime" : Timestamp(1523067325, 1),
"electionDate" : ISODate("2018-04-07T02:15:25.000Z"),
"configVersion" : 1
},
{
"_id" : 2,
"name" : "135.177.126.26:10001",
"health" : 1.0,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 276057,
"lastHeartbeat" : ISODate("2018-04-10T06:56:35.890Z"),
"lastHeartbeatRecv" : ISODate("2018-04-10T06:56:35.020Z"),
"pingMs" : NumberLong(0),
"configVersion" : 1
}
],
"ok" : 1.0
}
分段 说明
set 当前副本集名称
date 执行命令时间
myState 当前节点的状态(角色)
syncingTo 同步源
heartbeatIntervalMillis 心跳间隔
members 节点成员
members.id 成员编号
members.name 成员名称
members.heath 健康状态,1-true,0-false
members.state 成员状态(角色)1-主节点 2-备节点 7-仲裁节点
members.stateStr 成员状态名
members.uptime 成员启动运行时长
members.optime 成员oplog时间戳(字段ts)
members.optimeDate 成员oplog时间(格式化)
members.lastHeartbeat 当前节点对成员的最后一个心跳
members.lastHeartbeatRecv 当前节点收到该成员的最后一个心跳
members.pingMs 当前节点到该成员的回路时长
members.syncingTo 成员同步源
members.electionTime 主节点选举时间戳(ms)
members.electionDate 主节点选举时间(格式化)
  1. 检查每个成员的state/stateStr确认是否正常;

    关于state状态值参考
  2. 检查每个成员的optimeDate差异,查看复制延迟;
  3. 检查lastHeartbeat、pingMs值排查网络延迟问题

使用db.printReplicationInfo()输出节点oplog信息,可在主备节点输出对比

configured oplog size:   20480MB
log length start to end: 589911secs (163.86hrs)
oplog first event time: Tue Apr 03 2018 19:37:14 GMT+0800
oplog last event time: Tue Apr 10 2018 15:29:05 GMT+0800
now: Tue Apr 10 2018 15:30:18 GMT+0800

主节点使用db.printSlaveReplicationInfo()可输出备节点的同步信息

source: 135.177.126.24:10001
syncedTo: Tue Apr 10 2018 15:32:45 GMT+0800
0 secs (0 hrs) behind the primary

7.其他参考

Mongodb-线上DB监控要点

Mongodb-成员节点状态字典

Mongodb-replSetStat解读

mongodb监控常用方法的更多相关文章

  1. PCB MongoDB 监控

    一个数据库监控工具是必不可少的,当然MongoDB安装自带监控啦. 这里将监控工具mongostat.exe与mongotop.exe使用与参数进行讲解说明. 一.监控工具说明: 二.监控工具启用 1 ...

  2. MongoDB监控及报警

    转载请注明出处:https://www.cnblogs.com/shining5/p/11142357.html MongoDB监控及报警 Prometheus是由SoundCloud开发的开源监控报 ...

  3. MongoDB 监控 --- MongoDB基础用法(八)

    MongoDB 监控 在你已经安装部署并允许MongoDB服务后,你必须要了解MongoDB的运行情况,并查看MongoDB的性能.这样在大流量得情况下可以很好的应对并保证MongoDB正常运作. M ...

  4. MongoDB 监控

    在你已经安装部署并允许MongoDB服务后,你必须要了解MongoDB的运行情况,并查看MongoDB的性能.这样在大流量得情况下可以很好的应对并保证MongoDB正常运作. MongoDB中提供了m ...

  5. MongoDB监控之一:运行状态、性能监控,分析

    为什么要监控? 监控及时获得应用的运行状态信息,在问题出现时及时发现. 监控什么? CPU.内存.磁盘I/O.应用程序(MongoDB).进程监控(ps -aux).错误日志监控 1.4.1 Mong ...

  6. mysql/mongodb监控之Percona Monitoring and Management (PMM) 2.1.0安装使用

    Percona Monitoring and Management (PMM)是Percona Server一款开源的用于管理和监控MySQL和MongoDB性能的开源平台,通过PMM客户端收集到的D ...

  7. zabbix mongodb 监控添加

    在zabbix 上添加mongodb的监控 由于使用的是zabbix 3.0 所有在模板里面又自己的模板名字叫:Template MongoDB 所以 客户端的配置如下 到配置文件目录 /usr/lo ...

  8. MongoDB负载信息一目了然 阿里云HDM重磅发布MongoDB监控和诊断功能

    混合云数据库管理(HDM)的统一监控.告警.诊断功能新增了对MongoDB的支持. 通过直观的方式将MongoDB多个维度的负载信息统一整合,不仅可以清晰的查看实时负载信息,也可以方便的确认历史负载情 ...

  9. MongoDB副本集配置系列八:MongoDB监控

    1:Mongostat MongoDB2.6版本 MongoDB3.0版本 2:db.setProfilingLevel(2):打开profiler 类似于MySQL的slow log Profile ...

随机推荐

  1. 针对Oracle的审计方案

    主题:针对Oracle的审计方案 数据库环境:Oracle 11g 数据库审计需求: 1.需要对连接数据库的行为进行审计 2.需要对核心表的DML操作进行审计 3.需要迁移审计数据到指定表空间 4.需 ...

  2. 探讨 java中 接口和对象的关系

    接口是对象么?接口可以有对象么?这个问题要跟类比对着,或许更好理解;类是对象的模版.接口不是类,所以:接口肯定不是对象的模版.那接口跟对象有什么样的关系?还是得从类入手;因为类实现了接口,所以可以说, ...

  3. Java与算法之(11) - 合并排序

    天下事,合久必分,分久必合.合并排序的基本思想正是先分再合. 例如对3, 1这个数列排序,首先是分,分为3和1两个数列,然后再合并并排序.合并需要额外的辅助空间,即建立一个两个数列长度之和的空数组用于 ...

  4. nohup—后端守护进程

    要将一个命令放到后台执行,我们一般使用nohup sh command & 为什么要nohup? 因为我用使用Scrt这种终端工具退出的时候会向我们在当前shell下启动的进程发生一个SIGH ...

  5. html笔记3

    继续记录 继续上次的img标签 <html> <body style="font-famliy:arial"> <img src="1.jp ...

  6. POJ3041-Asteroids-匈牙利算法

    Asteroids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 23963   Accepted: 12989 Descr ...

  7. 在jquery中防止ajax重复提交

  8. chorme调试Paused in debugger问题解决

    最近出现的问题,使用chorme调试代码总是这个状态(Paused in debugger[debug的时候暂停了]): 一刷新就这样,非常的不舒服.当然你可以选择多按几次F8跳出,下面提供几种方式解 ...

  9. TPshop学习(8)微信支付

    http://blog.csdn.net/phper8/article/details/76383415 学习内容: https://www.kancloud.cn/tpshop/thinkphp5/ ...

  10. ios 一步一步学会自定义地图吹出框(CalloutView)-->(百度地图,高德地图,google地图)

    前言 在 ios上边使用地图库的同学肯定遇到过这样的问题:吹出框只能设置title和subtitle和左右的view,不管是百度地图还是高德地图还是自带的 google地图,只提供了这四个属性,如果想 ...