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
MONGODB_ADDRESS="127.0.0.1" if [ $MONGODB -eq 1 ];then # mongodb-01
MONGODB_PORT=57017
MONGODB_PID="/data/mongodb-01/mongod.pid"
MONGODB_INSTANCE_ID=0
elif [ $MONGODB -eq 2 ];then # mongodb-02
MONGODB_PORT=57017
MONGODB_PID="/data/mongodb-02/mongod.pid"
MONGODB_INSTANCE_ID=1
elif [ $MONGODB -eq 3 ];then # mongodb-03
MONGODB_PORT=57019
MONGODB_PID="/data/mongodb-03/mongod.pid"
MONGODB_INSTANCE_ID=2
fi MONGODB_USER="monitor"
MONGODB_PASSWORD="xxx"
MONGODB_AUTH_DATABASE="admin" mongodbStatCache="mongodbstat.$MONGODB"
mongodbRsStatusCache="mongodb.rs.status.$MONGODB" mongodbStat(){
# 使用mongostat和"echo rs.status()["member"]|mongo"命令获取到副本集状态和性能指标,将执行的结果缓存到本地,每间隔10分钟将刷新一次缓存,以提高性能!
if [ ! -e $mongodbStatCache ] || [[ -z $(cat $mongodbStatCache) ]] || [[ ! -z $(find $mongodbStatCache -mmin +10) ]];then
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]" |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")
sudo -u mongodb ss -alnupt |grep pid=$(cat $MONGODB_PID) |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自定义监控项

userparameter_mongodb.conf:

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

zabbix-mongodb监控脚本(高性能、低占用)的更多相关文章

  1. zabbix客户端监控脚本shell

    zabbix客户端监控脚本shell #!/bin/sh sleep 3 zabbixdir=`pwd` zabbix_version=4.2.5 ###指定版本,最好和server端吻合版本,可以自 ...

  2. nagios和zabbix自定义监控脚本

    一. 自定义nagios监控脚本1. 在客户端上创建脚本/usr/local/nagios/libexec/check_disk.shvim  /usr/local/nagios/libexec/ch ...

  3. zabbix mongodb 监控添加

    在zabbix 上添加mongodb的监控 由于使用的是zabbix 3.0 所有在模板里面又自己的模板名字叫:Template MongoDB 所以 客户端的配置如下 到配置文件目录 /usr/lo ...

  4. centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobackupex/Xtrabackup 第四十节课

    centos   shell编程6一些工作中实践脚本   nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志  直接送给bc做计算  gzip  innobacku ...

  5. ZABBIX自定义用户KEY与参数USERPARAMETERS监控脚本输出

    zabbix在模板中预定义了一些key,但通常情况,并不能满足我们的需求.幸运的是zabbix提供了自定义key的方法,因此我们可以灵活的监控各种我们想要监控的数据. 定义配置文件 通过yum安装的z ...

  6. 通过python脚本和zabbix配合监控zookeeper的节点数

    通过python脚本和zabbix配合监控zookeeper的节点数 需求描述: 在日常zabbix监控zookeeper的时候,无法通过shell来获取zookeeper的具体节点信息,没有开放具体 ...

  7. Zabbix Linux http 监控脚本

    说明:自定义监控脚本,监控内存是否启用主进程 创建文件:vim check_http.sh #!/bin/bash result=`ps -ef | grep httpd | grep -v grep ...

  8. 《为什么说 Prometheus 是足以取代 Zabbix 的监控神器?》

    为什么说 Prometheus 是足以取代 Zabbix 的监控神器?   Kuberneteschina 致力于提供最权威的 Kubernetes 技术.案例与Meetup! ​关注他 12 人赞同 ...

  9. linux系统CPU,内存,磁盘,网络流量监控脚本

    前序 1,#cat /proc/stat/ 信息包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累积到当前时刻 2,#vmstat –s 或者#vmstat 虚拟内存统计 3, #cat ...

随机推荐

  1. 【LeetCode】519. Random Flip Matrix 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/random-fl ...

  2. 【LeetCode】451. Sort Characters By Frequency 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典 优先级队列 排序 日期 题目地址:https: ...

  3. codeforces 624C Graph and String

    C. Graph and String time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  4. 深度探索 OpenStack Neutron:BGP(1) 【转载】

    3.4 BGP 原文地址:http://mp.weixin.qq.com/s?src=3&timestamp=1500043305&ver=1&signature=XwiIVV ...

  5. BP网络简单实现

    目录 BP算法的简单实现 Linear 全连接层 ReLu MSELoss 交叉熵损失函数 BP算法的简单实现 """ BPnet 简易实现 约定输入数据维度为(N, i ...

  6. C# .net 使用rabbitmq消息队列——EasyNetQ插件介绍

    EasyNetQ 是一个简洁而适用的RabbitMQ .NET类库,本质上是一个在RabbitMQ.Client之上提供服务的组件集合.

  7. Eclipse+Maven+JDK+tomcat搭建java的开发环境

    由于最近有几个同事都在学习java方面的东西,所以我写个博文做下笔记,其中遇到过很多个坑,这里就不多说了 首先,我用的是Eclipse+Maven的组合,用Ecplise是周边java开发的同事用这个 ...

  8. MYSQL架构理解

    目录 一.MYSQL架构 1. 架构图 2.分层实现 3.查询组件 二.并发控制 三. 事务 四.引擎 摘自 通过对MYSQL重要的几个属性的理解,建立一个基本的MYSQL的知识框架 一.MYSQL架 ...

  9. python requests发起请求,报“Max retries exceeded with url”

    需要高频率重复调用一个接口,偶尔会出现"Max retries exceeded with url" 在使用requests多次访问同一个ip时,尤其是在高频率访问下,http连接 ...

  10. PowerShell【IF篇】

    1 [int]$num=0 2 do 3 { 4 $num+=1 5 if($num%2) 6 { 7 "$num"+" 是奇数" 8 }else{ 9 &qu ...