zabbix-mongodb监控脚本(高性能、低占用)
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监控脚本(高性能、低占用)的更多相关文章
- zabbix客户端监控脚本shell
zabbix客户端监控脚本shell #!/bin/sh sleep 3 zabbixdir=`pwd` zabbix_version=4.2.5 ###指定版本,最好和server端吻合版本,可以自 ...
- nagios和zabbix自定义监控脚本
一. 自定义nagios监控脚本1. 在客户端上创建脚本/usr/local/nagios/libexec/check_disk.shvim /usr/local/nagios/libexec/ch ...
- zabbix mongodb 监控添加
在zabbix 上添加mongodb的监控 由于使用的是zabbix 3.0 所有在模板里面又自己的模板名字叫:Template MongoDB 所以 客户端的配置如下 到配置文件目录 /usr/lo ...
- centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobackupex/Xtrabackup 第四十节课
centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobacku ...
- ZABBIX自定义用户KEY与参数USERPARAMETERS监控脚本输出
zabbix在模板中预定义了一些key,但通常情况,并不能满足我们的需求.幸运的是zabbix提供了自定义key的方法,因此我们可以灵活的监控各种我们想要监控的数据. 定义配置文件 通过yum安装的z ...
- 通过python脚本和zabbix配合监控zookeeper的节点数
通过python脚本和zabbix配合监控zookeeper的节点数 需求描述: 在日常zabbix监控zookeeper的时候,无法通过shell来获取zookeeper的具体节点信息,没有开放具体 ...
- Zabbix Linux http 监控脚本
说明:自定义监控脚本,监控内存是否启用主进程 创建文件:vim check_http.sh #!/bin/bash result=`ps -ef | grep httpd | grep -v grep ...
- 《为什么说 Prometheus 是足以取代 Zabbix 的监控神器?》
为什么说 Prometheus 是足以取代 Zabbix 的监控神器? Kuberneteschina 致力于提供最权威的 Kubernetes 技术.案例与Meetup! 关注他 12 人赞同 ...
- linux系统CPU,内存,磁盘,网络流量监控脚本
前序 1,#cat /proc/stat/ 信息包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累积到当前时刻 2,#vmstat –s 或者#vmstat 虚拟内存统计 3, #cat ...
随机推荐
- 【LeetCode】1111. Maximum Nesting Depth of Two Valid Parentheses Strings 有效括号的嵌套深度
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目讲解 划分规则讲解 返回结果讲解 解题方法 代码 日期 题目地址:ht ...
- Service有多个实现类,它怎么知道该注入哪个ServiceImpl类
方法一:Controller中注入service的时候使用@Autowired自动注入,@Qualifier("beanId")来指定注入哪一个. 方法二:Controller中注 ...
- Sentry 开发者贡献指南 - SDK 开发(性能监控:Sentry SDK API 演进)
内容整理自官方开发文档 本文档的目标是将 Sentry SDK 中性能监控功能的演变置于上下文中. 我们首先总结了如何将性能监控添加到 Sentry 和 SDK, 然后我们讨论 identified ...
- <数据结构>hash进阶
hash函数构建 采取26进制 对于字符串str,令**H[i] = H[i-1]*26 + index(str[i]) **,最后H[i-1]就是str的hash值 问题:hash值过大,无法表式 ...
- Java初学者作业——定义英雄类(Hero),英雄类中的属性包括:姓名、攻击力、防御力、生命值和魔法值;方法包括:攻击、介绍。
返回本章节 返回作业目录 需求说明: 定义英雄类(Hero),英雄类中的属性包括:姓名.攻击力.防御力.生命值和魔法值:方法包括:攻击.介绍. 实现思路: 分析类的属性及其变量类型. 分析类的方法及其 ...
- MySQL8.0.20安装详解
https://blog.csdn.net/yeb112233/article/details/106042867/ alter user root@localhost identified by ' ...
- mysql组织结构
1.数据的组织结构 <1>层次型 <2>网状型 <3>关系型 2.mysql软件包格式 <1>.软件包管理器特有的格式:.rpm包 ...
- 初识python: 递归函数 - 分解质因数
分解质因数: 任何一个合数都可以写成几个质数相乘的形式.其中每个质数都是这个合数的因数,叫做这个合数的分解质因数.分解质因数只针对合数. 比如: 8 分解质因数是:2*2*2 10分解质因数是:2*5 ...
- 细谈 == 和 equals 的具体区别 【包括equals源码分析】
1.前言 昨天舍友去面试,被面试官的问题难住了:俩个学生类除了学生姓名不同用.equal来比较. 我是一脸懵逼的 ,问题说的很模糊 , 理解字面意思为 :一个 实体类名叫Student ,内部属性有学 ...
- Mybatis-Plus的引用
一.依赖 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-b ...