天天看點

mongodb監控

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等 

------