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

脚本内容

/etc/zabbix/zabbix-mongodb.sh:

  1. #!/bin/bash
  2. # @author: rby
  3. # @description: 使用zabbix监控mongodb
  4. MONGODB=$1
  5. MONGODB_ADDRESS="127.0.0.1"
  6. if [ $MONGODB -eq 1 ];then # mongodb-01
  7. MONGODB_PORT=57017
  8. MONGODB_PID="/data/mongodb-01/mongod.pid"
  9. MONGODB_INSTANCE_ID=0
  10. elif [ $MONGODB -eq 2 ];then # mongodb-02
  11. MONGODB_PORT=57017
  12. MONGODB_PID="/data/mongodb-02/mongod.pid"
  13. MONGODB_INSTANCE_ID=1
  14. elif [ $MONGODB -eq 3 ];then # mongodb-03
  15. MONGODB_PORT=57019
  16. MONGODB_PID="/data/mongodb-03/mongod.pid"
  17. MONGODB_INSTANCE_ID=2
  18. fi
  19. MONGODB_USER="monitor"
  20. MONGODB_PASSWORD="xxx"
  21. MONGODB_AUTH_DATABASE="admin"
  22. mongodbStatCache="mongodbstat.$MONGODB"
  23. mongodbRsStatusCache="mongodb.rs.status.$MONGODB"
  24. mongodbStat(){
  25. # 使用mongostat和"echo rs.status()["member"]|mongo"命令获取到副本集状态和性能指标,将执行的结果缓存到本地,每间隔10分钟将刷新一次缓存,以提高性能!
  26. if [ ! -e $mongodbStatCache ] || [[ -z $(cat $mongodbStatCache) ]] || [[ ! -z $(find $mongodbStatCache -mmin +10) ]];then
  27. mongostat --host $MONGODB_ADDRESS --port $MONGODB_PORT -u $MONGODB_USER -p $MONGODB_PASSWORD --authenticationDatabase $MONGODB_AUTH_DATABASE -n 1 2>&1 > $mongodbStatCache
  28. [ $? -ne 0 ]&& echo 0 && exit
  29. fi
  30. if [ ! -e $mongodbRsStatusCache ] || [[ -z $(cat $mongodbRsStatusCache) ]] || [[ ! -z $(find $mongodbRsStatusCache -mmin +10) ]];then
  31. 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
  32. [ $? -ne 0 ]&& echo 0 && exit
  33. fi
  34. }
  35. case $2 in
  36. # 服务状态
  37. # active.status 服务存活状态。!0表示存活,0表示未运行。valueType=integer
  38. "active.status")
  39. sudo -u mongodb ss -alnupt |grep pid=$(cat $MONGODB_PID) |wc -l
  40. ;;
  41. # 副本集
  42. # rs.member.name 成员名称,这通常是IP:PORT。valueType=string
  43. # rs.member.health 成员健康状态。1表示健康,0表示不健康。valueType=integer
  44. # rs.member.stateStr 成员身份。这通常是PRIMARY、SECONDARY、ARBITER、(not reachable/healthy)。valueType=string
  45. # rs.member.lastHeartbeatMessage 成员最新的健康信息。如果健康这通常是空的。valueType=string
  46. # rs.member.uptime 成员运行时长。valueType=integer
  47. "rs.member.name") #
  48. mongodbStat
  49. cat $mongodbRsStatusCache|grep 'name'|awk -F '"' '{print $4}'|tr -d "[:space:]"
  50. ;;
  51. "rs.member.health")
  52. mongodbStat
  53. cat $mongodbRsStatusCache|grep 'health'|tr -dc '0-9'
  54. ;;
  55. "rs.member.stateStr")
  56. mongodbStat
  57. cat $mongodbRsStatusCache |grep 'stateStr'|awk -F ':' '{print $2}'|tr -dc 'A-Z'
  58. ;;
  59. "rs.member.lastHeartbeatMessage")
  60. mongodbStat
  61. cat $mongodbRsStatusCache |grep 'lastHeartbeatMessage'|awk -F ':' '{print $2}'|tr -d '\"'
  62. ;;
  63. "rs.member.uptime")
  64. mongodbStat
  65. cat $mongodbRsStatusCache |grep 'uptime'|tr -dc '0-9'
  66. ;;
  67. # 性能指标
  68. # insert 每秒插入数据库的对象数量。valueType=string
  69. # query 每秒的查询操作次数。valueType=string
  70. # update 每秒的更新操作次数。valueType=string
  71. # delete 每秒的删除操作次数。valueType=string
  72. # getmore 每秒查询cursor(游标)时的getmore操作数。valueType=integer
  73. # command 每秒执行的命令数。valueType=string
  74. # dirty 脏数据字节的缓存百分比。valueType=string
  75. # used 正在使用中的缓存百分比。valueType=string
  76. # flushes 每秒执行fsync将数据写入硬盘的次数。valueType=integer
  77. # vsize 虚拟内存使用量,单位MB。valueType=string
  78. # res 物理内存使用量,单位MB。valueType=string
  79. # qrw 客户端等待从MongoDB实例读和写数据的队列长度。valueType=string
  80. # arw 执行读/写操作的活跃客户端数量。valueType=string
  81. # net_in 网络进流量。valueType=string
  82. # net_out 网络出流量。valueType=string
  83. # set 所属副本集。valueType=string
  84. # repl 副本集中身份。valueType=string
  85. # conn 打开连接的总数。valueType=integer
  86. # time 系统时间。valueType=string
  87. "insert")
  88. mongodbStat
  89. cat $mongodbStatCache |awk 'NR==2{print $1}'
  90. ;;
  91. "query")
  92. mongodbStat
  93. cat $mongodbStatCache |awk 'NR==2{print $2}'
  94. ;;
  95. "update")
  96. mongodbStat
  97. cat $mongodbStatCache |awk 'NR==2{print $3}'
  98. ;;
  99. "delete")
  100. mongodbStat
  101. cat $mongodbStatCache |awk 'NR==2{print $4}'
  102. ;;
  103. "getmore")
  104. mongodbStat
  105. cat $mongodbStatCache |awk 'NR==2{print $5}'
  106. ;;
  107. "command")
  108. mongodbStat
  109. cat $mongodbStatCache |awk 'NR==2{print $6}'
  110. ;;
  111. "dirty")
  112. mongodbStat
  113. cat $mongodbStatCache |awk 'NR==2{print $7}'
  114. ;;
  115. "used")
  116. mongodbStat
  117. cat $mongodbStatCache |awk 'NR==2{print $8}'
  118. ;;
  119. "flushes")
  120. mongodbStat
  121. cat $mongodbStatCache |awk 'NR==2{print $9}'
  122. ;;
  123. "vsize")
  124. mongodbStat
  125. cat $mongodbStatCache |awk 'NR==2{print $10}'
  126. ;;
  127. "res")
  128. mongodbStat
  129. cat $mongodbStatCache |awk 'NR==2{print $11}'
  130. ;;
  131. "qrw")
  132. mongodbStat
  133. cat $mongodbStatCache |awk 'NR==2{print $12}'
  134. ;;
  135. "arw")
  136. mongodbStat
  137. cat $mongodbStatCache |awk 'NR==2{print $13}'
  138. ;;
  139. "net_in")
  140. mongodbStat
  141. cat $mongodbStatCache |awk 'NR==2{print $14}'
  142. ;;
  143. "net_out")
  144. mongodbStat
  145. cat $mongodbStatCache |awk 'NR==2{print $15}'
  146. ;;
  147. "conn")
  148. mongodbStat
  149. cat $mongodbStatCache |awk 'NR==2{print $16}'
  150. ;;
  151. "set")
  152. mongodbStat
  153. cat $mongodbStatCache |awk 'NR==2{print $17}'
  154. ;;
  155. "repl")
  156. mongodbStat
  157. cat $mongodbStatCache |awk 'NR==2{print $18}'
  158. ;;
  159. "time")
  160. mongodbStat
  161. cat $mongodbStatCache |awk 'NR==2{print $19" "$20" "$21}'
  162. ;;
  163. esac

脚本好处

数据说明一切!

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

Zabbix自定义监控项

userparameter_mongodb.conf:

  1. 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】667. Beautiful Arrangement II 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  2. 本原串(hdu 2197)

    本原串 题目链接 思路: 反向想将总的个数减去不符合要求的个数.我们枚举n的约数,然后把n平均分,就可以构成不符合要求的串,\(g[i]\)表示循环节长为i约数的个数\(2^i\),我们要求循环节为\ ...

  3. Myeclipse查看jdk源代码

    过程如下: 1.点 "window"-> "Preferences" -> "Java" -> "Install ...

  4. Sentry 开发者贡献指南 - SDK 开发(事件负载)

    内容整理自官方开发文档 系列 Docker Compose 部署与故障排除详解 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentr ...

  5. [CodeLife]记毕业后第一份工作

    记毕业后第一份工作与公司 写在前面--前言 已然临近21年五月,很快又是一年毕业季了,公司里来了应届的新人,忽然才意识到自己已经不是公司年龄最小的了((笑~).依稀还记得两年前,自己也是如他们那般青涩 ...

  6. [JNI开发]使用javah命令生成.h的头文件

    第一步:进入对应的.java目录 javac xxx.java 生成对应的xxx.class文件 第二步:退回到/java目录 javah -classpath . -jni 包名.类名

  7. Java,JDK安装及环境配置

    jdk安装及环境配置 一.jdk安装 1.找到jdk安装包 2.安装jdk 3.安装jre 二.环境变量配置          1.JAVA_HOME JAVA_HOME C:\Program Fil ...

  8. HTML网页设计基础笔记 • 【第1章 HTML5基础】

    全部章节   >>>> 本章目录 1.1 HTML介绍及开发工具 1.1.1 HTML 的基本概念 1.1.2 网页 1.1.3 Web 标准 1.1.4 HTML5 与移动互 ...

  9. Layui 的内置jquery 版本

    //layui-v2.4.5 的内置jquery 版本. console.log(layui.$.fn.jquery);//=> 1.12.3 可以使用内置jq的方法: 方法一: layui.u ...

  10. localstorage的浏览器支持情况

    localStorage的兼容性不错,就国内的情况,已经基本没有问题了.localStorage的原理很简单,浏览器为每个域名划出一块本地存储空间,用户网页可以通过localStorage命名空间进行 ...