zabbixはホストとポートリストに基づいてリモートMongoDBインスタンスを自動的に検出監視する


場合によっては、リモートのMongoDBインスタンスしか使用できず、MongoDBインスタンスが存在するサーバにログインできない場合があります.この場合、1台のサーバでリモートのMongoDBインスタンスのホストとポートのリストを維持し、zabbixの低レベル発見機能によってホストとポートに基づいて自動的に監視を追加できます.
  • MongoDBホストとポート発見ステップmongodb_discovery.pyホストとポートリストファイルmongodb_servers.txt,ファイルに各インスタンスが格納ホスト,ポート情報
  • 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

    テンプレート添付ファイルを参照