MongoDB监控
为什么要监控?
监控及时获得应用的运行状态信息,在问题出现时及时发现。
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
监控什么?
CPU、内存、磁盘I/O、应用程序(MongoDB)、进程监控(ps -aux)、错误日志监控
1.4.1 MongoDB集群监控方式
db.serverStatus()
查看实例运行状态(内存使用、锁、用户连接等信息)
通过比对前后快照进行性能分析
"connections" # 当前连接到本机处于活动状态的连接数 "activeClients" # 连接到当前实例处于活动状态的客户端数量 "locks" # 锁相关参数 "opcounters" # 启动之后的参数 "opcountersRepl" # 复制想关 "storageEngine" # 查看数据库的存储引擎 "mem" # 内存相关
状态:
db.stats()
显示信息说明:
"db" : "test" ,表示当前是针对"test"这个数据库的描述。想要查看其他数据库,可以先运行$ use databasename(e.g $use admiin). "collections" : 3,表示当前数据库有多少个collections.可以通过运行show collections查看当前数据库具体有哪些collection. "objects" : 13,表示当前数据库所有collection总共有多少行数据。显示的数据是一个估计值,并不是非常精确。 "avgObjSize" : 36,表示每行数据是大小,也是估计值,单位是bytes "dataSize" : 468,表示当前数据库所有数据的总大小,不是指占有磁盘大小。单位是bytes "storageSize" : 13312,表示当前数据库占有磁盘大小,单位是bytes,因为mongodb有预分配空间机制,为了防止当有大量数据插入时对磁盘的压力,因此会事先多分配磁盘空间。 "numExtents" : 3,似乎没有什么真实意义。我弄明白之后再详细补充说明。 "indexes" : 1 ,表示system.indexes表数据行数。 "indexSize" : 8192,表示索引占有磁盘大小。单位是bytes "fileSize" : 201326592,表示当前数据库预分配的文件大小,例如test.0,test.1,不包括test.ns。
1.4.2 mongostat
实时数据库状态,读写、加锁、索引命中、缺页中断、读写等待队列等情况。
每秒刷新一次状态值,并能提供良好的可读性,通过这些参数可以观察到MongoDB系统整体性能情况。
[mongod@MongoDB oplog]$ mongostat -h 10.0.0.152 --port 28017 insert query update delete getmore command flushes mapped vsize res faults qr|qw ar|aw netIn netOut conn set repl time *0 *0 *0 *0 0 1|0 0 303.0M 13.0M 0 0|0 0|0 143b 8k 1 RTR 2018-01-08T17:28:42+08:00
参数说明:
参数 |
参数说明 |
insert |
每秒插入量 |
query |
每秒查询量 |
update |
每秒更新量 |
delete |
每秒删除量 |
conn |
当前连接数 |
qr|qw |
客户端查询排队长度(读|写)最好为0,如果有堆积,数据库处理慢。 |
ar|aw |
活跃客户端数量(读|写) |
time |
当前时间 |
mongotop命令说明:
[mongod@MongoDB oplog]$ mongotop -h 127.0.0.1:27017 2018-01-08T17:32:56.623+0800 connected to: 127.0.0.1:27017 ns total read write 2018-01-08T17:32:57+08:00 admin.system.roles 0ms 0ms 0ms admin.system.users 0ms 0ms 0ms admin.system.version 0ms 0ms 0ms app.user 0ms 0ms 0ms automationcore.automation.job.status 0ms 0ms 0ms automationcore.config.automation 0ms 0ms 0ms automationcore.config.automationTemplates 0ms 0ms 0ms automationcore.config.automationTemplates_archive 0ms 0ms 0ms automationcore.config.automation_archive 0ms 0ms 0ms automationstatus.lastAgentStatus 0ms 0ms 0ms
mongotop重要指标
ns:数据库命名空间,后者结合了数据库名称和集合。 total:mongod在这个命令空间上花费的总时间。 read:在这个命令空间上mongod执行读操作花费的时间。 write:在这个命名空间上mongod进行写操作花费的时间。
1.4.3 db级别命令
db.currentOp()
查看数据库当前执行什么操作。
用于查看长时间运行进程。
通过(执行时长、操作、锁、等待锁时长)等条件过滤。
如果发现一个操作太长,把数据库卡死的话,可以用这个命令杀死他:> db.killOp(608605)
db.setProfilingLevel()
设置server级别慢日志
打开profiling:
0:不保存
1:保存慢查询日志
2:保存所有查询日志
注意:级别是对应当前的数据库,而阈值是全局的。
查看profiling状态
查看慢查询:system.profile
关闭profiling
转自:https://www.cnblogs.com/clsn/p/8244206.html#auto_id_14

更多精彩