前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >专家专栏|使用Zabbix Agent 2监控MongoDB

专家专栏|使用Zabbix Agent 2监控MongoDB

作者头像
Zabbix
修改2021-06-29 09:45:32
9860
修改2021-06-29 09:45:32
举报
文章被收录于专栏:Zabbix中国官方Zabbix中国官方

Wanger | Zabbix开源社区签约专家

Zabbix运维工程师,熟悉Zabbix开源监控系统的架构。乐于分享Zabbix运维经验,个人公众号“运维开发故事”。

擅长领域:Zabbix基础设施运维以及Zabbix图形化展示。

从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数量时调用的命令:

代码语言:javascript
复制
use config
db.chunks.find({"jumbo":true})

获取connpool.stats信息

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

代码语言:javascript
复制
db.runCommand({"connPoolStats" : 1})

关于此监控项依赖项的详细信息可查看官网有详细说明:

https://docs.mongodb.com/manual/reference/command/connPoolStats/#dbcmd.connPoolStats

获取MongoDB服务器状态

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

代码语言:javascript
复制
db.runCommand({serverStatus:1,recordStats:0})

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

获取集合的信息

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

代码语言:javascript
复制
db.runCommand( { collStats : "collections_name"})

关于此监控项依赖项的详细信息可查看

https://docs.mongodb.com/manual/reference/command/collStats/index.html

获取replSet状态

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

代码语言:javascript
复制
db.adminCommand({replSetGetStatus:1})

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

获取给定数据库的信息

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

代码语言:javascript
复制
db.runCommand({dbStats:1})

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

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

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

代码语言:javascript
复制
db.getReplicationInfo()

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

如何去监控?

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

代码语言:javascript
复制
use admin
db.auth("admin", "qwer@1234..asd")
db.createUser({
...   "user": "zabbix",
...   "pwd": "zabbix123",
...   "roles": [
...     { role: "readAnyDatabase", db: "admin" },
...     { role: "clusterMonitor", db: "admin" },
...   ]
... })

除了在url上直接定义连接信息外,还可以使用会话命名的方式,这对于监控多个实例是很方便的一种方式,也方便模板对监控项统一配置。

代码语言:javascript
复制
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上可以只定义会话名即可对多实例进行监控。

代码语言:javascript
复制
mongodb.ping[Mongo1]
mongodb.ping[Mongo2]

模板使用了默认的连接参数,这里我改用命名会话进行连接。

之后直接在主机上链接模板即可实现对MongoDB的监控。

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

备注“使用Zabbix年限+企业+姓名”

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-06-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Zabbix开源社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 监控什么?
    • 获取Jumbo chunks的数量
      • 获取connpool.stats信息
        • 获取MongoDB服务器状态
          • 获取集合的信息
            • 获取replSet状态
              • 获取给定数据库的信息
                • 轮询oplog的数据获取replSet的状态
                • 如何去监控?
                相关产品与服务
                云数据库 MongoDB
                腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档