mongoDB nagios plugin (check_mongodb.py) BUG resolve

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介:
昨天一位同事问我现在我们的mongoDB在用什么做监控, 实在是惭愧, 一直没有对mongoDB进行比较细节的监控. 
仅仅是监控了服务器的一些性能指标.
今天赶紧看了一下mongoDB手册中关于监控的章节. 
下面是根据mongoDB官方推荐的几种监控方式之一, 结合我们正在使用的nagios进行的配置.
前提条件,
1. 需要nagios服务端
2. 在mongoDB所在的服务器需要安装nagios agent
3.  在mongoDB所在的服务器需要python >=2.4的版本 , 我这里使用的是2.4
4.  在mongoDB所在的服务器需要pymongo模块
   git clone git://github.com/mongodb/mongo-python-driver.git
    cd mongo-python-driver
    python setup.py install


为了简化安装步骤, 可以先在mongoDB服务器上安装git. 
有了以上前提就可以安装nagios-plugin-mongodb插件了.
转到nagios plugin目录例如/usr/local/nagios/libexec/
cd /usr/local/nagios/libexec/
git clone git://github.com/mzupan/nagios-plugin-mongodb.git

这就算安装好了.
cd nagios-plugin-mongodb
chmod 755 check_mongodb.py

使用语法如下 : 
./check_mongodb.py -h
usage: check_mongodb.py [options]

This Nagios plugin checks the health of mongodb.

options:
  -h, --help            show this help message and exit
  -H HOST, --host=HOST  The hostname you want to connect to
  -P PORT, --port=PORT  The port mongodb is runnung on
  -u USER, --user=USER  The username you want to login as
  -p PASSWD, --pass=PASSWD
                        The password you want to use for that user
  -W WARNING, --warning=WARNING
                        The warning threshold we want to set
  -C CRITICAL, --critical=CRITICAL
                        The critical threshold we want to set
  -A ACTION, --action=ACTION
                        The action you want to take
  -D, --perf-data       Enable output of Nagios performance data
  -d DATABASE, --database=DATABASE
                        Specify the database to check
  -s, --ssl             Connect using SSL

例如检查连接连接超时, 2秒警告, 4秒严重警告
check_mongodb.py -H 127.0.0.1 -P 2000 -A connect -W 2 -C 4
返回 : OK - Connection took 0 seconds

其他检测 : 
连接池已使用, 70%警告, 80%严重警告
check_mongodb.py -H 127.0.0.1 -P 2000 -A connections -W 70 -C 80
复制延时, 15秒警告, 30秒严重警告
check_mongodb.py -H 127.0.0.1 -P 2000 -A replication_lag -W 15 -C 30
内存使用, 18G警告, 22G严重警告(假设本机内存是24G)
check_mongodb.py -H 127.0.0.1 -P 2000 -A memory -W 18 -C 22
锁的耗时比例, 5%警告, 10%严重警告(锁占用时间长说明数据库已经超载)
check_mongodb.py -H 127.0.0.1 -P 2000 -A lock -W 5 -C 10
平均flush耗时, 100ms警告, 200ms严重警告(FLUSH时间长说明遇到IO写瓶颈, 或考虑升级硬盘, 或考虑shard)
check_mongodb.py -H 127.0.0.1 -P 2000 -A flushing -W 100 -C 200
最后一次flush的耗时, 100ms警告, 200ms严重警告(FLUSH时间长说明遇到IO写瓶颈, 或考虑升级硬盘, 或考虑shard)
check_mongodb.py -H 127.0.0.1 -P 2000 -A last_flush_time -W 100 -C 200
检测replicaset中所有节点的状态, 0, 0 (Depending which status it is it sends a waring during status 0, 3 and 5, critical if the status is 4, 6 or 8 and a ok with status 1, 2 and 7)
check_mongodb.py -H 127.0.0.1 -P 2000 -A replset_state -W 0 -C 0
检查索引的未命中率, .005警告, .01严重警告(值大的话考虑添加索引)
check_mongodb.py -H 127.0.0.1 -P 2000 -A index_miss_ratio -W .005 -C .01
检查数据库个数, 300警告, 500严重警告
check_mongodb.py -H 127.0.0.1 -P 2000 -A databases -W 300 -C 500
检查collection个数, 300警告, 500严重警告
check_mongodb.py -H 127.0.0.1 -P 2000 -A collections -W 300 -C 500
检查数据库大小, 300警告, 500严重警告(每个库一条, 主要用于框定该服务器可以承受的数据库大小后, 跟踪数据库的增长)
check_mongodb.py -H 127.0.0.1 -P 2000 -A database_size -W 4 -C 10 -d admin
check_mongodb.py -H 127.0.0.1 -P 2000 -A database_size -W 40 -C 45 -d local
check_mongodb.py -H 127.0.0.1 -P 2000 -A database_size -W 300 -C 400 -d digoal
注意, 如果检查了一个不存在的数据库, 这个数据库将被初始化, 占据空间, 所以需要慎用database_size的检测.

把这些条目加到/usr/local/nagios/etc/nrpe.cfg中
例如 :
command[check_mongodb_connections]=/usr/local/nagios/libexec/nagios-plugin-mongodb/check_mongodb.py -H 127.0.0.1 -P 2000 -A connections -W 70 -C 80
其他略.

重启xinetd服务
service xinetd restart

再到nagios服务端配置对应的条目.
略.

【BUG】
在使用过程中发现一些问题, 
使用以下代码进行跟踪
       import traceback
        print "*******\n%s********" %traceback.format_exc()

发现check_mongodb.py的第136行有点问题, 调用的pymongo.version不存在 : 
if pymongo.verison >= "2.1":

后来找到pymongo, 这个函数的名字应该是get_version_string, 所以需要修改以下check_mongodb.py
目录
相关文章
|
存储 JSON NoSQL
暂缓MongoDB 4.4.2 、4.4.3、 4.4.4版本升级: 存在严重Bug
暂缓MongoDB 4.4.2 、4.4.3、 4.4.4版本升级: 存在严重Bug
361 0
暂缓MongoDB 4.4.2 、4.4.3、 4.4.4版本升级: 存在严重Bug
|
NoSQL 数据库 MongoDB
在测试Adhesive的时候发现一个Mongodb官方驱动1.1.0.4184比较严重的BUG
在测试Adhesive的时候发现,使用过一段时间后台之后,就会不能连接到数据库,查看日志发现报的错误大致是 connection refused because too many open connections: 819 通过mongostat查看连接数的确很夸张有近819个连接,尝试在启动的...
921 0
|
3月前
|
NoSQL MongoDB 数据库
数据库数据恢复—MongoDB数据库数据恢复案例
MongoDB数据库数据恢复环境: 一台操作系统为Windows Server的虚拟机上部署MongoDB数据库。 MongoDB数据库故障: 工作人员在MongoDB服务仍然开启的情况下将MongoDB数据库文件拷贝到其他分区,数据复制完成后将MongoDB数据库原先所在的分区进行了格式化操作。 结果发现拷贝过去的数据无法使用。管理员又将数据拷贝回原始分区,MongoDB服务仍然无法使用,报错“Windows无法启动MongoDB服务(位于 本地计算机 上)错误1067:进程意外终止。”
|
3月前
|
缓存 NoSQL Linux
在CentOS 7系统中彻底移除MongoDB数据库的步骤
以上步骤完成后,MongoDB应该会从您的CentOS 7系统中被彻底移除。在执行上述操作前,请确保已经备份好所有重要数据以防丢失。这些步骤操作需要一些基本的Linux系统管理知识,若您对某一步骤不是非常清楚,请先进行必要的学习或咨询专业人士。在执行系统级操作时,推荐在实施前创建系统快照或备份,以便在出现问题时能够恢复到原先的状态。
277 79
|
3月前
|
存储 NoSQL MongoDB
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
176 8
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
|
2月前
|
运维 NoSQL 容灾
告别运维噩梦:手把手教你将自建 MongoDB 平滑迁移至云数据库
程序员为何逃离自建MongoDB?扩容困难、运维复杂、高可用性差成痛点。阿里云MongoDB提供分钟级扩容、自动诊断与高可用保障,助力企业高效运维、降本增效,实现数据库“无感运维”。
|
6月前
|
NoSQL MongoDB 数据库
数据库数据恢复——MongoDB数据库服务无法启动的数据恢复案例
MongoDB数据库数据恢复环境: 一台Windows Server操作系统虚拟机上部署MongoDB数据库。 MongoDB数据库故障: 管理员在未关闭MongoDB服务的情况下拷贝数据库文件。将MongoDB数据库文件拷贝到其他分区后,对MongoDB数据库所在原分区进行了格式化操作。格式化完成后将数据库文件拷回原分区,并重新启动MongoDB服务。发现服务无法启动并报错。