Home > Database > Mysql Tutorial > zabbix根据主机和端口列表自动发现监控远程MongoDB实例

zabbix根据主机和端口列表自动发现监控远程MongoDB实例

WBOY
Release: 2016-06-07 14:53:05
Original
1086 people have browsed it

在有些情况下,只能使用远程的MongoDB实例而不能登录到MongoDB实例所在的服务器上,这时可以在一台服务器上维护一个远程MongoDB实例的主机和端口列表,然后通过zabbix的低级发现功能去根据主机和端口自动添加相应的监控。 MongoDB主机和端口发现脚步mongodb_

在有些情况下,只能使用远程的MongoDB实例而不能登录到MongoDB实例所在的服务器上,这时可以在一台服务器上维护一个远程MongoDB实例的主机和端口列表,然后通过zabbix的低级发现功能去根据主机和端口自动添加相应的监控。


  1. 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
Copy after login
#/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=(',',':'))
Copy after login


显示结果:

{
    "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"
        }
    ]
}
Copy after login



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
Copy after login


显示结果:

$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
Copy after login


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
Copy after login



模板参见附件

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template