您好,登錄后才能下訂單哦!
在有些情況下,只能使用遠(yuǎn)程的MongoDB實(shí)例而不能登錄到MongoDB實(shí)例所在的服務(wù)器上,這時(shí)可以在一臺(tái)服務(wù)器上維護(hù)一個(gè)遠(yuǎn)程MongoDB實(shí)例的主機(jī)和端口列表,然后通過zabbix的低級(jí)發(fā)現(xiàn)功能去根據(jù)主機(jī)和端口自動(dòng)添加相應(yīng)的監(jiān)控。
MongoDB主機(jī)和端口發(fā)現(xiàn)腳步mongodb_discovery.py
主機(jī)和端口列表文件mongodb_servers.txt,文件中存放每個(gè)實(shí)例的主機(jī),端口信息
10.4.9.112:28018:root:xxxx 10.4.9.2:27017:root 10.4.9.3:28018
#/usr/bin/python #This script is used to discovery disk on the server import subprocess import json args='''awk -F':' '{print $1":"$2}' /usr/local/zabbix/bin/mongodb_servers.txt''' t=subprocess.Popen(args,shell=True,stdout=subprocess.PIPE).communicate()[0] mongodbs=[] for mongo in t.split('\n'): if len(mongo) != 0: mongodbs.append({'{#MONGO_HOST}':mongo}) print json.dumps({'data':mongodbs},indent=4,separators=(',',':'))
顯示結(jié)果:
{ "data":[ { "{#MONGO_HOST}":"192.168.5.7:30000" }, { "{#MONGO_HOST}":"192.168.5.7:30001" }, { "{#MONGO_HOST}":"192.168.5.23:30002" }, { "{#MONGO_HOST}":"192.168.5.23:30003" } ] }
2.獲取MongoDB端口狀態(tài)信息腳本discovery_mongodb_status.sh
這里會(huì)根據(jù){#MONGO_HOST}傳來的值在mongodb_servers.txt文件中找到相應(yīng)的行,并以冒號(hào) “:” 判斷整行的長度,然后使用不同的mongodb連接方式
#This script is used to get discovered mongodb servers status #echo "db.serverStatus().uptime"|mongo 192.168.5.23:30002/admin -uroot -pxxxx #echo "db.serverStatus().mem.mapped"|mongo 192.168.5.23:30002/admin -uroot -pxxx #echo "db.serverStatus().globalLock.activeClients.total"|mongo 192.168.5.23:30002/admin -uroot -pxxx # Macro {#MONGO_INFO} "HOSTNAME:PORT:USERNAME:PASSWORD" #sh discovery_mongodb_status.sh uptime {#MONGO_HOST} #sh discovery_mongodb_status.sh mem mapped {#MONGO_HOST} #sh discovery_mongodb_status.sh globalLock activeClients total {#MONGO_HOST} #one more parameter mongo_info="" command_line="" function check_mongo_info() { num=$(echo $mongo_info|awk -F":" '{print NF}') host=$(echo $mongo_info|awk -F":" '{print $1}') port=$(echo $mongo_info|awk -F":" '{print $2}') username=$(echo $mongo_info|awk -F":" '{print $3}') password=$(echo $mongo_info|awk -F":" '{print $4}') case $num in 2) command_line="/data/app_platform/mongodb/bin/mongo $host:$port/admin" ;; 3) command_line="/data/app_platform/mongodb/bin/mongo $host:$port/admin -u$username -p''" ;; 4) command_line="/data/app_platform/mongodb/bin/mongo $host:$port/admin -u$username -p$password" ;; esac } case $# in 2) mongo_info=$(grep $2 /usr/local/zabbix/bin/mongodb_servers.txt) check_mongo_info output=$(/bin/echo "db.serverStatus().$1" |$command_line|sed -n '3p') ;; 3) mongo_info=$(grep $3 /usr/local/zabbix/bin/mongodb_servers.txt) check_mongo_info output=$(/bin/echo "db.serverStatus().$1.$2" |$command_line|sed -n '3p') ;; 4) mongo_info=$(grep $4 /usr/local/zabbix/bin/mongodb_servers.txt) check_mongo_info output=$(/bin/echo "db.serverStatus().$1.$2.$3" |$command_line|sed -n '3p') ;; esac #check if the output contains "NumberLong" if [[ "$output" =~ "NumberLong" ]];then echo $output|sed -n 's/NumberLong(//p'|sed -n 's/)//p' else echo $output fi
顯示結(jié)果:
$sh discovery_mongodb_status.sh uptime 192.168.5.23:30002 23823151 $ sh discovery_mongodb_status.sh mem mapped 192.168.5.23:30002 46691 $ sh discovery_mongodb_status.sh globalLock activeClients total 192.168.5.23:30002 0
3.添加MongoDB自動(dòng)發(fā)現(xiàn)的zabbix配置文件discovery_mongodb_status.conf
#echo "db.serverStatus().mem.mapped"|mongo admin --host xxxx --port xxx -uroot -pxxxx #echo "db.serverStatus().mem.mapped"|mongo 10.4.9.112:28018/admin -uroot -pxxxx #UserParameter=MongoDB.Status[*],/bin/echo "db.serverStatus().$1.$2" |/data/app_platform/mongodb/bin/mongo admin --port 2 8018|sed -n '3p' UserParameter=MongoDB.Discovery,/usr/bin/python /usr/local/zabbix/bin/mongodb_discovery.py UserParameter=MongoDB.Discovery_Status[*],/usr/local/zabbix/bin/discovery_mongodb_status.sh $1 $2 $3 $4
模板參見附件
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。