使用Zabbix-agent2监控MongoDB

公众号运维开发故事

从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" },
...   ]
... })

使用Zabbix-agent2监控MongoDB
除了在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]

模板使用了默认的连接参数,这里我改用命名会话进行连接
使用Zabbix-agent2监控MongoDB
之后直接在主机上链接模板即可实现对MongoDB的监控
使用Zabbix-agent2监控MongoDB

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


欢迎关注个人公众号运维开发故事
使用Zabbix-agent2监控MongoDB

使用Zabbix-agent2监控MongoDB

上一篇:数据库 stuff()函数的用法


下一篇:SQL Server 添加字段,修改字段类型,修改字段名,删除字段