您好,欢迎访问一九零五行业门户网

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

在有些情况下,只能使用远程的mongodb实例而不能登录到mongodb实例所在的服务器上,这时可以在一台服务器上维护一个远程mongodb实例的主机和端口列表,然后通过z
在有些情况下,只能使用远程的mongodb实例而不能登录到mongodb实例所在的服务器上,这时可以在一台服务器上维护一个远程mongodb实例的主机和端口列表,,然后通过zabbix的低级发现功能去根据主机和端口自动添加相应的监控。
mongodb主机和端口发现脚步mongodb_discovery.py
主机和端口列表文件mongodb_servers.txt,文件中存放每个实例的主机,端口信息
10.4.9.112:28018:root:xxxx10.4.9.2:27017:root10.4.9.3:28018#/usr/bin/python#this script is used to discovery disk on the serverimport subprocessimport jsonargs='''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=(',',':'))
显示结果:
{    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 parametermongo_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 numberlongif [[ $output =~ numberlong   ]];then  echo $output|sed -n 's/numberlong(//p'|sed -n 's/)//p'else   echo $outputfi
其它类似信息

推荐信息