zabbix 参数 脚本_python脚本结合zabbix 监控mongodb

本文介绍如何利用Python脚本结合Zabbix监控MongoDB的faults、locked值以及复制集状态,详细阐述了脚本实现、配置Zabbix Agent、创建监控项、触发器和图形的过程。
摘要由CSDN通过智能技术生成

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

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

1.1.1:脚本内容:

#!/bin/env  python#coding:utf-8import  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的监控项:

864e01c949788d37592bd36f3f4b7d33.png

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

fa6604c681e200a04e62a546e25d03ee.png

1.1.6:模板添加触发器:

68693e4ee03585743e4277d8a3962776.png

1.1.7:模板添加图形:

d2ba94bb69aab8518b1bfce1c4e1671a.png

1.1.8:监控结果:

8529e61e62be22cfc638ebc2bda19f6a.png

1.2:监控mongodbDB复制集状态:

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

#!/bin/env  python#coding:utf-8import  subprocesssuccess_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:模板添加监控项:

caeea1da763b4329d30443ed4a75e87d.png

1.2.4:复制集触发器:

5ccef62f995926f32c2d6445354517cf.png

1.2.5:复制集图形:

5bb82e09535d470a37f0cf0b5c9211f2.png

1.2.6:最终的监控图形:

93eb023b597df7843f2adef10439e4df.png

1.3:监控mongodb当前连接数:

1.3.1:脚本内容:

#!/bin/env  python#coding:utf-8import  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:添加到配置文件、添加监控项、添加触发器、添加图形、最终图形:

略略略!

要使用 Zabbix 监控 MongoDB,可以按照以下步骤: 1. 安装 MongoDB 驱动程序:在 Zabbix 服务器或代理上,需要安装 MongoDB 驱动程序以便进行监控。可以使用以下命令在 Linux 上安装 MongoDB 驱动程序: ``` sudo apt-get install python3-pymongo ``` 2. 安装 Zabbix agent:在需要监控 MongoDB 的主机上,需要安装 Zabbix agent。 3. 配置 MongoDB 监控脚本:可以使用以下命令下载 Zabbix 官方提供的 MongoDB 监控脚本: ``` wget https://raw.githubusercontent.com/zabbix/zabbix-community-repos/master/mongodb/mongodb.py ``` 下载脚本后,将其放在 Zabbix agent 的配置目录中,例如在 Linux 上,将其放在 `/etc/zabbix/scripts/` 目录下。 4. 配置 Zabbix agent:在 Zabbix agent 的配置文件中,添加以下内容: ``` UserParameter=mongodb.discovery[*],/usr/bin/python3 /etc/zabbix/scripts/mongodb.py --discovery $1 UserParameter=mongodb.stats[*],/usr/bin/python3 /etc/zabbix/scripts/mongodb.py --stats $1 $2 ``` 这将告诉 Zabbix agent 如何执行 MongoDB 监控脚本。 5. 在 Zabbix 中配置 MongoDB 监控项:在 Zabbix 管理界面中,创建一个新的模板,并为 MongoDB 添加监控项。可以使用 MongoDB 监控脚本中提供的监控项,例如 `mongodb.stats[connections,current]`。 6. 在 Zabbix 中配置 MongoDB 主机:将创建的 MongoDB 监控模板分配给需要监控MongoDB 主机。在 Zabbix 中添加主机时,将其关联到模板并设置相应的主机参数。 7. 启用 MongoDB 监控:在 Zabbix 中启用 MongoDB 监控,并在监控项页面上查看监控数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值