Mongodb添加Zabbix监控

参考教程: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]

8、至此,整个教程结束。

    原文作者:郑义钢
    原文地址: https://www.jianshu.com/p/3b8deeed610d
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞