• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

zabbix-mongodb监控脚本高性能、低占用

武飞扬头像
[虚幻私塾】
帮助1

Python微信订餐小程序课程视频

https://edu.csdn.net/course/detail/36074

Python实战量化交易理财系统

https://edu.csdn.net/course/detail/35475目录


Zabbix调用脚本以实现对MongoDB的监控!
本脚本支持对服务存活状态、副本集、性能指标共计25个监控项!
使用mongostat和"echo rs.status()[“members”][<成员ID>]|mongo"命令获取到副本集状态和性能指标,将执行的结果缓存到本地,每间隔10分钟将刷新一次缓存!
脚本内各项通过查询缓存以获取监控项的值,高效且占用资源低,监控项数据的获取不会给主机带来太多的资源消耗!一次监控项的查询仅约需8ms!
回到顶部# 脚本内容

/etc/zabbix/zabbix-mongodb.sh:

#!/bin/bash
# @author: rby
# @description: 使用zabbix监控mongodb


MONGODB=${1-1}
MONGODB_BASEDIR_BIN="/usr/local/mongodb/mongodb-linux-x86\_64-4.0.27/bin/"
MONGODB_ADDRESS="127.0.0.1"

if [ $MONGODB -eq 1 ];then # mongodb-01
  MONGODB_PORT=57017
  MONGODB_INSTANCE_ID=0
elif [ $MONGODB -eq 2 ];then # mongodb-02
  MONGODB_PORT=57017
  MONGODB_INSTANCE_ID=1
elif [ $MONGODB -eq 3 ];then # mongodb-03
  MONGODB_PORT=57019
  MONGODB_INSTANCE_ID=2
fi

MONGODB_USER="monitor"
MONGODB_PASSWORD="xxx"
MONGODB_AUTH_DATABASE="admin"

mongodbStatCache="/tmp/mongodbstat.$MONGODB"
mongodbRsStatusCache="/tmp/mongodb.rs.status.$MONGODB"

mongodbStat(){
# 使用mongostat和"echo rs.status()["members"]|mongo"命令获取到副本集状态和性能指标,将执行的结果缓存到本地,每间隔10分钟将刷新一次缓存,以提高性能!
if [ ! -e $mongodbStatCache ] || [[ -z $(cat $mongodbStatCache) ]] || [[ ! -z $(find $mongodbStatCache -mmin  10) ]];then
  $MONGODB\_BASEDIR\_BIN/mongostat --host $MONGODB\_ADDRESS --port $MONGODB\_PORT -u $MONGODB\_USER -p $MONGODB\_PASSWORD --authenticationDatabase $MONGODB\_AUTH\_DATABASE -n 1 2>&1 > $mongodbStatCache
  [ $? -ne 0 ]&& echo 0 && exit
fi

if [ ! -e $mongodbRsStatusCache ] || [[ -z $(cat $mongodbRsStatusCache) ]] || [[ ! -z $(find $mongodbRsStatusCache -mmin  10) ]];then
  echo "rs.status()[\"members\"][$MONGODB\_INSTANCE\_ID]" |$MONGODB\_BASEDIR\_BIN/mongo --host $MONGODB\_ADDRESS --port $MONGODB\_PORT -u $MONGODB\_USER -p $MONGODB\_PASSWORD --authenticationDatabase $MONGODB\_AUTH\_DATABASE 2>&1 > $mongodbRsStatusCache
  [ $? -ne 0 ]&& echo 0 && exit
fi
}

case $2 in
# 服务状态
# active.status 服务存活状态。!0表示存活,0表示未运行。valueType=integer
"active.status")
ss -alnupt |grep $MONGODB\_PORT |wc -l
;;

# 副本集
# rs.member.name 成员名称,这通常是IP:PORT。valueType=string
# rs.member.health 成员健康状态。1表示健康,0表示不健康。valueType=integer
# rs.member.stateStr 成员身份。这通常是PRIMARY、SECONDARY、ARBITER、(not reachable/healthy)。valueType=string
# rs.member.lastHeartbeatMessage 成员最新的健康信息。如果健康这通常是空的。valueType=string
# rs.member.uptime 成员运行时长。valueType=integer
"rs.member.name") #
mongodbStat
cat $mongodbRsStatusCache|grep 'name'|awk -F '"' '{print $4}'|tr -d "[:space:]"
;;

"rs.member.health")
mongodbStat
cat $mongodbRsStatusCache|grep 'health'|tr -dc '0-9'
;;

"rs.member.stateStr")
mongodbStat
cat $mongodbRsStatusCache |grep 'stateStr'|awk -F ':' '{print $2}'|tr -dc 'A-Z'
;;

"rs.member.lastHeartbeatMessage")
mongodbStat
cat $mongodbRsStatusCache |grep 'lastHeartbeatMessage'|awk -F ':' '{print $2}'|tr -d '\"'
;;

"rs.member.uptime")
mongodbStat
cat $mongodbRsStatusCache |grep 'uptime'|tr -dc '0-9'
;;

# 性能指标
# insert 每秒插入数据库的对象数量。valueType=string
# query 每秒的查询操作次数。valueType=string
# update 每秒的更新操作次数。valueType=string
# delete 每秒的删除操作次数。valueType=string
# getmore 每秒查询cursor(游标)时的getmore操作数。valueType=integer
# command 每秒执行的命令数。valueType=string
# dirty 脏数据字节的缓存百分比。valueType=string
# used 正在使用中的缓存百分比。valueType=string
# flushes 每秒执行fsync将数据写入硬盘的次数。valueType=integer
# vsize 虚拟内存使用量,单位MB。valueType=string
# res 物理内存使用量,单位MB。valueType=string
# qrw 客户端等待从MongoDB实例读和写数据的队列长度。valueType=string
# arw 执行读/写操作的活跃客户端数量。valueType=string
# net\_in 网络进流量。valueType=string
# net\_out 网络出流量。valueType=string
# set 所属副本集。valueType=string
# repl 副本集中身份。valueType=string
# conn 打开连接的总数。valueType=integer
# time 系统时间。valueType=string
"insert")
mongodbStat
cat $mongodbStatCache |awk 'NR==2{print $1}'
;;

"query")
mongodbStat
cat $mongodbStatCache |awk 'NR==2{print $2}'
;;

"update")
mongodbStat
cat $mongodbStatCache |awk 'NR==2{print $3}'
;;

"delete")
mongodbStat
cat $mongodbStatCache |awk 'NR==2{print $4}'
;;

"getmore")
mongodbStat
cat $mongodbStatCache |awk 'NR==2{print $5}'
;;

"command")
mongodbStat
cat $mongodbStatCache |awk 'NR==2{print $6}'
;;

"dirty")
mongodbStat
cat $mongodbStatCache |awk 'NR==2{print $7}'
;;

"used")
mongodbStat
cat $mongodbStatCache |awk 'NR==2{print $8}'
;;

"flushes")
mongodbStat
cat $mongodbStatCache |awk 'NR==2{print $9}'
;;

"vsize")
mongodbStat
cat $mongodbStatCache |awk 'NR==2{print $10}'
;;

"res")
mongodbStat
cat $mongodbStatCache |awk 'NR==2{print $11}'
;;

"qrw")
mongodbStat
cat $mongodbStatCache |awk 'NR==2{print $12}'
;;

"arw")
mongodbStat
cat $mongodbStatCache |awk 'NR==2{print $13}'
;;

"net\_in")
mongodbStat
cat $mongodbStatCache |awk 'NR==2{print $14}'
;;

"net\_out")
mongodbStat
cat $mongodbStatCache |awk 'NR==2{print $15}'
;;

"conn")
mongodbStat
cat $mongodbStatCache |awk 'NR==2{print $16}'
;;

"set")
mongodbStat
cat $mongodbStatCache |awk 'NR==2{print $17}'
;;

"repl")
mongodbStat
cat $mongodbStatCache |awk 'NR==2{print $18}'
;;

"time")
mongodbStat
cat $mongodbStatCache |awk 'NR==2{print $19" "$20" "$21}'
;;

esac

学新通

回到顶部# 脚本好处

数据说明一切!
使用本脚本获取mongodb的一个监控项的数据大约仅需要8ms,本脚本共计支持监控项共25个,即8*25=200ms!

zabbix@mongodb-01:/etc/zabbix$ time bash zabbix-mongodb.sh 1 active.status
1

real	0m0.005s
user	0m0.000s
sys	0m0.000s
zabbix@mongodb-01:/etc/zabbix$ time bash zabbix-mongodb.sh 1 rs.member.health
1
real	0m0.007s
user	0m0.000s
sys	0m0.000s
zabbix@mongodb-01:/etc/zabbix$ time bash zabbix-mongodb.sh 1 command
14|0

real	0m0.007s
user	0m0.000s
sys	0m0.000s


学新通

回到顶部# Zabbix自定义监控项

/etc/zabbix/zabbix_agentd.d/userparameter_mongodb.conf:

UserParameter=mongodb[*],HOME=/etc/zabbix;bash /etc/zabbix/zabbix-mongodb.sh $1 $2

学新通
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgkcbkc
系列文章
更多 icon
同类精品
更多 icon
继续加载