centos7环境下使用python脚本监控mongodb集群复制状态

centos7环境下使用python脚本监控mongodb集群复制状态
centos环境下搭建了 MongoDB 副本集,需要对集群的复制状态进行监控
获取集群的状态信息,集群是3个节点,没有设置仲裁者

[root@eus-image-design-mongo01:/usr/local]# mongo --port 21000
MongoDB shell version v3.4.24
connecting to: mongodb://127.0.0.1:21000/
MongoDB server version: 3.4.24
configs:SECONDARY> use admin
switched to db admin
configs:SECONDARY> db.auth('zabbix','zabbix')
1
configs:SECONDARY> rs.status()
{
        "set" : "configs",
        "date" : ISODate("2020-11-12T08:07:11.216Z"),
        "myState" : 2,
        "term" : NumberLong(4),
        "syncingTo" : "172.30.0.110:21000",
        "syncSourceHost" : "172.30.0.110:21000",
        "syncSourceId" : 2,
        "configsvr" : true,
        "heartbeatIntervalMillis" : NumberLong(2000),
        "optimes" : {
                "lastCommittedOpTime" : {
                        "ts" : Timestamp(1605168428, 2),
                        "t" : NumberLong(4)
                },
                "readConcernMajorityOpTime" : {
                        "ts" : Timestamp(1605168428, 2),
                        "t" : NumberLong(4)
                },
                "appliedOpTime" : {
                        "ts" : Timestamp(1605168428, 2),
                        "t" : NumberLong(4)
                },
                "durableOpTime" : {
                        "ts" : Timestamp(1605168428, 2),
                        "t" : NumberLong(4)
                }
        },
        "members" : [
                {
                        "_id" : 0,
                        "name" : "172.30.0.109:21000",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 8363759,
                        "optime" : {
                                "ts" : Timestamp(1605168428, 2),
                                "t" : NumberLong(4)
                        },
                        "optimeDate" : ISODate("2020-11-12T08:07:08Z"),
                        "syncingTo" : "172.30.0.110:21000",
                        "syncSourceHost" : "172.30.0.110:21000",
                        "syncSourceId" : 2,
                        "infoMessage" : "",
                        "configVersion" : 1,
                        "self" : true,
                        "lastHeartbeatMessage" : ""
                },
                {
                        "_id" : 1,
                        "name" : "172.30.0.108:21000",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 8363758,
                        "optime" : {
                                "ts" : Timestamp(1605168428, 2),
                                "t" : NumberLong(4)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1605168428, 2),
                                "t" : NumberLong(4)
                        },
                        "optimeDate" : ISODate("2020-11-12T08:07:08Z"),
                        "optimeDurableDate" : ISODate("2020-11-12T08:07:08Z"),
                        "lastHeartbeat" : ISODate("2020-11-12T08:07:10.523Z"),
                        "lastHeartbeatRecv" : ISODate("2020-11-12T08:07:10.529Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "",
                        "syncingTo" : "172.30.0.110:21000",
                        "syncSourceHost" : "172.30.0.110:21000",
                        "syncSourceId" : 2,
                        "infoMessage" : "",
                        "configVersion" : 1
                },
                {
                        "_id" : 2,
                        "name" : "172.30.0.110:21000",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 8363758,
                        "optime" : {
                                "ts" : Timestamp(1605168428, 2),
                                "t" : NumberLong(4)
                        },
                        "optimeDurable" : {
                        "lastHeartbeatMessage" : "",
                        "syncingTo" : "172.30.0.110:21000",
                        "syncSourceHost" : "172.30.0.110:21000",
                        "syncSourceId" : 2,
                        "infoMessage" : "",
                        "configVersion" : 1
                },
                {
                        "_id" : 2,
                        "name" : "172.30.0.110:21000",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 8363758,
                        "optime" : {
                                "ts" : Timestamp(1605168428, 2),
                                "t" : NumberLong(4)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1605168428, 2),
                                "t" : NumberLong(4)
                        },
                        "optimeDate" : ISODate("2020-11-12T08:07:08Z"),
                        "optimeDurableDate" : ISODate("2020-11-12T08:07:08Z"),
                        "lastHeartbeat" : ISODate("2020-11-12T08:07:10.506Z"),
                        "lastHeartbeatRecv" : ISODate("2020-11-12T08:07:11.097Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "",
                        "syncingTo" : "",
                        "syncSourceHost" : "",
                        "syncSourceId" : -1,
                        "infoMessage" : "",
                        "electionTime" : Timestamp(1596804656, 1),
                        "electionDate" : ISODate("2020-08-07T12:50:56Z"),
                        "configVersion" : 1
                }
        ],
        "ok" : 1
}
configs:SECONDARY> 

1.编写监控脚本
yum install -y python-pip
pip install pymongo

# vim /usr/local/zabbix_agents/scripts/mongodb-monitor.py 

#coding:utf-8

import pymongo
from pymongo import MongoClient

class check_mongo_repl():
    def __init__(self):
        self.conn = pymongo.MongoClient('mongodb://zabbix:zabbix@127.0.0.1:21000/')
        self.db = self.conn.admin
        self.rs = self.db.command('replSetGetStatus')

    def get_rs_num(self):
        list_values = "Value : %s" %  self.rs.values()
        # 统计 primary和 secondary在字符串中出现的次数,统计主节点和从节点个数之和
        pri_count = list_values.count("PRIMARY")
        #print "pri_count= %s" % pri_count
        sec_count = list_values.count("SECONDARY")
        #print "sec_count= %s" % sec_count
        #get_list = list_values.split(',')
        #a = 0
        #if " u'stateStr': u'SECONDARY'" in get_list:
        #    a += 1
        #if " u'stateStr': u'ARBITER'" in get_list:
        #    a += 1
        return pri_count + sec_count


if __name__ == "__main__":
    mongo = check_mongo_repl()
    print mongo.get_rs_num()

2.在 zabbix_agentd.conf 配置文件中加入监控项
# vim /usr/local/zabbix_agents/conf/zabbix_agentd.conf
UserParameter=mongodb.repl.status,/usr/bin/python /usr/local/zabbix_agents/scripts/mongodb-monitor.py
触发器:
{Template mongodb replication:mongodb.repl.status.count(#5,3,"eq")}=0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值