一、mongosniff
此工具可以从底层监控到底有哪些命令发送给了 MongoDB 去执行,从中就可以进行分析:
以 root 身份执行:
1
|
.
/mongosniff
--
source
NET lo
|
然后其会监控位到本地以 localhost 监听默认 27017 端口的 MongoDB 的所有包请求,如执
行”show dbs” 操作:
1
2
3
4
5
6
7
8
9
10
|
[root@localhost bin]
# ./mongo
MongoDB shell version: 1.8.1
connecting to:
test
> show dbs
admin 0.0625GB
foo
0.0625GB
local
(empty)
test
0.0625GB
|
那么你可以看到如下输出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
[root@localhost bin]
# ./mongosniff --source NET lo
sniffing... 27017
127.0.0.1:38500 -->> 127.0.0.1:27017 admin.$cmd 60 bytes
id
:537ebe0f 1400815119
query: { whatsmyuri: 1 } ntoreturn: 1 ntoskip: 0
127.0.0.1:27017 <<-- 127.0.0.1:38500 78 bytes
id
:531c3855 1394358357 - 1400815119
reply n:1 cursorId: 0
{ you:
"127.0.0.1:38500"
, ok: 1.0 }
127.0.0.1:38500 -->> 127.0.0.1:27017 admin.$cmd 80 bytes
id
:537ebe10 1400815120
query: { replSetGetStatus: 1, forShell: 1 } ntoreturn: 1 ntoskip: 0
127.0.0.1:27017 <<-- 127.0.0.1:38500 92 bytes
id
:531c3856 1394358358 - 1400815120
reply n:1 cursorId: 0
{ errmsg:
"not running with --replSet"
, ok: 0.0 }
127.0.0.1:38500 -->> 127.0.0.1:27017 admin.$cmd 67 bytes
id
:537ebe11 1400815121
query: { listDatabases: 1.0 } ntoreturn: -1 ntoskip: 0
127.0.0.1:27017 <<-- 127.0.0.1:38500 293 bytes
id
:531c3857 1394358359 - 1400815121
reply n:1 cursorId: 0
{ databases: [ { name:
"foo"
, sizeOnDisk: 67108864.0, empty:
false
}, { name:
"test"
,
sizeOnDisk: 67108864.0, empty:
false
}, { name:
"admin"
, sizeOnDisk: 67108864.0, empty:
false
},
{ name:
"local"
, sizeOnDisk: 1.0, empty:
true
} ], totalSize: 201326592.0, ok: 1.0 }
127.0.0.1:38500 -->> 127.0.0.1:27017 admin.$cmd 80 bytes
id
:537ebe12 1400815122
query: { replSetGetStatus: 1, forShell: 1 } ntoreturn: 1 ntoskip: 0
127.0.0.1:27017 <<-- 127.0.0.1:38500 92 bytes
id
:531c3858 1394358360 - 1400815122
reply n:1 cursorId: 0
{ errmsg:
"not running with --replSet"
, ok: 0.0 }
|
如果将这些输出到一个日志文件中,那么就可以保留下所有数据库操作的历史记录,
对于后期的性能分析和安全审计等工作将是一个巨大的贡献。
二、mongostat
此工具可以快速的查看某组运行中的 MongoDB 实例的统计信息,用法如下:
[root@localhost bin]# ./mongostat
下面是执行结果(部分):
1
2
3
4
5
6
7
8
|
.
/mongostat
connected to: 127.0.0.1
insert query update delete getmore
command
flushes mapped vsize res faults locked db idx miss % qr|qw ar|aw netIn netOut conn
time
*0 *0 *0 *0 0 1|0 0 160m 507m 50m 0
test
:0.0% 0 0|0 0|0 62b 2k 1 20:21:26
*0 *0 *0 *0 0 1|0 0 160m 507m 50m 0
test
:0.0% 0 0|0 0|0 62b 2k 1 20:21:27
*0 *0 *0 *0 0 1|0 0 160m 507m 50m 0
test
:0.0% 0 0|0 0|0 62b 2k 1 20:21:28
*0 2 *0 *0 0 1|0 1 160m 507m 50m 0
test
:0.0% 0 0|0 0|0 62b 2k 1 20:21:29
*0 *0 *0 *0 0 1|0 0 160m 507m 50m 0
test
:0.0% 0 0|0 0|0 62b 2k 1 20:21:30
|
字段说明:
insert: 每秒插入量
query: 每秒查询量
update: 每秒更新量
delete: 每秒删除量
locked: 锁定量
qr | qw: 客户端查询排队长度(读|写)
ar | aw: 活跃客户端量(读|写)
conn: 连接数
time: 当前时间
它每秒钟刷新一次状态值,提供良好的可读性,通过这些参数可以观察到一个整体的性能情况。
三、DB信息
1、db.serverStatus
2、db.stats
db.stats 查看数据库状态信息。使用样例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
> db.stats()
{
"db"
:
"test"
,
"collections"
: 9,
#collection数量
"objects"
: 52,
#对象数量
"avgObjSize"
: 60.46153846153846,
#对象平均大小
"dataSize"
: 3144,
#数据大小
"storageSize"
: 249856,
#数据大小含预分配空间
"numExtents"
: 9,
#事件数量
"indexes"
: 9,
#索引数量
"indexSize"
: 73584,
#索引大小
"fileSize"
: 201326592,
#文件大小
"nsSizeMB"
: 16,
"dataFileVersion"
: {
"major"
: 4,
"minor"
: 5
},
"ok"
: 1
}
|
MongoDB 从一面世就得到众多开源爱好者和团队的重视,在常用的监控框架如 cacti、
Nagios、Zabbix 等基础上进行扩展,进行 MongoDB 的监控都是非常方便的。
本文转自shayang8851CTO博客,原文链接:http://blog.51cto.com/janephp/1328031,如需转载请自行联系原作者