1.mongosniff工具
首先了解一下sniffer的概念,百度百科解釋:sniffer,中文可以翻譯為嗅探器,是一種基于被動偵聽原理的網絡分析方式。使用這種技術方式,可以監視網絡的狀态、資料流動情況以及網絡上傳輸的資訊。
sniffer既可以被犯罪分子利用進行違法活動,也可以被網絡管理者利用來進行網絡系統的維護和故障排除。目前,它已經被廣泛應用于網絡故障診斷、協定分析、應用性能分析和網絡安全保障等各個領域。
mongodb提供了一個sniffer工具:mongosniff,這個工具可以從底層監控有哪些指令傳送給了mongodb,啟動該工具的文法如下面所示:
./mongosniff --source net lo
注:lo代表loopback,指ip資料包回送到本機上。通常使用的是127.0.0.1作為回送位址。
示例:
1)在服務端啟動mongosniff
shell代碼 收藏代碼
[root@localhost mongodb]# ./bin/mongosniff --source net lo
sniffing... 27017
2)在用戶端執行操作
js代碼 收藏代碼
> show dbs
admin 0.0625gb
local (empty)
results 0.0625gb
test 0.0625gb
>
3)服務端輸出了如下的消息
127.0.0.1:51869 -->> 127.0.0.1:27017 admin.$cmd 67 bytes id:4c 76
query: { listdatabases: 1.0 } ntoreturn: -1 ntoskip: 0
127.0.0.1:27017 <<-- 127.0.0.1:51869 297 bytes id:a1 161 - 76
reply n:1 cursorid: 0
{ databases: [ { name: "test", sizeondisk: 67108864.0, empty: false }, { name: "admin", sizeondisk: 67108864.0, empty: false }, { name: "results", sizeondisk: 67108864.0, empty: false }, { name: "local", sizeondisk: 1.0, empty: true } ], totalsize: 201326592.0, ok: 1.0 }
127.0.0.1:51869 -->> 127.0.0.1:27017 admin.$cmd 80 bytes id:4d 77
query: { replsetgetstatus: 1, forshell: 1 } ntoreturn: 1 ntoskip: 0
127.0.0.1:27017 <<-- 127.0.0.1:51869 92 bytes id:a2 162 - 77
{ errmsg: "not running with --replset", ok: 0.0 }
相當于是資料庫把系統執行指令的日志都記錄了下來,如果我們對這些日志通過檔案儲存下來,就可以儲存資料操作的曆史記錄,為資料庫的性能分析提供原始材料。
2.mongostat
mongostat是mongodb的一個監控工具,每秒更新一次,通過監控資訊可以快速地對資料庫進行性能分析。通過mongostat工具可以快速檢視運作中的mongodb執行個體的統計資訊,用法如下:
[root@localhost mongodb]# ./bin/mongostat
connected to: 127.0.0.1
insert query update delete getmore command flushes mapped vsize res faults locked % idx miss % qr|qw ar|aw netin netout conn time
0 0 0 0 0 1 0 96m 191m 61m 0 0 0 0|0 0|0 62b 1k 2 00:16:30
0 0 0 0 0 1 1 96m 191m 61m 0 0 0 0|0 0|0 62b 1k 2 00:16:31
0 0 0 0 0 1 0 96m 191m 61m 0 0 0 0|0 0|0 62b 1k 2 00:16:32
由上可以看出,執行mongostat指令後,輸出了系統内部的運作狀态,mongostat具體傳回的字段如下:
fields
inserts - # of inserts per second (* means replicated op)
query - # of queries per second
update - # of updates per second
delete - # of deletes per second
getmore - # of get mores (cursor batch) per second
command - # of commands per second, on a slave its local|replicated
flushes - # of fsync flushes per second
mapped - amount of data mmaped (total data size) megabytes
vsize - virtual size of process in megabytes
res - resident size of process in megabytes
faults - # of pages faults per sec (linux only)
locked - percent of time in global write lock
idx miss - percent of btree page misses (sampled)
qr|qw - queue lengths for clients waiting (read|write)
ar|aw - active clients (read|write)
netin - network traffic in - bits
netout - network traffic out - bits
conn - number of open connections
set - replica set name
repl - replication type
m - master
sec - secondary
rec - recovering
unk - unknown
slv - slave
3.db.serverstatus指令
我們可以在用戶端執行db.serverstatus指令來檢視伺服器運作狀态,用法如下:
> db.serverstatus()
{
"host" : "localhost.localdomain",
"version" : "2.0.6", #伺服器版本
"process" : "mongod",
"uptime" : 3937, #啟動時間
"uptimeestimate" : 3232,
"localtime" : isodate("2012-08-21t16:21:07.562z"),
"globallock" : {
"totaltime" : 3937151885,
"locktime" : 354898,
"ratio" : 0.00009014079475879808,
"currentqueue" : {
"total" : 0, #目前全部隊列量
"readers" : 0, #讀請求隊列量
"writers" : 0 #寫請求隊列量
},
"activeclients" : {
"total" : 0, #目前用戶端連接配接量
"readers" : 0, #用戶端讀請求量
"writers" : 0 #用戶端寫請求量
}
},
"mem" : {
"bits" : 32, #32位系統
"resident" : 61, #占用實體記憶體量
"virtual" : 191, #占用虛拟記憶體量
"supported" : true, #是否支援擴充記憶體
"mapped" : 96
"connections" : {
"current" : 1, #目前活動連接配接數
"available" : 818 #剩餘空閑連接配接數
"extra_info" : {
"note" : "fields vary by platform",
"heap_usage_bytes" : 986232,
"page_faults" : 1
"indexcounters" : {
"btree" : {
"accesses" : 0, #索引被通路量
"hits" : 0, #索引命中量
"misses" : 0, #索引偏差量
"resets" : 0,
"missratio" : 0 #索引偏差率
"backgroundflushing" : {
"flushes" : 65,
"total_ms" : 6,
"average_ms" : 0.09230769230769231,
"last_ms" : 0,
"last_finished" : isodate("2012-08-21t16:20:30.560z")
"cursors" : {
"totalopen" : 0,
"clientcursors_size" : 0,
"timedout" : 0
"network" : {
"bytesin" : 12264, #發給伺服器的資料量(byte)
"bytesout" : 171619, #此伺服器發出的資料量(byte)
"numrequests" : 193 #發給此伺服器的請求量
"opcounters" : {
"insert" : 1, #插入操作的量
"query" : 44, #查詢操作的量
"update" : 0, #更新操作的量
"delete" : 0, #删除操作的量
"getmore" : 0,
"command" : 152 #其它操作的量
"asserts" : {
"regular" : 0,
"warning" : 0,
"msg" : 0,
"user" : 0,
"rollovers" : 0
"writebacksqueued" : false,
"ok" : 1
}
db.serverstatus與mongostat指令類似,db.serverstatus提示的資訊更加具體、全面,不過db.serverstatus指令檢視到的資料是靜态的,不是實時的。
更多關于伺服器狀态監控資訊,參見官方文檔:http://cn.docs.mongodb.org/master/reference/server-status-index/
4.db.stats指令
與db.serverstatus指令檢視伺服器執行個體資訊不同,db.stats指令是用來檢視特定資料庫的詳細運作狀态,分析粒度更細。具體使用方法如下(目前連接配接的是test庫):
> db.stats()
"db" : "test", #檢視的資料庫名稱
"collections" : 19, #資料庫中的集合數
"objects" : 119, #對象的數量
"avgobjsize" : 612.4033613445379, #對象平均大小
"datasize" : 72876, #資料大小
"storagesize" : 1196032, #占用存儲空間大小
"numextents" : 21, #資料庫所有集合中的片區計數
"indexes" : 21, #索引數量
"indexsize" : 171696, #索引大小
"filesize" : 50331648, #檔案大小
"nssizemb" : 16, #資料庫命名空間檔案的總大小
>
---
監控
1、http://192.168.12.107:28021/ 比mongos端口大1000
mongos viptest2:27021
list all commands | replica set status
commands: buildinfo cursorinfo features hostinfo listdatabases serverstatus top
db version v2.4.6
git hash: nogitversion
sys info: linux buildvm-04.phx2.fedoraproject.org 3.12.8-300.fc20.x86_64 #1 smp thu jan 16 01:07:50 utc 2014 x86_64 boost_lib_version=1_41
uptime: 288 seconds
點開每個指令都顯示如下:
rest is not enabled. use --rest to turn on.
check that port 28021 is secured for the network too.
将所有的都關掉,重新開機啟動,mongod指令後面添加 --rest
例如:mongod --dbpath=/mongo1 --port 27017 --rest
三個分片和配置資料庫都可以打開,隻有mongos好像打不開
http://192.168.12.104:28017/
http://192.168.12.104:28019/
http://192.168.12.104:28023/
http://192.168.12.107:28018/
使用管理接口,預設情況下,啟動mongod會啟動基本的http伺服器,該服務的預設端口是28017.可以在浏覽器中輸入
localhost:28017.有些連結需要在mongod啟動時,用--rest選項開啟rest支援 才能進去.當開啟rest支援後,可以
在mongod啟動時使用--nohttpinterface來關閉管理接口.
2、serverstatus
要獲得運作中的mongodb伺服器統計資訊,最基本工具就是serverstatus
mongos> db.runcommand({"serverstatus":1})
{
"host" : "viptest2:27021",
"version" : "2.4.6",
"process" : "mongos",
"pid" : 15353,
"uptime" : 616,
"uptimemillis" : numberlong(616245),
"uptimeestimate" : 609,
"localtime" : isodate("2014-09-23t09:14:53.601z"),
"asserts" : {.........
3、mongostat
mongostat輸出一些serverstatus提供的重要資訊,它會每秒鐘輸出新的一行,比之前看到的靜态計數實時性更好,它輸出多個列,分别是inserts commands vsize locked
[root@viptest2 ~]# mongostat -h 192.168.12.107 --port 27021
connected to: 192.168.12.107:27021
insert query update delete getmore command vsize res faults netin netout conn repl time
0 0 0 0 0 1 227m 16m 0 62b 717b 1 rtr 17:17:13
0 0 0 0 0 1 227m 16m 0 62b 717b 1 rtr 17:17:14
0 0 0 0 0 1 227m 16m 0 62b 717b 1 rtr 17:17:15
0 0 0 0 0 1 227m 16m 0 62b 717b 1 rtr 17:17:16
0 0 0 0 0 1 227m 16m 0 62b 717b 1 rtr 17:17:17
0 0 0 0 0 1 227m 16m 0 62b 717b 1 rtr 17:17:18
0 0 0 0 0 1 227m 16m 0 62b 717b 1 rtr 17:17:19
0 0 0 0 0 1 227m 16m 0 62b 717b 1 rtr 17:17:20
0 0 0 0 0 1 227m 16m 0 62b 717b 1 rtr 17:17:21
4、第三方插件
nagios、munin、ganglia、cacti等
------