mongodb 监控权限_分布式监控系统Zabbix3.4-针对MongoDB性能监控操作笔记
公司在IDC机房的一台服务器上部署了MongoDB,由于所存储的业务数据比较重要,所以对MongoDB的监控显得尤为重要!Zabbix监控MongoDB性能的原理:通过echo "db.serverStatus()" | mongo admin 来查看mongodb的状态。
Zabbix监控MongoDB性能,主要监控以下项目:
- 内存使用情况
- 连接数
- 锁
- 刷新写操作到磁盘
- 每秒执行的查询,插入,删除,更新等操作次数
- 每秒访问的索引次数,每秒命中索引的次数
- MongoDB产生的总的页面错误数量
- MongoDB的网络流量状况
下面简单说下操作过程:
1)MongoDB部署机上的配置(即Zabbix_agnet客户端)
mongodb部署机的ip为10.0.11.60,的端口为28000
[root@kevin-mongodb ~]# ps -ef|grep mongo
root 17402 15951 0 01:06 pts/0 00:00:00 grep --color=auto mongo
mongo 31758 1 0 Sep17 ? 00:25:25 mongod -f /data/mongo_28000/conf/mongo.conf
[root@kevin-mongodb ~]# lsof -i:28000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mongod 31758 mongo 11u IPv4 815849 0t0 TCP *:nxlmd (LISTEN)
连接mongodb的一个权限:库名admin,用户名monitor 密码rrrDE3496eb98S98ccff
[root@kevin-mongodb ~]# /bin/mongo 127.0.0.1:28000/admin -umonitor -prrrDE3496eb98S98ccff
......
applog:PRIMARY> db.serverStatus(); //查看mongodb的所有状态信息
applog:PRIMARY> db.serverStatus().mem;
{
"bits" : 64,
"resident" : 112,
"virtual" : 1480,
"supported" : true,
"mapped" : 0,
"mappedWithJournal" : 0
}
applog:PRIMARY> db.serverStatus().mem.virtual;
1480
applog:PRIMARY> db.serverStatus().opcounters;
{
"insert" : 13,
"query" : 3272,
"update" : 11,
"delete" : 0,
"getmore" : 94013,
"command" : 1024869
}
applog:PRIMARY> db.serverStatus().opcounters.query;
3272
该服务器作为zabbix_agent 客户端,安装目录为/usr/local/zabbix
[root@kevin-mongodb ~]# cat /usr/local/zabbix/etc/zabbix_agentd.conf|grep -v "#"|grep -v "^$"
PidFile=/usr/local/zabbix/logs/zabbix_agentd.pid
LogFile=/usr/local/zabbix/logs/zabbix_agentd.log
Server=10.0.8.40
ListenPort=10050
ServerActive=10.0.8.40
Hostname=kevin-mongodb
Timeout=10
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/
UnsafeUserParameters=1 #注意这个一定要配置成1,表示启动自定义脚本功能!
MongoDB的性能监控的自定义脚本
[root@kevin-mongodb ~]# cat /usr/local/zabbix/monitor_scripts/MongoDB.sh
#!/bin/bash
case $# in
1)
output=$(/bin/echo "db.serverStatus().$1" |/bin/mongo 127.0.0.1:28000/admin -umonitor -prrrDE3496eb98S98ccff|sed -n '4p')
;;
2)
output=$(/bin/echo "db.serverStatus().$1.$2" |/bin/mongo 127.0.0.1:28000/admin -umonitor -prrrDE3496eb98S98ccff|sed -n '4p')
;;
3)
output=$(/bin/echo "db.serverStatus().$1.$2.$3" |/bin/mongo 127.0.0.1:28000/admin -umonitor -prrrDE3496eb98S98ccff|sed -n '4p')
;;
esac
#check if the output contains "NumberLong"
if [[ "$output" =~ "NumberLong" ]];then
echo $output|sed -n 's/NumberLong(//p'|sed -n 's/)//p'
else
echo $output
fi
================================================================================
手动执行脚本中的命令,检查下:
[root@kevin-mongodb ~]# /bin/echo "db.serverStatus().mem" |/bin/mongo 127.0.0.1:28000/admin -umonitor -prrrDE3496eb98S98ccff
MongoDB shell version v3.6.7
connecting to: mongodb://127.0.0.1:28000/admin
MongoDB server version: 3.6.7
{
"bits" : 64,
"resident" : 112,
"virtual" : 1480,
"supported" : true,
"mapped" : 0,
"mappedWithJournal" : 0
}
bye
[root@kevin-mongodb ~]# /bin/echo "db.serverStatus().mem.virtual" |/bin/mongo 127.0.0.1:28000/admin -umonitor -prrrDE3496eb98S98ccff
MongoDB shell version v3.6.7
connecting to: mongodb://127.0.0.1:28000/admin
MongoDB server version: 3.6.7
1480
bye
[root@kevin-mongodb ~]# /bin/echo "db.serverStatus().mem.virtual" |/bin/mongo 127.0.0.1:28000/admin -umonitor -prrrDE3496eb98S98ccff|sed -n "4p"
1480
[root@kevin-mongodb ~]# /bin/echo "db.serverStatus().opcounters" |/bin/mongo 127.0.0.1:28000/admin -umonitor -prrrDE3496eb98S98ccff
MongoDB shell version v3.6.7
connecting to: mongodb://127.0.0.1:28000/admin
MongoDB server version: 3.6.7
{
"insert" : 13,
"query" : 3274,
"update" : 11,
"delete" : 0,
"getmore" : 94163,
"command" : 1035856
}
bye
[root@kevin-mongodb ~]# /bin/echo "db.serverStatus().opcounters.query" |/bin/mongo 127.0.0.1:28000/admin -umonitor -prrrDE3496eb98S98ccff
MongoDB shell version v3.6.7
connecting to: mongodb://127.0.0.1:28000/admin
MongoDB server version: 3.6.7
3274
bye
[root@kevin-mongodb ~]# /bin/echo "db.serverStatus().opcounters.query" |/bin/mongo 127.0.0.1:28000/admin -umonitor -prrrDE3496eb98S98ccff|sed -n "4p"
3274
================================================================================
接着添加zabbix对应的Key文件(这里后面跟"$1.$2",或者后面直接跟"$1 $2 $3")
[root@kevin-mongodb ~]# vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/userparameter_MongoDB.conf
UserParameter=MongoDB.Status[*],/usr/local/zabbix/monitor_scripts/MongoDB.sh $1.$2
重启zabbix_agent
[root@kevin-mongodb ~]# pkill -9 zabbix_agent
[root@kevin-mongodb ~]# /usr/local/zabbix/sbin/zabbix_agentd -c /usr/local/zabbix/etc/zabbix_agentd.conf
需要注意的是:一定要将/root/.dbshell文件的执行权限授予zabbix,这步很关键!!
[root@kevin-mongodb ~]# setfacl -Rm u:zabbix:rwx /root
然后在zabbix的服务端进行测试,验证是否能采集到监控数据
[root@zabbix01 ~]# /usr/local/zabbix/bin/zabbix_get -s 10.0.11.60 -k mongodb.status[mem.virtual]
1480
[root@zabbix01 ~]# /usr/local/zabbix/bin/zabbix_get -s 10.0.11.60 -k mongodb.status[opcounters.query]
3276
2)Zabbix界面里的配置
登录zabbix界面,将MongoDB监控模板导入到zabbix的模板中,添加到zabbix模板中的名称为"Template MongoDB"。模板下载地址:https://pan.baidu.com/s/1pnaFgmDdwm7GnURB6Gteuw 提取密码:7vt8
然后配置mongodb的zabbix主机监控时,关联到这个导入的模板。监控效果图如下:
========================另外一种方法==========================
除了上面方法之外,还可以使用下面的监控脚本(其他的操作和上面一致):
[root@kevin-mongodb ~]# cat /usr/local/zabbix/monitor_scripts/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 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=127.0.0.1
DB_PORT=28000
DB_USERNAME=monitor
DB_PASSWORD=rrrDE3496eb98S98ccff
MONGO=`which mongo`
JQ=`which jq`
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')
#keys=$1'.'$2
#echo $keys
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/\(BinData(.*\)"\(.*\)")/"\1\2)"/
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 2>/dev/null)
#echo $output | jq $index 2>/dev/null
#value=$(echo $output |jq .$keys 2>/dev/null)
#jq_status=$?
echo $value
手动测试:
[root@kevin-mongodb ~]# /usr/local/zabbix/monitor_scripts/mongodb.sh mem.virtual
1480
[root@kevin-mongodb ~]# /usr/local/zabbix/monitor_scripts/mongodb.sh mem,virtual
1480
[root@kevin-mongodb ~]# /usr/local/zabbix/monitor_scripts/mongodb.sh opcounters.query
3283
[root@kevin-mongodb ~]# /usr/local/zabbix/monitor_scripts/mongodb.sh opcounters,query
3283
添加zabbix对应的Key文件
[root@kevin-mongodb ~]# cat /usr/local/zabbix/etc/zabbix_agentd.conf.d/userparameter_mongodb.conf
############################################################
# MongoDB - statistics
#
# Author: Neo Chen
# Website: http://www.netkiller.cn
############################################################
# Discovery
# Return MongoDB statistics
#UserParameter=mongodb.status[*],/bin/bash /usr/local/zabbix/monitor_scripts/mongodb.sh $1 $2 $3 $4 $5
UserParameter=mongodb.status[*], /usr/local/zabbix/monitor_scripts/mongodb.sh $1 $2
在zabbix服务端验证是否能采集到监控数据的key
[root@zabbix01 ~]# /usr/local/zabbix/bin/zabbix_get -s 10.0.11.60 -k mongodb.status[mem,virtual]
1480
[root@zabbix01 ~]# /usr/local/zabbix/bin/zabbix_get -s 10.0.11.60 -k mongodb.status[opcounters,query]
3283
登录zabbix界面,导入模板,这个模板下载地址:https://pan.baidu.com/s/1lZTchsXZmGmxTutaIMVzwg
提取密码:ky1s
mongodb 监控权限_分布式监控系统Zabbix3.4-针对MongoDB性能监控操作笔记相关推荐
- mongodb 监控权限_运维监控产品分析篇
开源运维监控系统篇 1.zabbix 用户群:85%以上的泛互联网企业. 优点:支持多平台的企业级分布式开源监控软件 安装部署简单,多种数据采集插件灵活集成 功能强大,可实现复杂多条件告警, 自带画图 ...
- cad监控图标_干货!多种不同环境的无线视频监控系统拓扑图
有人问,既然无线视频监控系统如此普及,是不是所有地方都能用到无线视频监控设备呢? 例如在大街上.学校里,工厂中.写字楼内,建筑工地上.公园中.住宅小区里.江河岸边.港口码头.甚至是森林.戈壁滩等等.只 ...
- 口碑好的mysql数据监控平台_构建狂拽炫酷屌的 MySQL 监控平台
prometheus+grafana 对于现在这个时间点来说,相信很多同行都应该已经开始玩起来了,当仍然可能有一部分人可能还不知道prometheus+grafana 的存在,也可能还有一部分人虽然知 ...
- py获取前端的参数_鹅厂技术说 | 深入理解前端性能监控
作者系 腾讯新闻前端团队 大鹏哥,本文已得到授权. 导语:在同样的网络环境下,有两个同样能满足你的需求的网站,一个唰的一下就加载出来了,另一个白屏转圈转了半天内容才出来,如果让你选择,你会用哪一个? ...
- 分布式 集群 系统组件架构_分布式跟踪系统的四个组件如何一起工作
分布式 集群 系统组件架构 十年前,基本上只有认真思考分布式跟踪的人是学者和少数大型互联网公司. 如今,对于任何采用微服务的组织来说,它已经变成了赌注. 基本原理是公认的:微服务以令人惊讶且通常是惊人 ...
- 编写一个能监控到windows进程占用内存大小的脚本_Java性能监控分析及调优工具...
>>>推荐阅读<<< 1.性能测试学习笔记-场景设计 2.性能测试的重要意义 3.性能分析流程及方法 4.应用系统性能调优之性能分析 Java性能监控分析及调优工具 ...
- mongodb mac安装_在Mac OS X上安装MongoDB
mongodb mac安装 Today we will install MongoDB on Mac OS X. MongoDB is one of the leading NoSQL databas ...
- Java生产环境下性能监控与调优详解 第5章 Tomcat性能监控与调优
第5章 Tomcat性能监控与调优 5-1 tomcat远程debug 5-2 tomcat-manager监控 5-3 psi-probe监控 5-4 tomcat优化
- Java生产环境下性能监控与调优详解 第6章 Nginx性能监控与调优
第6章 Nginx性能监控与调优 6-1 nginx安装 6-2 ngx_http_stub_status监控连接信息 6-3 ngxtop监控请求信息 6-4 nginx-rrd图形化监控 6-5 ...
最新文章
- opencv 1 图像载入、显示和输出
- JavaScript初学者编程题(22)
- np.array 与np.asarray区别
- oracle lob 简单介绍
- 实例——在编程过程中进行单元测试
- ajax被token拦截,vue中封装ajax请求,并且拦截请求在请求头中添加token
- 寒假每日一题2022【week2 未完结】
- 【CodeForces】947 D. Picking Strings
- C语言primcount素数计数,C语言与汇编的嵌入式编程:求100以内素数
- Java图形编程实验总结_实验二java图形界面编程2015级.doc
- ANDROID L——Material Design详解(UI控件)
- Oracle asm aix盘,AIX添加ASM的裸盘,存储底层硬盘迁移
- 简明python教程gitbook_简明Python教程 Byte of Python
- 《微电子概论》2.1 理论基础
- 软著申请详细图文步骤(附模板)
- 傅里叶级数与傅里叶变换_Part4_傅里叶级数的复数形式
- “尝鲜”元宇宙,周杰伦最佳拍档方文山将于7月25日官宣《华流元宇宙》
- iOS开发工程师常见面试题及答案
- csirs参考信号_发送和接收点(TRP)及信道状态信息参考信号(CSI-RS)传输的方法与流程...
- 【土旦】在vue filters中 优雅的使用对象的key、value来替换 if switch多重判断简化流程...