python脚本结合zabbix 监控mongodb

Posted 老男孩Linux

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python脚本结合zabbix 监控mongodb相关的知识,希望对你有一定的参考价值。



一:因业务场景不同,部分业务需要使用mongodb,特写了如下几个python 小脚本配合zabbix 进行监控并根据不同的触发条件进行短信报警,具体如下:

python脚本结合zabbix 监控mongodb


1.1:监控mongodb的faults和locked值,调用python 脚本的时候通过传递变量判断第一个变量如果是faults就执行faults对应的函数,如果第一个参数是locked就执行locked对应的函数,并传递第二个参数为库的名称,然后执行不同的操作并返回不同的值

1.1.1:脚本内容:

#!/bin/env  python#coding:utf-8#Author: ZhangJieimport  subprocessimport  sysdef mongodb_faults_num():
   obj = subprocess.Popen(("/usr/local/mongodb/bin/mongostat -u user -p pswd--authenticationDatabase admin -rowcount 10 2 | tail -n10 \
| awk '{print $11}' | tail -n10"),shell=True, stdout=subprocess.PIPE)
   restful =  obj.stdout.read()
   data = restful.split()
   print max(data) #取出统计结果中最大的一个值传递给zabbixdef mongodb_locked_num(dbname):
   obj = subprocess.Popen(("/usr/local/mongodb/bin/mongostat -u user-p pswd  --authenticationDatabase admin -rowcount 10 2 | tail -n10 \
| grep %s | awk '{print $12}'  | awk -F':' '{print $2}' | awk -F'%%' '{print $1}'" % dbname),shell=True, stdout=subprocess.PIPE)
   restful =  obj.stdout.read()
   data = restful.split()
   print max(data) #取出统计结果中最大的一个值传递给zabbixdef main():
   if sys.argv[1] == "faults":
       mongodb_faults_num()
   elif sys.argv[1] == "locked": #如果第一个参数是locket
       dbname=sys.argv[2] #将第二个参数赋值给dbname
       mongodb_locked_num(dbname) #执行函数mongodb_locked_num并传递参数dbname
   else:
       passif __name__ == "__main__":
   main()

1.1.2:将脚本添加到配置文件并重启zabbix_agentd服务:

UserParameter=mongodb_faults_locked[*],/usr/bin/python /apps/zabbix_agent/etc/zabbix_agentd.conf.d/mongodb_faults_locked.py "$1" "$2"


1.1.3:此脚本里面有两个10秒执行的函数,但zabbix 默认超时时间为3秒,因此需要更改zabbix agent与zabbix server的配置文件并重启服务,如果执行已经更改为30秒就不用再更改了,注最大30秒:

[root@saltstack-master ~]# salt "*"  cmd.run  "sed -i 's/^\# Timeout=3/Timeout=30/g' /apps/zabbix_agent/etc/zabbix_agentd.conf"[root@saltstack-master ~]# salt "*"  cmd.run  "service zabbix_agentd restart" #通过saltstack批量更改所以zabbix客户的配置文件并重启zabbix_agentd服务[root@zabbix-server ~]# sed -i 's/^\# Timeout=3/Timeout=30/g'   /usr/local/zabbix/etc/zabbix_server.conf[root@zabbix-server ~]# /etc/init.d/zabbix_server  restart #更改zabbix_server配置文件并重启zabbix_Server服务

1.1.4:在mongodb模板里面添加faults的监控项:

python脚本结合zabbix 监控mongodb

1.1.5:在mongodb模板里面添加locket的监控项:

python脚本结合zabbix 监控mongodb

1.1.6:模板添加触发器:

python脚本结合zabbix 监控mongodb

1.1.7:模板添加图形:

python脚本结合zabbix 监控mongodb

1.1.8:监控结果:

python脚本结合zabbix 监控mongodb

1.2:监控mongodbDB复制集状态

1.2.1:python脚本内容,主要是取出来各mongodb服务器的health值然后附加到两个列表,然后判断值为0的列表长度是否大于0或者判断health值为1的列表长度是否小于服务器的数量,假如所有mongodb节点的health值都正常就输出50,如果有任何一个不为1就输出100,内容如下

:

#!/bin/env  python#coding:utf-8#Author: ZhangJieimport  subprocess
success_list = []error_list= []def get_mongodb_status():
   obj = subprocess.Popen(("echo 'rs.status()' | /usr/local/mongodb/bin/mongo  -u user -p wswd  --authenticationDatabase admin \
| grep health | awk -F':' '{print $2}' | awk -F',' '{print $1}'"),shell=True, stdout=subprocess.PIPE)
   restful =  obj.stdout.read()
   data = restful.split()
   for i in data:
       if i == "1":
           success_list.append(i)
       else:
           error_list.append(i)def count_status():
   if len(error_list) > 0:
       print 100
   else:
       print 50def main():
   get_mongodb_status()
   count_status()if __name__ == "__main__":
   main()

1.2.2:将脚本添加到配置文件并重启zabbix_agentd服务:


UserParameter=mongodb_cluster_check[*],/usr/bin/python /apps/zabbix_agent/etc/zabbix_agentd.conf.d/mongodb_cluster_monitor.py

1.2.3:模板添加监控项:


python脚本结合zabbix 监控mongodb

1.2.4:复制集触发器:

python脚本结合zabbix 监控mongodb

1.2.5:复制集图形:

python脚本结合zabbix 监控mongodb

1.2.6:最终的监控图形:

python脚本结合zabbix 监控mongodb

1.3:监控mongodb当前连接数

1.3.1:脚本内容:


#!/bin/env  python#coding:utf-8#Author: ZhangJieimport  subprocessdef mongodb_user_connections():
   obj = subprocess.Popen(("echo 'db.serverStatus()' | /usr/local/mongodb/bin/mongo  -u user -p pswd  --authenticationDatabase admin | grep current | head -n1 | awk -F':' '{print $2}' | awk -F',' '{print $1}' |  sed 's/\ //g'"),shell=True, stdout=subprocess.PIPE)
   restful =  obj.stdout.read()
   print restfuldef main():
   mongodb_user_connections()if __name__ == "__main__":
   main()

1.3.2:添加到配置文件、添加监控项、添加触发器、添加图形、最终图形:

python脚本结合zabbix 监控mongodb

解锁更多精彩内幕

更多IT技术性文章和福利活动

以上是关于python脚本结合zabbix 监控mongodb的主要内容,如果未能解决你的问题,请参考以下文章

zabbix-v4.0系列-zabbix如何监控mongodb-v4.0.13分片集群

zabbix自定义脚本做监控及自制模板初探

zabbix监控mongod

Zabbix结合bat脚本实现多个应用程序状态监控

Zabbix结合bat脚本实现多个应用程序状态监控

Zabbix 结合 Grafana 实现酷炫监控