利用Zabbix監控MongoDB
一、首先介紹mongodb采集到的數據含義:
1、狀態采集命令:
>db.serverStatus();
2、輸出內容:
{ "host" : "localhost", "version" : "2.2.6", "process" : "mongod", "pid" : 55123, "uptime" : 18654536, "uptimeMillis" : NumberLong("18654536224"), "uptimeEstimate" : 18407100, "localTime" : ISODate("2017-07-10T08:06:17.628Z"), "locks" : { "." : { "timeLockedMicros" : { "R" : NumberLong(1203), #所有庫全局讀鎖總微秒數 "W" : NumberLong(1607) #所有全庫局寫鎖總微妙數 }, "timeAcquiringMicros" : { "R" : NumberLong(168), #所有庫全局讀鎖的鎖等待總微秒數 "W" : NumberLong(41) #所有庫全局寫鎖的鎖等待總微秒數 } }, "admin" : { "timeLockedMicros" : { }, "timeAcquiringMicros" : { } }, "local" : { "timeLockedMicros" : { "r" : NumberLong(4118711), "w" : NumberLong(0) }, "timeAcquiringMicros" : { "r" : NumberLong(2191541), "w" : NumberLong(0) } }, "org_center" : { "timeLockedMicros" : { "r" : NumberLong("13835793898"), "w" : NumberLong("20466120642") }, "timeAcquiringMicros" : { "r" : NumberLong(352664878), "w" : NumberLong("29283950076") } }, "org_centr" : { "timeLockedMicros" : { "r" : NumberLong(124236), "w" : NumberLong(180) }, "timeAcquiringMicros" : { "r" : NumberLong(10119), "w" : NumberLong(10) } }, "shopProduct" : { "timeLockedMicros" : { "r" : NumberLong(134997), "w" : NumberLong(0) }, "timeAcquiringMicros" : { "r" : NumberLong(14241), "w" : NumberLong(0) } }, "tb_shop" : { "timeLockedMicros" : { "r" : NumberLong(1405192), "w" : NumberLong(0) }, "timeAcquiringMicros" : { "r" : NumberLong(146122), "w" : NumberLong(0) } }, "test" : { "timeLockedMicros" : { "r" : NumberLong(3090622), "w" : NumberLong(2170) }, "timeAcquiringMicros" : { "r" : NumberLong(414040), "w" : NumberLong(130) } } }, "globalLock" : { "totalTime" : NumberLong("18654536224000"), "lockTime" : NumberLong(1607), "currentQueue" : { "total" : 0, "readers" : 0, "writers" : 0 }, "activeClients" : { "total" : 0, "readers" : 0, "writers" : 0 } }, "mem" : { "bits" : 64, #64位操作系統 "resident" : 238, #共占用屋里內存M "virtual" : 448, #占用虛擬內存 "supported" : true, "mapped" : 256 #映射內存 }, "connections" : { "current" : 16, #當前活躍連接數 "available" : 803 #剩余空閑連接數 }, "extra_info" : { "note" : "fields vary by platform", "heap_usage_bytes" : 30607592, "page_faults" : 200 }, "indexCounters" : { "btree" : { "accesses" : 24067164, #索引被訪問次數 "hits" : 24067164, #索引命中量 "misses" : 0, "resets" : 0, "missRatio" : 0 } }, "backgroundFlushing" : { "flushes" : 310905, #數據庫刷新寫到磁盤的次數 "total_ms" : 214212, #數據庫刷新數據到磁盤花費的微秒數 "average_ms" : 0.688995030636368, #執行單次刷新花費的平均微秒數 "last_ms" : 5, "last_finished" : ISODate("2017-07-10T08:05:26.598Z") }, "cursors" : { "totalOpen" : 0, "clientCursors_size" : 0, "timedOut" : 60 }, "network" : { "bytesIn" : 5150258135, #流入數據庫總量 "bytesOut" : 10535203727, #從數據庫流出總量 "numRequests" : 32203604 #數據庫總請求數 }, "opcounters" : { "insert" : 6010564, #總insert數據量 "query" : 7507450, #總query數據量 "update" : 573085, #總update數據量 "delete" : 2563194, #總delete數據量 "getmore" : 308, #游標調用的getMore總次數 "command" : 16077462 #執行命令的總次數 }, "asserts" : { "regular" : 0, "warning" : 0, "msg" : 0, "user" : 37, "rollovers" : 0 }, "writeBacksQueued" : false, "recordStats" : { "accessesNotInMemory" : 0, "pageFaultExceptionsThrown" : 0, "org_center" : { "accessesNotInMemory" : 0, "pageFaultExceptionsThrown" : 0 }, "tb_shop" : { "accessesNotInMemory" : 0, "pageFaultExceptionsThrown" : 0 }, "test" : { "accessesNotInMemory" : 0, "pageFaultExceptionsThrown" : 0 } }, "ok" : 1 }
zabbix監控頁面的主要數據開源就是這里。
3、利用zabbix用戶自定義監控功能 userparameter 來監控MongoDB:
3.1、修改zabbix_agentd.conf,允許接受自定義參數:
UnsafeUserParameters=1
3.2、定義數據采集命令:
UserParameter=MongoDB.status[*],/bin/echo "db.serverStatus().$1" |/data/mongodb/bin/mongo admin | grep "$2" | awk -F ':' '{print $$2}' | awk -F ',' '{print $$1}'
注意:不同環境,請注意主機ip和端口號等。
4、zabbix監控頁面新建監控模版、添加監控項、生成圖形:
創建模版:Template App MongoDB(已經手動創建完畢,並創建監控項,需要者可自行下載)
由於監控項眾多,本例只貼出其中一個監控項的配置,如下圖:
需要注意的是 鍵值 項,需和 UserParameter 中定義的格式一致。
5、模版創建完成后,套用到被監控的主機即可。
最終效果如下圖: