Mongodb监控命令说明

  1. db.serverStatus()提供Mongodb的信息

  2. db.serverStatus().connections获取连接信息

  3. db.serverStatus().network获取网络信息

  4. db.serverStatus().opcounters获取增、删、改、查情况


Shell脚本非交互式运行结果如下,通过两个元素就能定位一个监控项。例如connections+available获取可用连接数、network+byteIn或byteOut获取流量信息

[root@test 27017]# echo "db.serverStatus().connections"|/usr/local/mongodb/bin/mongo --port=27017  --quiet
{ "current" : 1, "available" : 818, "totalCreated" : 2 }
[root@test 27017]# echo "db.serverStatus().network.bytesIn"|/usr/local/mongodb/bin/mongo --port=27017 --quiet
NumberLong(4447)


Mongodb检测脚本封装mongodb_check.sh,通过两个元素定位一个监控项。Zabbix监控只需要一个数字输出就行

port=$1
key1=$2
key2=$3
echo "db.serverStatus().${key1}.${key2}"|/usr/local/mongodb/bin/mongo --port=$port --quiet | egrep  -o '[0-9]+'


脚本封装运行结果如下

[root@test 27017]# sh /etc/zabbix/mongodb_check.sh 27017 network bytesIn
7216
[root@test 27017]# sh /etc/zabbix/mongodb_check.sh 27017 connections available
818


Zabbix监控中,Mongodb的端口我们使用自动发现mongodb_discovery.py

try:
  import json
except:
  import simplejson as json
import commands

(status, output) = commands.getstatusoutput(""" sudo netstat -tlnp|grep mongod|awk '{print $4}'|awk -F':' '{print $2}'|sort -u """)
outputs = output.split('\n')
result = []
for one in  outputs:
  result.append( {'{#ONE}': one} )
print( json.dumps({'data':result},sort_keys=True,indent=4) )


由于Zabbix监控所有的脚本都是通过zabbix用户执行,所以使用netstat去获取监听端口权限会有问题,需要给zabbix用户sudo权限

zabbix ALL= NOPASSWD: /bin/netstat
Defaults:zabbix   !requiretty


自动发现运行结果如下

-bash-4.2$ python /etc/zabbix/mongodb_discovery.py 
{
    "data": [
        {
            "{#ONE}": "27017"
        }
    ]
}


被监控的Agent配置添加,重启Agent

UserParameter=mongodb.discovery,python /etc/zabbix/mongodb_discovery.py
UserParameter=mongodb.check[*],sh /etc/zabbix/check_mongodb.sh $1 $2 $3


使用实践哥创建的Zabbix监控模板导入并引用就能监控Mongodb数据库了,链接如下:

    https://gitee.com/shijiange/ops/blob/master/Zabbix%E6%A8%A1%E6%9D%BF/zbx_mongodb_template.xml


实战截图如下

Zabbix自动发现监控Mongodb_第1张图片