Zabbix5.0 监控MongoDB
1.什么是MongoDB
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写,MongoDB是一个介于关系数据库和非关系数库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
- 使用JSON风格语法,易于掌握和理解
- Schema-less,支持嵌入子文档
- CRUD更加简单,支持in-place update
- 所有的属性类型都支持索引
- 性能高效,速度快
- Map/Reduce对大数据量的表进行统计、分类、合并的工作
2.应用场景
2.1 适用的应用场景
-
站点数据:mongo很适合实时的插入,更新与查询,并具备站点实时数据存储所需的复制及高度伸缩性。
-
缓存:因为性能非常高,mongo也适合作为信息基础设施的缓存层。在系统重新启动之后。由mongo搭建的持久化缓存能够避免下层的数据源过载。
-
大尺寸、低价值的数据:使用传统的关系数据库存储一些数据时可能会比較贵。
-
高伸缩性的场景:mongo很适合由数十或者数百台server组成的数据库。
-
用于对象及JSON数据的存储:mongo的BSON数据格式很适合文档格式化的存储及查询。
2.2 不适用的应用场景
- 要求高度事务性的系统
比如银行或会计系统。传统的关系型数据库眼下还是更适用于须要大量原子性复杂事务的应用程序。
- 传统的商业智能应用。
针对特定问题的BI查询场景,对于此类应用,数据仓库可能是更合适的选择。
- 复杂的跨文档(表)级联查询。
3.如何监控MongoDB
3.1 常用监控方式
MongoDB内部命令
- mongodb提供的内部方法,能够查看mongodb的运行快照;
- 最常用、最基础的查看实例运行状态的命令;
- ./mongo 127.0.0.1:27017
- db.serverStatus();
3.1.1 操作信息(Operations)
"insert" : 34343, // mongod最近一次启动后的insert次数
"query" : 34322, // mongod最近一次启动后的query次数
"update" : 45667, // mongod最近一次启动后的update次数
"delete" : 34563, // mongod最近一次启动后的delete次数
"getmore" : 455673, // mongod最近一次启动后的getmore次数,这个值可能会很高,因为子节点会发送getmore命令,作为数据复制操作的一部分
"command" : 32456 // mongod最近一次启动后的执行command命令的次数
3.1.2 网络信息(Network)
"bytesIn" :NumberLong("1551919234783"), //数据库接收到的网络传输字节数
"bytesOut" :NumberLong("2333459244323"), //从数据库发送出去的网络传输字节数
3.1.3 连接数信息(Connections)
"current" : 2581, //当前连接数
"available" : 48619, //可用连接数
3.1.4 内存信息(Memory)
"bits" : 64, //操作系统位数
"resident" : 45792, //物理内存消耗,单位M
"virtual" : 326338, //虚拟内存消耗, 单位M
"mapped" : 161399, //映射内存
"mappedWithJournal" : 322798 //除了映射内存外还包括journal日志消耗的映射内存
3.1.5 全局锁信息(GlobalLock)
#activeClients活跃客户
"total" : 0, //当前活跃客户端的个数
"readers" : 0, //当前活跃客户端中进行读操作的个数
"writers" : 0 //当前活跃客户端中进行写操作的个数
#currentQueue当前队列
"total" : 0, //当前队列的等待的总个数
"readers" : 0, //当前队列的等待读的总个数
"writers" : 0 //当前队列的等待写的总个数
3.1.6 游标信息(Cursors)
"clientCursors_size" : 2, //mongodb当前为客户端维护的游标个数
"totalOpen" : 2, //和clientCursors_size一样
"pinned" : 0, //打开的pinned类型的游标个数
"totalNoTimeout" : 0, //设置了noTimeout,打开的游标个数
"timedOut" : 11 //从mongod启动以来的游标超时个数,数据的持续增长代表当前应用程序有错误
3.1.7 断言信息(Asserts)
#断言其实是防止程序意外出错的一种宏,如果其参数计算为假,则程序发出警告,且退出。
"regular" : 65, //正常的断言数量
"warning" : 1, //warning的断言数量
"msg" : 0, //message的断言数量
"user" : 30655213, //user的断言数量
"rollovers" : 0 //重置的断言数量
3.2 其他监控方式
3.2.1 mongosniff
网络嗅探器,类似于Linux TCPDUMP工具,监控MongoDB相关的包请求
3.2.2 mongostat
非常重要的工具,MongoDB数据库实时状态监控,包括读写情况、加锁、索引命中、缺页中断、队列等状态
3.2.3 mongotop
供追踪MongoDB实例读写数据所用时间的方法。收集关于集合层的统计信息。
4. Zabbix5.0监控MongoDB
zabbix5.0监控MongoDB的也是通过db.serverStatus()方法来采集数据。MongoDB node by Zabbix Agent 2
— collects metrics by polling zabbix-agent2.
4.1 前置条件
-
准备好mongodb数据库服务
-
安装zabbix-agent2
注意版本必须是5.0.14以上在mongodb数据库服务器上安装zabbix-agent2,确认通过"agent.ping"可以成功监听agent状态。
4.2 监控部署
Zabbix5.0的agent2自带了mongodb的监控,并且提供了很专业的监控模板,我们也直接用官方推荐的就行。
4.2.1 添加主机
主机的名称必须要和zabbix_agent2.conf里面配置的hostname一致!
客户端ip地址填mongodb的IP,端口填10050,这样就能通过"agent.ping"去监控agent的状态。
4.2.2 关联模板
我们直接搜索mongodb能就能选到模板,由于我这次测试安装的单个节点的mongodb,就选node类型的模板。
点击更新按钮,添加完成,效果如下:
4.2.3 修改宏配置
该模板默认的{$MONGODB.CONNSTRING}是”tcp:localhost:27017“,我们需要在主机的模板页面,定制化修改成想要监控的mongodb的IP和端口,我的mongodb的ip是166.8.69.5 端口是27017(可以通过修改mongodb配置文件改变端口)
修改完主机宏以后,我们可以看到继承以及主机宏也已经从默认值改为我们想要的值
4.2.4 查看最新数据
我们点击左侧的监测,然后找到最新数据,选择主机,应用级Mongodb,就可以看到监控数据了。
该模板还提供了推荐的触发器(阈值)配置