mongoDBnagiosplugin(check_mongodb.py)BUGresolve
昨天一位同事問我現在我們的mongoDB在用什麼做監控, 實在是慚愧, 一直沒有對mongoDB進行比較細節的監控.
僅僅是監控了伺服器的一些效能指標.
今天趕緊看了一下mongoDB手冊中關於監控的章節.
下面是根據mongoDB官方推薦的幾種監控方式之一, 結合我們正在使用的nagios進行的配置.
前提條件,
1. 需要nagios服務端
2. 在mongoDB所在的伺服器需要安裝nagios agent
3. 在mongoDB所在的伺服器需要python >=2.4的版本 , 我這裡使用的是2.4
4. 在mongoDB所在的伺服器需要pymongo模組
為了簡化安裝步驟, 可以先在mongoDB伺服器上安裝git.
git clone git://github.com/mongodb/mongo-python-driver.git
cd mongo-python-driver
python setup.py install
為了簡化安裝步驟, 可以先在mongoDB伺服器上安裝git.
有了以上前提就可以安裝nagios-plugin-mongodb外掛了.
轉到nagios plugin目錄例如/usr/local/nagios/libexec/
cd /usr/local/nagios/libexec/
git clone git://github.com/mzupan/nagios-plugin-mongodb.git
這就算安裝好了.
cd nagios-plugin-mongodb
chmod 755 check_mongodb.py
使用語法如下 :
./check_mongodb.py -h
usage: check_mongodb.py [options]
This Nagios plugin checks the health of mongodb.
options:
-h, --help show this help message and exit
-H HOST, --host=HOST The hostname you want to connect to
-P PORT, --port=PORT The port mongodb is runnung on
-u USER, --user=USER The username you want to login as
-p PASSWD, --pass=PASSWD
The password you want to use for that user
-W WARNING, --warning=WARNING
The warning threshold we want to set
-C CRITICAL, --critical=CRITICAL
The critical threshold we want to set
-A ACTION, --action=ACTION
The action you want to take
-D, --perf-data Enable output of Nagios performance data
-d DATABASE, --database=DATABASE
Specify the database to check
-s, --ssl Connect using SSL
例如檢查連線連線超時, 2秒警告, 4秒嚴重警告
check_mongodb.py -H 127.0.0.1 -P 2000 -A connect -W 2 -C 4
返回 : OK - Connection took 0 seconds
其他檢測 :
連線池已使用, 70%警告, 80%嚴重警告
check_mongodb.py -H 127.0.0.1 -P 2000 -A connections -W 70 -C 80
複製延時, 15秒警告, 30秒嚴重警告
check_mongodb.py -H 127.0.0.1 -P 2000 -A replication_lag -W 15 -C 30
記憶體使用, 18G警告, 22G嚴重警告(假設本機記憶體是24G)
check_mongodb.py -H 127.0.0.1 -P 2000 -A memory -W 18 -C 22
鎖的耗時比例, 5%警告, 10%嚴重警告(鎖佔用時間長說明資料庫已經超載)
check_mongodb.py -H 127.0.0.1 -P 2000 -A lock -W 5 -C 10
平均flush耗時, 100ms警告, 200ms嚴重警告(FLUSH時間長說明遇到IO寫瓶頸, 或考慮升級硬碟, 或考慮shard)
check_mongodb.py -H 127.0.0.1 -P 2000 -A flushing -W 100 -C 200
最後一次flush的耗時, 100ms警告, 200ms嚴重警告(FLUSH時間長說明遇到IO寫瓶頸, 或考慮升級硬碟, 或考慮shard)
check_mongodb.py -H 127.0.0.1 -P 2000 -A last_flush_time -W 100 -C 200
檢測replicaset中所有節點的狀態, 0, 0 (Depending which status it is it sends a waring during status 0, 3 and 5, critical if the status is 4, 6 or 8 and a ok with status 1, 2 and 7)
check_mongodb.py -H 127.0.0.1 -P 2000 -A replset_state -W 0 -C 0
檢查索引的未命中率, .005警告, .01嚴重警告(值大的話考慮新增索引)
check_mongodb.py -H 127.0.0.1 -P 2000 -A index_miss_ratio -W .005 -C .01
檢查資料庫個數, 300警告, 500嚴重警告
check_mongodb.py -H 127.0.0.1 -P 2000 -A databases -W 300 -C 500
檢查collection個數, 300警告, 500嚴重警告
check_mongodb.py -H 127.0.0.1 -P 2000 -A collections -W 300 -C 500
檢查資料庫大小, 300警告, 500嚴重警告(每個庫一條, 主要用於框定該伺服器可以承受的資料庫大小後, 跟蹤資料庫的增長)
check_mongodb.py -H 127.0.0.1 -P 2000 -A database_size -W 4 -C 10 -d admin
check_mongodb.py -H 127.0.0.1 -P 2000 -A database_size -W 40 -C 45 -d local
check_mongodb.py -H 127.0.0.1 -P 2000 -A database_size -W 300 -C 400 -d digoal
注意, 如果檢查了一個不存在的資料庫, 這個資料庫將被初始化, 佔據空間, 所以需要慎用database_size的檢測.
把這些條目加到/usr/local/nagios/etc/nrpe.cfg中
例如 :
command[check_mongodb_connections]=/usr/local/nagios/libexec/nagios-plugin-mongodb/check_mongodb.py -H 127.0.0.1 -P 2000 -A connections -W 70 -C 80
其他略.
重啟xinetd服務
service xinetd restart
再到nagios服務端配置對應的條目.
略.
【BUG】
在使用過程中發現一些問題,
使用以下程式碼進行跟蹤
import traceback
print "*******
%s********" %traceback.format_exc()
發現check_mongodb.py的第136行有點問題, 呼叫的pymongo.version不存在 :
if pymongo.verison >= "2.1":
後來找到pymongo, 這個函式的名字應該是get_version_string, 所以需要修改以下check_mongodb.py
改成這樣 :
if pymongo.get_version_string >= "2.1":
【參考】