监控mongo写个模板其实很快。如果公司里每个mongo使用的端口都是一样的,可以直接建立一套模板,然后把这个模板链接到各个服务器上去即可。但是如果公司使用的端口不一致,建议使用zabbix的自动发现功能,自动发现mongo监听的端口,并在上面收集相关数据。我们先来看看效果图。这个监控图片是zabbix的筛选功能,可能会将相关的图片整合到一个页面中。具体自动发现实现如下:发现规则配置如上,本机zabbixagent配置如下:UserParameter=mongo.discover,python/usr/local/zabbix/discover_mongo.pywhere/usr/local/zabbix/discover_mongo.py是自动找到的脚本如下:#coding:utf-8importsimplejsonasjsonimportcommands(status,output)=commands.getstatusoutput('''sudonetstat-tlnp|grep'mongod'|awk'{print$4}'|awk-F':''{print$(NF)}'|sort-u|grep-v"^28"''')outputs=output.split('\n')ports=[]forportinoutputs:ports+=[{'{#MONGOPORT}':port}]printjson.dumps({'data':ports},sort_keys=True,indent=4)使用系统命令netstat过滤出监听端口,然后输出以json格式。通过定义这个,你可以自动发现zabbix监听的端口。注意:netstat一般没有zabbix用户的权限,需要相应设置visudo。该脚本可能需要根据您自己的环境进行调整。zabbixserver探索完端口后,需要将端口作为参数之一从zabbixagent中获取数据。项目原型配置如下:如果返回多个{#MONGOPORT},则监控项目乘以个数。mongo.status的定义如下(这个定义还在zabbixagent下):UserParameter=mongo.status[*],sh/usr/local/zabbix/check_mongo.sh-p$1-k$2-K$3使用a脚本传入参数获取mongo的一些数据集合,脚本后面可以直接展开(-p代表端口)。mongo的serverStatus有多个参数,使用opcounters等收集,-k和-K可以具体获取其值。脚本如下:#!/bin/shwhilegetopts"p:k:K:"optdocase$optinp)mongo_port=$OPTARG;;k)key1=$OPTARG;;K)key2=$OPTARG;;?)echo'参数错误!'exit1;;esacdoneif[!"${mongo_port}"]||[!"${key1}"]||[!"${key2}"];thenecho"parameterisnull"exit1fiecho"db.serverStatus().${key1}"|mongo--port=${mongo_port}|sed's/,/\r\n/g'|grep"${key2}"|awk-F':|,|}''{print$2}'部署模板后,将模板与mongo机器关联起来,收集相关运行信息。在模板中添加图形原型,如下:应用模板后,如果没有问题,可以在网页上采集mongo集群数据,在zabbixfilter中查看。
