zabbix根据主机和端口列表自动发现监控远程MongoDB实例
admin
2023-04-12 14:41:52
0

在有些情况下,只能使用远程的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
#/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=(',',':'))


显示结果:

{
    "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



模板参见附件

附件:http://down.51cto.com/data/2365000

相关内容

热门资讯

最新引进“微乐陕西三代一究竟有... 网上科普关于“微乐陕西三代一有没有挂”话题很是火热,小编也是针对微乐陕西三代一作*弊开挂的方法以及开...
玩家分享攻略“老友内蒙古麻将究... 玩家分享攻略“老友内蒙古麻将究竟有挂吗?”(详细开挂教程)您好,老友内蒙古麻将这个游戏其实有挂的,确...
今日重大消息“乐驿茶坊开挂器?... 您好:乐驿茶坊这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9752949】很多玩家在这款游戏...
【今日要闻】“爱来掌中宝怎么装... 网上科普关于“爱来掌中宝有没有挂”话题很是火热,小编也是针对爱来掌中宝作*弊开挂的方法以及开挂对应的...
【第一消息】“小南长牌有没有挂... 您好:小南长牌这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在这款游戏...
终于了解“情缘怎么装挂?”(果... 家人们!今天小编来为大家解答情缘透视挂怎么安装这个问题咨询软件客服徽9784099的挂在哪里买很多人...
有意思!成都这些建筑是“算”出... 当你置身于成都凤凰山体育公园那舒展的“飞檐”之下,或是仰望东安湖体育公园屋面上巨大的太阳神鸟,抑或在...
我来教教您“约约麻将可以开挂吗... 您好:约约麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9784099】很多玩家在这款游戏...
巴拿马总统府:立即在原址修复华... 新华社巴拿马城12月28日电(记者许咏政) 巴拿马总统府28日发布公告,明确反对拆毁位于巴拿马运河西...
中到大雪!暴雪!31日河南将迎... 河南即将迎来跨年雪30日夜里到31日雨雪在线随着冷空气与暖湿气流的交汇,明天夜里开始,我省将有新一轮...