使用Zabbix-agent2监控MongoDB

微信公众号:运维开发故事 作者:wanger

从zabbix5.0.10和5.2.6的版本开始,Zabbix官方开始支持对MongoDB数据库的监控,平时我们用MongoDB也还是比较多的,接下来就介绍一下如何使用zabbix-agent2来监控MongoDB数据库,

监控什么

zabbix官方分别提供了监控MongoDB集群和MongoDB节点的模板
获取MongoDB节点和集群状态和集合的存储信息的方式是一样的,只不过监控集群状态的模板多了获取连接池的状态和集群巨型块的数量,而节点模板会获取每个集合的使用情况、操作日志信息、ReplSet的状态

获取Jumbo chunks的数量

当chunk超过默认大小并且不能被拆分将会被标记为jumbo chunk,jumbo chunk会不断增长,MongoDB集群有一个balancer会根据分片间的chunk数的差异来进行迁移,使数据均匀分布,jumbo chunk数量过多会导致分片间的负载不均衡,jumbo chunk数量过多的原因其实还是shard key规划不合理造成的
下面是zabbix获取jumbo chunk数量时调用的命令

use config
db.chunks.find({"jumbo":true})

获取connpool.stats信息

下面是zabbix获取connpool时调用的命令

db.runCommand({"connPoolStats" : 1})

关于此监控项依赖项的详细信息可查看官网有详细说明
https://docs.mongodb.com/manual/reference/command/connPoolStats/#dbcmd.connPoolStats

获取MongoDB服务器状态

获取MongoDB服务状态调用的是下面的命令

db.runCommand({serverStatus:1,recordStats:0})

关于此监控项依赖项的详细信息可查看官网有详细说明https://docs.mongodb.com/manual/reference/command/serverStatus/#dbcmd.serverStatus

获取集合的信息

通过自动发现规则获取数据库和collections的名字, 并返回每个collections的信息,可以使用宏定义不需要获取的collections信息
下面是获取collections信息调用的命令

db.runCommand( { collStats : "collections_name"})

关于此监控项依赖项的详细信息可查看https://docs.mongodb.com/manual/reference/command/collStats/index.html

获取replSet状态

将会收集MongoDB的replSet的状态,当然没有配置replSet是不会获取到结果的
下面是获取replSet状态调用的命令

db.adminCommand({replSetGetStatus:1})

关于此监控项的详细信息可查看https://docs.mongodb.com/manual/reference/command/replSetGetStatus/

获取给定数据库的信息

通过自动发现规则获取数据库的名字, 并返回每个数据库的信息,可以使用宏定义不需要获取的数据库
下面是获取数据库存储信息调用的命令

db.runCommand({dbStats:1})

关于此监控项的详细信息可查看https://docs.mongodb.com/manual/reference/command/dbStats/

轮询oplog的数据获取replSet的状态

oplog是local库下的集合,replSet的信息会存储在这个集合中,执行下面的命令会获取oplog的状态、大小、存储的时间范围

db.getReplicationInfo()

关于此监控项的输出信息可查看https://docs.mongodb.com/manual/reference/method/db.getReplicationInfo/

如何去监控

首先需要在MongoDB中创建数据库和集群的只读用户

use admin
db.auth("admin", "qwer@1234..asd")
db.createUser({
...   "user": "zabbix",
...   "pwd": "zabbix123",
...   "roles": [
...     { role: "readAnyDatabase", db: "admin" },
...     { role: "clusterMonitor", db: "admin" },
...   ]
... })

![image.png](https://img-blog.csdnimg.cn/img_convert/df0c924300f374e849d1046013bebe81.png#height=259&id=fsQwE&margin=[object Object]&name=image.png&originHeight=518&originWidth=583&originalType=binary&size=24880&status=done&style=none&width=291.5)
除了在url上直接定义连接信息外,还可以使用会话命名的方式,这对于监控多个实例是很方便的一种方式,也方便模板对监控项统一配置

Plugins.Mongo.Sessions.Mongo1.Uri=tcp://127.0.0.1:27017
Plugins.Mongo.Sessions.Mongo1.User=<UsernameForMongo1>
Plugins.Mongo.Sessions.Mongo1.Password=<PasswordForMongo1>    
Plugins.Mongo.Sessions.Mongo2.Uri=tcp://127.0.0.1:27018  
Plugins.Mongo.Sessions.Mongo2.User=<UsernameForMongo2>
Plugins.Mongo.Sessions.Mongo2.Password=<PasswordForMongo2>

之后在url上可以只定义会话名即可对多实例进行监控

mongodb.ping[Mongo1]
mongodb.ping[Mongo2]

模板使用了默认的连接参数,这里我改用命名会话进行连接
![image.png](https://img-blog.csdnimg.cn/img_convert/a8500642e70c3bdc5676b82559333e12.png#height=342&id=RJAVF&margin=[object Object]&name=image.png&originHeight=683&originWidth=1616&originalType=binary&size=134474&status=done&style=none&width=808)
之后直接在主机上链接模板即可实现对MongoDB的监控
![image.png](https://img-blog.csdnimg.cn/img_convert/98b55767260f546e4584011acdfd4ac4.png#clientId=u063e695d-ceb6-4&from=paste&height=433&id=u6fd8ebf2&margin=[object Object]&name=image.png&originHeight=865&originWidth=1359&originalType=binary&size=114528&status=done&style=none&taskId=ue91d363b-2fe5-4140-897f-b19abdda9bd&width=679.5)

关于监控MongoDB模板的宏、发现规则,以及监控项触发器的说明可以参考官方说明
https://www.zabbix.com/integrations/mongodb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值