zabbixはホストとポートリストに基づいてリモートMongoDBインスタンスを自動的に検出監視する
場合によっては、リモートのMongoDBインスタンスしか使用できず、MongoDBインスタンスが存在するサーバにログインできない場合があります.この場合、1台のサーバでリモートのMongoDBインスタンスのホストとポートのリストを維持し、zabbixの低レベル発見機能によってホストとポートに基づいて自動的に監視を追加できます. MongoDBホストとポート発見ステップmongodb_discovery.pyホストとポートリストファイルmongodb_servers.txt,ファイルに各インスタンスが格納ホスト,ポート情報
結果を表示:
2.MongoDBポート状態情報スクリプトdiscovery_の取得mongodb_status.sh
ここでは{#MONGO_HOST}からの値がmongodb_servers.txtファイルで対応する行を見つけ、コロン":"で行全体の長さを判断し、異なるmongodb接続方法を使用します.
結果を表示:
3.MongoDB自動検出のzabbixプロファイルdiscovery_を追加mongodb_status.conf
テンプレート添付ファイルを参照
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('
'):
if len(mongo) != 0:
mongodbs.append({'{#MONGO_HOST}':mongo})
print json.dumps({'data':mongodbs},indent=4,separators=(',',':'))
結果を表示:
{
"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ポート状態情報スクリプトdiscovery_の取得mongodb_status.sh
ここでは{#MONGO_HOST}からの値がmongodb_servers.txtファイルで対応する行を見つけ、コロン":"で行全体の長さを判断し、異なる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
結果を表示:
$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自動検出の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
テンプレート添付ファイルを参照