Nagios监控mongodb分片集群服务实战

1,监控插件下载

Mongodb插件下载地址为:git clone git://github.com/mzupan/nagios-plugin-mongodb.git,刚开始本人这里没有安装gitpub环境,找网友草根帮忙下载的,之后上传到了csdn资源页面,新的下载地址为:http://download.csdn.net/detail/mchdba/8019077

2,添加新的mongodb监控命令

因为mongodb服务是和mysql从库公用一台物理机,之前已经做了基础nagios以及mysql服务监控,所以这里只需要在原来的基础上添加mongodb命令和服务即可。Nagios监控mysql请参考:http://blog.itpub.net/26230597/viewspace-760141/以及http://blog.itpub.net/26230597/viewspace-1217246/。所以这里需要添加的mongodb监控命令如下所示:

[[email protected] objects]# cd /usr/local/nagios/etc/objects
[[email protected] objects]# vim commands.cfg
define command {
    command_name check_mongodb
    command_line $USER1$/nagios-plugin-mongodb/check_mongodb.py -H $HOSTADDRESS$ -A $ARG1$ -P $ARG2$ -W $ARG3$ -C $ARG4$
}

define command {
    command_name check_mongodb_database
    command_line $USER1$/nagios-plugin-mongodb/check_mongodb.py -H $HOSTADDRESS$ -A $ARG1$ -P $ARG2$ -W $ARG3$ -C $ARG4$ -d $ARG5$
}

define command {
    command_name check_mongodb_collection
    command_line $USER1$/nagios-plugin-mongodb/check_mongodb.py -H $HOSTADDRESS$ -A $ARG1$ -P $ARG2$ -W $ARG3$ -C $ARG4$ -d $ARG5$ -c $ARG6$
}

define command {
    command_name check_mongodb_replicaset
    command_line $USER1$/nagios-plugin-mongodb/check_mongodb.py -H $HOSTADDRESS$ -A $ARG1$ -P $ARG2$ -W $ARG3$ -C $ARG4$ -r $ARG5$
}

define command {
    command_name check_mongodb_query
    command_line $USER1$/nagios-plugin-mongodb/check_mongodb.py -H $HOSTADDRESS$ -A $ARG1$ -P $ARG2$ -W $ARG3$ -C $ARG4$ -q $ARG5$
}

3,添加mongodb监控服务

mongodb的服务也需要单独重新添加,如下所示:


#检测mongodb服务的连接时间,超过2秒就普通报警,5秒就严重报警
define service{
        host_name dbm1slave1
        service_description Mongo Connect Check
        check_command check_mongodb!connect!30000!2!5
        max_check_attempts 5
        normal_check_interval 3
        retry_check_interval 2
        check_period 24x7
        notification_interval 10
        notification_period 24x7
        notification_options w,u,c,r
        contact_groups ops
        }

#检查mongodb的连接数,超过150普通报警,200严重报警
define service{
        host_name dbm1slave1
        service_description Mongo Free Connections
        check_command check_mongodb!connections!27017!70!80
        max_check_attempts 5
        normal_check_interval 3
        retry_check_interval 2
        check_period 24x7
        notification_interval 10
        notification_period 24x7
        notification_options w,u,c,r
        contact_groups ops
        }

#检查mongodb复制完成的百分比率,确保primary和standby的time是一致的。
define service{
        host_name dbm1slave1
        service_description Mongo Replication Lag
        check_command check_mongodb!replication_lag!27017!15!30
        max_check_attempts 5
        normal_check_interval 3
        retry_check_interval 2
        check_period 24x7
        notification_interval 10
        notification_period 24x7
        notification_options w,u,c,r
        contact_groups ops
        }

#检查mongodb内存使用率,阀值与mongodb所在机器的总内存数相关
define service{
        host_name dbm1slave1
        service_description Mongo Memory Usage
        check_command check_mongodb!memory!27017!20!28
        max_check_attempts 5
        normal_check_interval 3
        retry_check_interval 2
        check_period 24x7
        notification_interval 10
        notification_period 24x7
        notification_options w,u,c,r
        contact_groups ops
        }

#检查mongodb Mapped的内存使用率,阀值与mongodb所在机器的总内存数相关
define service{
        host_name dbm1slave1
        service_description Mongo Mapped Memory Usage
        check_command check_mongodb!memory_mapped!27017!20!28
        max_check_attempts 5
        normal_check_interval 3
        retry_check_interval 2
        check_period 24x7
        notification_interval 10
        notification_period 24x7
        notification_options w,u,c,r
        contact_groups ops
        }

#检查Lock Time的百分率,如果lock time占据mongo运行时间的5%就普通报警,如果超过10%就严重报警
define service{
        host_name dbm1slave1
        service_description Mongo Lock Percentage
        check_command check_mongodb!lock!27017!5!10
        max_check_attempts 5
        normal_check_interval 3
        retry_check_interval 2
        check_period 24x7
        notification_interval 10
        notification_period 24x7
        notification_options w,u,c,r
        contact_groups ops
        }

# Check Average Flush Time,检查mongo服务器的平均flush时间,
define service{
        host_name dbm1slave1
        service_description Mongo Flush Average
        check_command check_mongodb!flushing!27017!100!200
        max_check_attempts 5
        normal_check_interval 3
        retry_check_interval 2
        check_period 24x7
        notification_interval 10
        notification_period 24x7
        notification_options w,u,c,r
        contact_groups ops
        }

# Check Last Flush Time,检查最新的flush时间,如果超过200ms就普通报警,超过400ms就严重报警
define service{
        host_name dbm1slave1
        service_description Mongo Last Flush Time
        check_command check_mongodb!last_flush_time!27017!200!400
        max_check_attempts 5
        normal_check_interval 3
        retry_check_interval 2
        check_period 24x7
        notification_interval 10
        notification_period 24x7
        notification_options w,u,c,r
        contact_groups ops
        }

# Check status of mongodb replicaset,检查mongo复制的状态
define service{
        host_name dbm1slave1
        service_description MongoDB state
        check_command check_mongodb!replset_state!27017!0!0
        max_check_attempts 5
        normal_check_interval 3
        retry_check_interval 2
        check_period 24x7
        notification_interval 10
        notification_period 24x7
        notification_options w,u,c,r
        contact_groups ops
        }

# Check status of index miss ratio,检查索引命中率,
define service{
        host_name dbm1slave1
        service_description MongoDB Index Miss Ratio
        check_command check_mongodb!index_miss_ratio!27017!.005!.01
        max_check_attempts 5
        normal_check_interval 3
        retry_check_interval 2
        check_period 24x7
        notification_interval 10
        notification_period 24x7
        notification_options w,u,c,r
        contact_groups ops
        }

# Check number of databases and number of collections
define service{
        host_name dbm1slave1
        service_description MongoDB Number of databases
        check_command check_mongodb!databases!27017!300!500
        max_check_attempts 5
        normal_check_interval 3
        retry_check_interval 2
        check_period 24x7
        notification_interval 10
        notification_period 24x7
        notification_options w,u,c,r
        contact_groups ops
        }
define service{
        host_name dbm1slave1
        service_description MongoDB Number of collections
        check_command check_mongodb!collections!27017!300!500
        max_check_attempts 5
        normal_check_interval 3
        retry_check_interval 2
        check_period 24x7
        notification_interval 10
        notification_period 24x7
        notification_options w,u,c,r
        contact_groups ops
        }        

# Check size of a database,检查库的大小
define service{
        host_name dbm1slave1
        service_description MongoDB Database size your-database
        check_command check_mongodb_database!database_size!27017!300!500!your-database
        max_check_attempts 5
        normal_check_interval 3
        retry_check_interval 2
        check_period 24x7
        notification_interval 10
        notification_period 24x7
        notification_options w,u,c,r
        contact_groups ops
        }                

# Check index size of a database,检查库索引的大小
define service{
        host_name dbm1slave1
        service_description MongoDB Database index size your-database
        check_command check_mongodb_database!database_indexes!27017!50!100!your-database
        max_check_attempts 5
        normal_check_interval 3
        retry_check_interval 2
        check_period 24x7
        notification_interval 10
        notification_period 24x7
        notification_options w,u,c,r
        contact_groups ops
        }            

# Check index size of a collection,检查集合collection的索引大小
define service{
        host_name dbm1slave1
        service_description MongoDB Database index size your-database
        check_command check_mongodb_collection!collection_indexes!27017!50!100!your-database!your-collection
        max_check_attempts 5
        normal_check_interval 3
        retry_check_interval 2
        check_period 24x7
        notification_interval 10
        notification_period 24x7
        notification_options w,u,c,r
        contact_groups ops
        }

# Check the primary server of replicaset,检查复制的primary服务
define service{
        host_name dbm1slave1
        service_description MongoDB Replicaset Master Monitor: your-replicaset
        check_command check_mongodb_replicaset!replica_primary!27017!0!1!your-replicaset
        #示例:check_command check_mongodb_replicaset!replica_primary!27017!0!1!shard2
        max_check_attempts 5
        normal_check_interval 3
        retry_check_interval 2
        check_period 24x7
        notification_interval 10
        notification_period 24x7
        notification_options w,u,c,r
        contact_groups ops
        }

# Check the number of queries per second,检查每一秒的查询数量
define service{
        host_name dbm1slave1
        service_description MongoDB Updates per Second
        check_command check_mongodb_query!queries_per_second!27017!200!150!update
        max_check_attempts 5
        normal_check_interval 3
        retry_check_interval 2
        check_period 24x7
        notification_interval 10
        notification_period 24x7
        notification_options w,u,c,r
        contact_groups ops
        }

# Check Primary Connection,检查复制中与primary库的连接时间,超过2秒就普通报警,超过4秒就严重报警
define service{
        host_name dbm1slave1
        service_description Mongo Connect Check
        check_command check_mongodb!connect_primary!27017!2!4
        max_check_attempts 5
        normal_check_interval 3
        retry_check_interval 2
        check_period 24x7
        notification_interval 10
        notification_period 24x7
        notification_options w,u,c,r
        contact_groups ops
        }

# Check Collection State,检查collection状态,检查mongo服务组列表的每一个主机,可以检查重要collection的高可用性(锁、超时、服务配置的可用性),如果发现一个查询失败就会报警。
define service{
        host_name dbm1slave1
        service_description Mongo Collection State
        check_command check_mongodb!collection_state!27017!your-database!your-collection
        max_check_attempts 5
        normal_check_interval 3
        retry_check_interval 2
        check_period 24x7
        notification_interval 10
        notification_period 24x7
        notification_options w,u,c,r
        contact_groups ops
        }


4,查看部分监控项效果

配置完nagios端服务,重启下service nagios restart; 等上几分钟,nagios监控界面就会出现完整的mongo服务信息,如下所示:


5
,从ps中确定mongodb的架构

[[email protected] ~]# ps -eaf|grep mongo

mongodb   2457     1  0  2013 ?        2-03:39:08 ./mongod --configsvr --dbpath /home/data/mongodb/config --port 20000 --logpath /home/data/mongodb/config.log --logappend --fork

mongodb   2804     1  0  2013 ?        1-10:02:33 mongos --configdb 192.168.12.62:20000,192.168.12.63:20000,192.168.12.72:20000 --port 30000 --chunkSize 64 --logpath /home/data/mongodb/mongos.log --logappend --fork

mongodb   3072     1  0  2013 ?        1-10:17:20 mongod --shardsvr --replSet shard1 --port 27017 --dbpath /home/data/mongodb/shard11 --oplogSize 2048 --logpath /home/data/mongodb/shard11.log --logappend --fork

root     11179  9391  0 11:14 pts/1    00:00:00 grep mongo

mongodb  30414     1  0 Feb14 ?        1-06:20:50 mongod --shardsvr --replSet shard2 --port 27018 --dbpath /home/data/mongodb/shard21 --oplogSize 2048 --logpath /home/data/mongodb/shard21.log --logappend --fork

[[email protected] ~]#

看到有4个mongo进程,

a)         启动参数有“--configdb”的就是集群入口进程;

b)         Shard Server,启动参数带“--shardsvr --replSet”的是集群分片的一个片组启动进程,用户存储实际的数据块,也就是27017端口和27018端口的mongodb服务实例。至于如何判断27017端口中哪个是primary哪个是secondary需要去登录27107端口执行rs.status();去查看一下。

c)         Config Server:启动参数带“--configsvr”的进程,存储了整个Cluster Metadata,其中包括chunk信息,也就是20000端口的mongodb服务实例。

d)         Route Server:启动参数带“mongos --configdb”的进程,前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用,也就是30000端口的mongodb实例。


6,调试中出现过的错误

错误1:

[[email protected] nagios ~]# tail -f /usr/local/nagios/var/nagios.log

[1412819956] Warning: Return code of 13 for check of service ‘Mongo Memory Usage‘ on host ‘dbm1slave1‘ was out of bounds.

[1412819956] SERVICE ALERT: dbm1slave1;Mongo Memory Usage;CRITICAL;SOFT;1;(Return code of 13 is out of bounds)

[1412819975] Warning: Return code of 13 for check of service ‘Mongodb Connect Check‘ on host ‘dbm1slave1‘ was out of bounds.

[1412819975] SERVICE ALERT: dbm1slave1;Mongodb Connect Check;CRITICAL;SOFT;1;(Return code of 13 is out of bounds)

[1412820058] Warning: Return code of 13 for check of service ‘Mongo Free Connections‘ on host ‘dbm1slave1‘ was out of bounds.

需要赋值nagios用户所有权限以及r执行权限

chmod 770 /usr/lib/nagios/plugins/check_mongodb.py

chown -R nagios.nagios /usr/lib/nagios/plugins/check_mongodb.py

错误2:

监控界面Status Information一栏出现 No module named pymongo报错提示信息:

出现这个提示是因为需要安装pymongo模块,执行easy_install pymongo命令安装即可,如下所示:

[[email protected] objects]# easy_install pymongo

Searching for pymongo

Reading http://pypi.python.org/simple/pymongo/

Best match: pymongo 2.7.2

......

zip_safe flag not set; analyzing archive contents...

Adding pymongo 2.7.2 to easy-install.pth file

Installed /usr/lib/python2.6/site-packages/pymongo-2.7.2-py2.6-linux-x86_64.egg

Processing dependencies for pymongo

Finished processing dependencies for pymongo

----------------------------------------------------------------------------------------------------------------

<版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!>
原博客地址:http://blog.itpub.net/26230597/viewspace-1293589/
原作者:黄杉 (mchdba)

----------------------------------------------------------------------------------------------------------------

参考文章:https://github.com/mzupan/nagios-plugin-mongodb/blob/master/README.md

时间: 2024-10-08 20:33:31

Nagios监控mongodb分片集群服务实战的相关文章

MongoDB 分片集群实战

背景 在如今的互联网环境下,海量数据已随处可见并且还在不断增长,对于如何存储处理海量数据,比较常见的方法有两种: 垂直扩展:通过增加单台服务器的配置,例如使用更强悍的 CPU.更大的内存.更大容量的磁盘,此种方法虽然成本很高,但是实现比较简单,维护起来也比较方便. 水平扩展:通过使用更多配置一般的服务器来共同承担工作负载,此种方法很灵活,可以根据工作负载的大小动态增减服务器的数量,但是实现比较复杂,得有专门的人员来运维. Databases for MongoDB 试用 IBM Cloud 上提

Bugsnag的MongoDB分片集群使用经验

Bugsnag是一家为移动应用开发者提供实时的Bug追踪及检测服务的创业公司,Bugsnag已经使用MongoDB存储超过TB级的文档数据.从Bugsnag的第一个版本开始他们就使用MongoDB存储业务数据.近日,Bugsnag的工程师Simon Maynard在博客上分享了他们的MongoDB分片集群经验,并开源了几个他们常使用的脚本. 带标签的分片(Tag Aware Sharding) 带标签的分片是MongoDB 2.2版本中引入的新特性,此特性支持人为控制数据的分片方式,从而使数据存

mongoDB(三) mongoDB分片集群

mongoDB分片集群 介绍 解决数据分片,防止数据丢失生产环境需要擦用分片+副本集的部署方式 组成部分 route: 提供入口,不存储数据 configserver: 存储元数据信息,建议使用副本集 shardserver: 数据存储服务,存储真正数据, 也许要使用副本集 依赖关系 当数据插入时,需要从configsrv知道数据要插入哪个shardsrv分片 当用户获取数据时,需要从configsrv知道数据存储在哪个shardsrv分片 集群搭建 使用同一份mongodb二进制文件 修改对应

使用HAProxy作为MongoDB分片集群mongos负载均衡

MongoDB分片集群的入口mongos自身没有failover机制.官方建议是将mongos和应用服务器部署在一起,多个应用服务器就要部署多个mongos实例,这样很是不方便.还可以使用LVS或者HAProxy来实现多个mongos的failover机制,但是一定要注意使用client affinity即客户端关联特性. global     chroot      /data/app_platform/haproxy/share/      log         127.0.0.1 loc

mongodb分片集群突然停电造成一些错误,分片无法启动

今天突然停电使mongodb分片集群造成这种错误,暂时不知道怎么解决,如果 有人知道请回复我 ,现在把记录下来,等后期处理. Fri Aug  8 10:49:52.165 [initandlisten] connection accepted from 172.16.0.115:59542 #2 (2 connections now open)Fri Aug  8 10:49:52.954 [initandlisten] connection accepted from 172.16.0.10

Nagios监控生产环境redis集群服务实战

前言:     以前做了cacti上展示redis性能报表图,可以看到redis的性能变化趋势图,但是还缺了实时报警通知的功能,现在补上这一环节.在redis服务瓶颈或者异常时候即使报警通知,方便dba第一时间处理维护. 1,下载redis监控插件 Redis已经在服务器安装好了,所以直接可以进行监控,redis集群安装请参考:http://blog.itpub.net/26230597/viewspace-1145831/,下载地址为:http://download.csdn.net/deta

MongoDB分片集群配置实例

环境: windows操作系统 mongodb 3.4社区版 目标: 配置包含两个分片一个配置服务器的分片集群.其中每一个分片和一个配置服务器都被配置为一个单独的副本集.如下图所示: 注:每一个分片都应该被配置在一个单独的服务器设备上.方便起见,本文在同一台机器通过不同端口模拟不同服务器上的组件,实现分片集群的配置.(生产环境的配置与此相同,只需使用自己的主机名.端口.路径等即可). 下图为本文配置的分片集群架构,其中的任意节点(副本集节点和分片节点)都是可扩展的. 1.分别为config se

[ MongoDB ] 分片集群及测试

分片 在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求. 当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量.这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据. 为什么使用分片? 1. 复制所有的写入操作到主节点    2. 延迟的敏感数据会在主节点查询    3. 单个副本集限制在12个节点    4. 当请求量巨大时会出现内存不足.    5. 本地磁盘不足    6. 垂

MongoDB分片集群

Mongodb Sharding分片集群 OS                      CentOS6.5 192.168.3.100 server1 configport=27017 192.168.3.100 server1 mongosport=27018 192.168.3.101 node1 mongodport=27018 192.168.3.102 node2 mongodport=27018 #CentOS安装mongo软件包 yum -y install mongodb mo