参考教程:http://www.netkiller.cn/monitoring/zabbix/zabbix-agent.html#idp135
1、准备工作:
安装Zabbix-server、Zabbix-agent和Mongodb,安装过程省略。
2、导入Mongodb模板至Zabbix-server
下载模板:https://github.com/oscm/zabbix/blob/master/mongodb/zbx_export_templates.xml
在Zabbix-server主页,依次点击【配置】、【模板】、【选择文件】,然后选择刚才下载的模板,点击【导入】即可
3、创建mongodb监控用户
> use admin
switched to db admin
> db.createUser(
{
user: "monitor",
pwd: "******",
roles: [ "clusterMonitor"]
}
)
Successfully added user: { "user" : "monitor", "roles" : [ "clusterMonitor" ] }
可以通过下列命令测试是否创建成功
db.auth("monitor", "******")
4、安装jq
由于Zabbix-agent采集脚本需要使用强大的jq解析json数据,安装jq教程可参考官网。
本人由于主机不能访问yum源,采用离线安装二进制文件的形式。
下载二进制文件后,给予执行权限即可
chmod +x jq-linux64
5、 Zabbix agentd 配置
编辑文件/etc/zabbix/zabbix_agentd.d/userparameter_mongodb.conf,添加以下内容
# MongoDB - statistics
#
# Author: Neo Chen <netkiller@msn.com>
# Website: http://www.netkiller.cn
############################################################
# Discovery
# Return Redis statistics
UserParameter=mongodb.status[*],/usr/local/bin/mongodb.sh $1 $2 $3 $4 $5
根据userparameter_mongodb.conf的内容,可知采集脚本在/usr/local/bin/mongodb.sh,所以新建文件/usr/local/bin/mongodb.sh,并添加以下内容。
#!/bin/bash
##################################################
# Description: zabbix mongodb monitor
# Note: Zabbix 3.2
# Date: Fri Apr 21 2017
# Verion: 1.0
# Requirments: mongo, jq, sudo access to mongo_conf.sh
#
# Based on Noe <netkiller@msn.com> script
#
# Change log:
# Mon Apr 24, 2017
# - Added checks for mongo and jq
# - User --eval to fectch data
# - fixed json output to comform
# - Use jq to parse json https://stedolan.github.io/jq/
# - upated index to handle space or comma betwee values
#
##################################################
DB_HOST=HOST
DB_PORT=PORT
DB_USERNAME=monitor
DB_PASSWORD=******
MONGO=/data/mongodb/mongodb-linux-x86_64-rhel70-3.4.7/bin/mongo
JQ=/data/jq-linux64
EXIT_ERROR=1
EXIT_OK=0
if [ ! -x "$MONGO" ] ; then
echo "mongo not found"
exit $EXIT_ERROR
elif [ ! -x "$JQ" ] ; then
echo "jq not found"
exit $EXIT_ERROR
elif [ $# -eq 0 ] ; then
echo "No values pass"
exit $EXIT_ERROR
fi
index=.$(echo $@ | sed 's/[ ,]/./g')
MONGO_CMD="$MONGO --host ${DB_HOST:-localhost} --port ${DB_PORT:-27017} --authenticationDatabase admin --quiet"
[[ "$DB_USERNAME" ]] && MONGO_CMD="${MONGO_CMD} --username ${DB_USERNAME}"
[[ "$DB_PASSWORD" ]] && MONGO_CMD="${MONGO_CMD} --password ${DB_PASSWORD}"
output=$(
$MONGO_CMD <<< "db.runCommand( { serverStatus: 1} )" |\
sed -e 's/NumberLong(\(.*\))/\1/
s/ISODate(\(.*\))/\1/
s/ObjectId(\(.*\))/\1/
s/Timestamp(.*)/"&"/
s/"\([0-9]*\)"/\1/'
)
mongo_status=${PIPESTATUS[0]}
if [ $mongo_status -ne $EXIT_OK ] ; then
echo "mongo exec error"
exit $EXIT_ERROR
fi
value=$(echo $output | jq $index)
jq_status=$?
echo $value
备注:由于没有设置mongodb和jq脚本至环境变量,所以在采集脚本中设置两者执行脚本的路径。
6、启动(重启)Zabbix-agent
service zabbix-agent start
7、在Zabbix服务端主机测试是否配置有效,可通过脚本
zabbix_get -s HOST -k mongodb.status[version]