centos7环境下使用python脚本监控mongodb集群复制状态-程序员宅基地

技术标签: zabbix  zookeeper  hadoop  分布式  大数据  

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:[email protected]: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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/reblue520/article/details/109666859

智能推荐

Microsoft Detours 2.1简介 (支持64位)_x64 detourattach-程序员宅基地

本文从主站点转贴过来的,附件和pdf请访问http://www.DbgTech.net/下载一、简介《Windows高级调试》第一章中提到了一个基于Microsoft Detours库的内存泄露检查工具LeakDiag。本文对这个库进行一些介绍。一句话来说,Detours是一个用来在二进制级别上对程序中的函数(Function)或者过程(Procedure)进行修改的工具库_x64 detourattach

Arcgis与ENVI中tif格式读取的一个问题-程序员宅基地

在将arcgis中裁切过的影像转化为tif格式后,出现了在envi4.5中无法显示灰度的问题。几经周折,发现:在输出数据时,output raster内容中要选择use Renderer(不选的话,data数据也无错误,但ENVI显示为白色)。 其原因目前还不清楚。

【WebService 系列一 WebService概述】-程序员宅基地

为什么80%的码农都做不了架构师?>>> ...

利用ARKit实现直播系统场景虚拟化_swift arkit采用激光雷达扫描时, 如何让背景虚化-程序员宅基地

利用ARKit实现直播系统场景虚拟化今年7月Apple推出了AR工具ARKit,着实闪着了大家的眼睛。从目前的评测可以知道 ARKit已经非常成熟,完全可以进行商用了。在iOS中,增强现实由ARKit和渲染两部分组成。ARKit主要负责AR计算,它将ARCamera捕获的视频帧当作背景,使用视觉惯性测距(VIO)来精确跟踪周围的世界,进行坐标转换,场景搭建及平面的捕获;然后,通过 SceneKit(3D)/SpritKit(2D) 或 Metal 库进行渲染,使虚拟物体与真实世界相接合,达到增强现实_swift arkit采用激光雷达扫描时, 如何让背景虚化

JS--位异或加密_js异或加密-程序员宅基地

最近做了一个需求,传输数据的时候需要将信息进行按位异或3位进行加密。实现方法如下:<!DOCTYPE html><html><body><h2>JavaScript 异或加密^_^ </h2><p id="demo">^_^</p><script> // 按位异或 加密 var ..._js异或加密

大整数加法_大整数加法,把一个大整数存储在数组中,将大整数每一位数字存储在数组元素中-程序员宅基地

#include<stdio.h>#include<string.h>int main() {char a[201],b[201],h;//定义两个字符串,用来储存输入的数int c,d,e,f,i,j,k[202]={0},l,m=0,n=0;//定义一个数组来储存要输出的数,注意数组的长度gets(a);gets(b);c=strlen(a);d=str..._大整数加法,把一个大整数存储在数组中,将大整数每一位数字存储在数组元素中

随便推点

Dockerfile(docker centos7 上安装jdk和tomcat)-程序员宅基地

16 Dockerfile 示例1centos7 上安装jdk和tomcat16.1 拉取centos镜像docker pull centos16.2 编写Dockerfile文件FROM centos MAINTAINER guoguo <[email protected]>#ENV REFRESHED_AT 2019-03-10#切换镜像目录,进入/usr目录WORKDIR /usr#在/usr/下创建jdk目录,用来存放jdk文件RUN mkdir j

Django-拆分model(一个模块一个model)_django models拆分成多个文件baocuo-程序员宅基地

大多数Django教程都是将models放在models.py文件(模块)中, 然而随着models类的增加, 将类放在一个文件中太混乱了, 于是将models做成一个package: models/ __init__.py usermodels.py othermodel.py 这样就可以将models定义拆分到多个模块中, 但是当用命令同步数据时发现不..._django models拆分成多个文件baocuo

我们在谈论web/web应用/web开发时,到底再说什么?-程序员宅基地

因为强迫症,有些问题我必须搞清楚。现在好像只要是个程序员,就会和你讨论web,web应用,web开发,其实我一直都很模糊,web到底指的是什么,他的前世今生又是怎么样的呢?我们在谈论的时候,是不是真正说到点上了呢?带着这些疑问,我开始疯狂的google和百度……终于让我有了一点儿自己的认识。还涉及到的一些关键词:internet / http/ html/ css/ jsp百度上搜到的文章基本上都是

xcode APP 打包以及提交apple审核详细流程(新版本更新提交审核)-程序员宅基地

最近项目到了最后的阶段,测试完一切ok后,准备打包以及提交,不料看到网上众教程,好多都是老版本的,现在IDE实现方式改了,那些方法好多都找不到,绕了一大圈,才搞明白流程,现在记录下来,以便朋友们查阅。开发环境:xcode4.4.1iphonesdk:5.1.1开发机器:macBookAir真机部署测试:apple个人开发者ID无论是ios7或是现在的x...

Java实时监控日志文件并输出_java前台实时显示日志-程序员宅基地

最近有一个银行数据漂白系统,要求操作人员在页面调用远端Linux服务器的shell,并将shell输出的信息保存到一个日志文件,前台页面要实时显示日志文件的内容.这个问题难点在于如何判断哪些数据是新增加的,通过查看JDK 的帮助文档, java.io.RandomAccessFile可以解决这个问题.为了模拟这个问题,编写LogSvr和 LogView类,LogSvr不断向mock.log日志文..._java前台实时显示日志

jquery(1.3.2)<--json-->spring(3.0) (转自seara520的博客:http://seara520.blog.163.com/blog/static/168127698...-程序员宅基地

发现spring3已经对ajax支持的很好了,前端可以只使用html+jquery,后端只使用spring再加上一种orm,两者之间用json交换数据就可以了,现在是放弃jsp,struts这些已经显得累赘的技术的时候了。出于这种想法,我做了个小试验,其中之所以选择jquery1.3.2是因为jqueryui1.8还不是稳定版,而稳定版1.7是基于jquery1.3+的。1.先..._method) jquerystatic.getjson(url: string, success_data?: string | jquery.jqx