一 应用场景描述
线上一些MongoDB数据库实例升级到了3.0,查看Zabbix server的日志不断有监控主机的MongoDB监控报错
6697:20160519:222116.590 error reason for "xxxxxxxx:MongoDB.Discovery_Status[backgroundFlushing,average_ms,xxxxxxx:1901]" changed: Received value [2016-05-19T22:21:07.391+0800 E QUERY TypeError: Cannot read property 'average_ms' of undefined] is not suitable for value type [Numeric (float)]
错误信息都是这种,可以判断报错的这些监控主机的这些监控项目获取值有问题,有关MongoDB的Zabbix监控方法可以参考以下两篇文章
http://john88wang.blog.51cto.com/2165294/1565968
http://john88wang.blog.51cto.com/2165294/1565973
二 监控调整
MongoDB3.0开始支持WiredTiger存储引擎,并且从3.2开始默认就是WireTiger存储引擎。从MongoDB3.0开始就支持两种存储引擎MMAPv1和WiredTiger
从MongoDB3.0开始,MMAPv1存储引擎支持集合级别的加锁
从MongoDB3.0开始,WiredTiger存储引擎提供文档级别的加锁和压缩功能。
监控MongoDB主要是通过MongoDB自带的db.serverStatus()命令获取MongoDB实例的各种状态。从MongoDB3.0开始有些监控项目需要更改,同时由于支持两种存储引擎MMAPv1和WiredTiger两种存储引擎db.serverStatus()显示的结果也不一样
MongoDB不同版本db.serverStatus()命令显示的结果也会有差别
从MongoDB3.0开始,db.serverStatus()不再输出workingSet,indexCounters和recordStats选项
db.serverStatus().cursors从MongoDB2.6后废弃了,要使用db.serverStatus().metrics.cursor查看
backgroundFlushing
backgroundFlushing相关的信息只会出现在使用MMAPv1存储引擎的实例,所以如果使用的WiredTiger存储引擎那么这些监控项目是不支持的。MongoDB会间断地刷新写操作到磁盘。默认是60秒刷新一次。
wiredTiger
从MongoDB3.0开始支持。这个段的信息只有在使用wiredTiger存储引擎的情况下才会输出
增加MongoDB的存储引擎监控项目
MongoDB.Discovery_Status[storageEngine,name,{#MONGO_HOST}]
原来模板中cursors相关的监控目要变更
MongoDB.Discovery_Status[metrics,cursor,open.total,{#MONGO_HOST}]
MongoDB.Discovery_Status[metrics,cursor,timedOut,{#MONGO_HOST}]
原来模板中的MongoDB IndexCounters相关的监控项目删除
参考文档:
https://sematext.com/blog/2015/12/16/mongodb-monitoring/
https://docs.mongodb.com/manual/reference/command/serverStatus/
https://www.datadoghq.com/blog/monitoring-mongodb-performance-metrics-mmap/
https://www.datadoghq.com/blog/monitoring-mongodb-performance-metrics-wiredtiger/