使用mongostat命令实现zabbix监控mongodb

news2024/11/25 4:27:53

zabbix监控mongodb

  • mongostat命令
  • 监控脚本参考
  • zabbix配置

mongostat命令

mongostat是mongodb自带的状态检测工具,可以使用这个命令获取mongodb的当前运行状态,并输出。我们使用这个命令获取mongodb的状态。

本示例中是一个3节点的复制集群(一主一从一仲裁),mongodb版本为4.4。

常用参数:

MONGO_HOST=127.0.0.1
MONGO_PORT=27017

# 输出json格式数据
mongostat -h $MONGO_HOST:$MONGO_PORT -p'1111111' --authenticationDatabase admin --json

输出数据样式如下:
{
  "127.0.0.1:27017": {
    "arw": "1|0",
    "command": "2|0",
    "conn": "14",
    "delete": "*0",
    "dirty": "0.1%",
    "flushes": "0",
    "getmore": "0",
    "insert": "*0",
    "net_in": "747b",
    "net_out": "51.4k",
    "qrw": "0|0",
    "query": "*0",
    "repl": "PRI",
    "res": "3.03G",
    "set": "mongo",
    "time": "10:01:01",
    "update": "*0",
    "used": "79.8%",
    "vsize": "4.92G"
  }
}

# --noheaders,不带标题头部;-n 1,只输出1行,默认情况下会持续输出数据
mongostat -h $MONGO_HOST:$MONGO_PORT -umongo_monitor -p'1111111' --authenticationDatabase admin -n 1 -o=net_in --noheaders

# 直接输出数据,不经过转换
mongostat -h $MONGO_HOST:$MONGO_PORT -umongo_monitor -p'1111111' --authenticationDatabase admin -n 1 -o=res --noheaders --humanReadable=false
# 输出数据,经过单位转换,例如GB、MB
mongostat -h $MONGO_HOST:$MONGO_PORT -umongo_monitor -p'1111111' --authenticationDatabase admin -n 1 -o=res --noheaders --humanReadable=false

上面的命令是在加了用户验证之后的,需要先配置相应的用户,添加admin.clusterMonitor权限。

详细命令参数参考:
mongostat详解 mongodb性能监控工具

监控脚本参考

#!/bin/sh
# -------------------------------------------------------------------------------
# FileName:    check_mongodb_27017.sh
# Date:        2023/01/16

MONGO_HOST='127.0.0.1'
MONGO_PORT=27017
USER=monitor
PASS=123456
DB=admin

#if [ $# -ne "$ARGS" ];then
#    echo "Please input the port and one arguement:"
#fi


case $1 in
    # 每秒插入次数
    insert)
        result=$(mongostat -h $MONGO_HOST:$MONGO_PORT -u$USER -p$PASS --authenticationDatabase $DB -n 1 --noheaders -o=insert)
        echo $result | sed  "s/*//g"
        ;;
    # 每秒更新次数    
    delete)
        result=$(mongostat -h $MONGO_HOST:$MONGO_PORT -u$USER -p$PASS --authenticationDatabase $DB -n 1 --noheaders -o=delete)
        echo $result | sed  "s/*//g"
        ;;
    # 每秒查询次数    
    query)
        result=$(mongostat -h $MONGO_HOST:$MONGO_PORT -u$USER -p$PASS --authenticationDatabase $DB -n 1 --noheaders -o=query)
        echo $result | sed  "s/*//g"
        ;;
    # 每秒更新次数    
    update)
        result=$(mongostat -h $MONGO_HOST:$MONGO_PORT -u$USER -p$PASS --authenticationDatabase $DB -n 1 --noheaders -o=update)
        echo $result | sed  "s/*//g"
        ;;
    # 每秒执行getmore次数,查看更多的意思,我们每次查询数据时,如果一次数据量比较大,超过了mongodb一次能查询的最大数据量,那么mongodb就回把这次要查询的数据分成几次查询,分别返回    
    getmore)
        result=$(mongostat -h $MONGO_HOST:$MONGO_PORT -u$USER -p$PASS --authenticationDatabase $DB -n 1 --noheaders -o=getmore)
        echo $result
        ;; 
    # 当前连接数    
    conn)
        result=$(mongostat -h $MONGO_HOST:$MONGO_PORT -u$USER -p$PASS --authenticationDatabase $DB -n 1 --noheaders -o=conn)
        echo $result
        ;;
    # 每秒执行fsync将数据写入硬盘的次数, WiredTiger存储引擎中,flushes是指WiredTiger循环创建检查点的时间间隔。每隔一段时间,mongodb就将内存上的数据写入硬盘,如果这个数值比较大的话,会影响性能
    flushes)
        result=$(mongostat -h $MONGO_HOST:$MONGO_PORT -u$USER -p$PASS --authenticationDatabase $DB -n 1 --noheaders -o=flushes)
        echo $result
        ;;

    # 每秒的命令数,比以上插入、查找、更新、删除的综合还多,还统计了别的命令    
    command)
        result=$(mongostat -h $MONGO_HOST:$MONGO_PORT -u$USER -p$PASS --authenticationDatabase $DB -n 1 --noheaders -o=command)
        echo $result
        ;;
    #####################################################################################################################################

    # 活跃客户执行写操作的数量
    ar)
        result=$(mongostat -h $MONGO_HOST:$MONGO_PORT -u$USER -p$PASS --authenticationDatabase $DB -n 1 --noheaders -o=arw)
        echo $result | cut -d "|" -f 1
        ;;
    # 活跃客户等待写的数量
    aw)
        result=$(mongostat -h $MONGO_HOST:$MONGO_PORT -u$USER -p$PASS --authenticationDatabase $DB -n 1 --noheaders -o=arw)
        echo $result | cut -d "|" -f 2 
        ;;        
    # 客户端等待读的长度,队列中的长度
    qr)
        result=$(mongostat -h $MONGO_HOST:$MONGO_PORT -u$USER -p$PASS --authenticationDatabase $DB -n 1 --noheaders -o=qrw)
        echo $result | cut -d "|" -f 1
        ;;
    # 客户端等待写的队列长度    
    qw)
        result=$(mongostat -h $MONGO_HOST:$MONGO_PORT -u$USER -p$PASS --authenticationDatabase $DB -n 1 --noheaders -o=qrw)
        echo $result | cut -d "|" -f 2
        ;;            
    #####################################################################################################################################
    
    # WiredTiger存储引擎中dirty 数据占缓存百分比    
    dirty)
        result=$(mongostat -h $MONGO_HOST:$MONGO_PORT -u$USER -p$PASS --authenticationDatabase $DB -n 1 --noheaders -o=dirty --humanReadable=false)
        echo $result
        ;;
    # WiredTiger存储引擎中引擎使用缓存占百分比    
    used)
        result=$(mongostat -h $MONGO_HOST:$MONGO_PORT -u$USER -p$PASS --authenticationDatabase $DB -n 1 --noheaders -o=used --humanReadable=false)
        echo $result
        ;;
    #####################################################################################################################################

    # 物理内存使用量,单位MB    
    res)
        result=$(mongostat -h $MONGO_HOST:$MONGO_PORT -u$USER -p$PASS --authenticationDatabase $DB -n 1 --noheaders -o=res --humanReadable=false)
        echo $result
        ;;
    # 虚拟内存使用量,单位MB
    vsize)
        result=$(mongostat -h $MONGO_HOST:$MONGO_PORT -u$USER -p$PASS --authenticationDatabase $DB -n 1 --noheaders -o=vsize --humanReadable=false)
        echo $result
        ;;
    # mongodb进入的流量包含mongostat本身(单位:bytes)
    netin)
        result=$(mongostat -h $MONGO_HOST:$MONGO_PORT -u$USER -p$PASS --authenticationDatabase $DB -n 1 --noheaders -o=net_in --humanReadable=false)
        echo $result
        ;;
    # mongodb出去的流量包含mongostat本身
    netout)
        result=$(mongostat -h $MONGO_HOST:$MONGO_PORT -u$USER -p$PASS --authenticationDatabase $DB -n 1 --noheaders -o=net_out --humanReadable=false)
        echo $result
        ;;
    #####################################################################################################################################        
        
    # 当前实例的角色
    repl)
        result=$(mongostat -h $MONGO_HOST:$MONGO_PORT -u$USER -p$PASS --authenticationDatabase $DB -n 1 --noheaders -o=repl)
        echo $result
        ;;        
    *)
        echo "Usage:$0(insert|query|delete|update|command)"
        ;;
esac

zabbix配置

添加配置文件:/etc/zabbix/zabbix_agentd.d/userparameter_mongodb.conf

UserParameter=mongodb.status[*],/etc/zabbix/zabbix_agentd.d/mongodb_stat.sh $1

zabbix获取测试

# zabbix_get -s 192.168.3.11 -p 10050 -k 'mongodb.status[netout]'
101284

如果能够正常获取到数据,就可以在zabbix控制台配置mongodb监控项了。
我配置了一个mongodb的监控模板。
在这里插入图片描述
后面还可以根据实际使用情况,添加监控图表、告警触发器等。

参考链接:
https://www.jianshu.com/p/073bd0fab907
https://cmsblogs.cn/4340.html
http://t.zoukankan.com/bien94-p-13047292.html
https://m.xp.cn/b.php/83962.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/168211.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

调用方系统禁止依赖传递后如何排查本系统所缺少依赖

订单系统依赖了好多其他系统&#xff0c;但当其他系统的service-api的包里依赖项加入了禁止依赖后&#xff0c;订单系统启动就会报错&#xff0c;具体排查那些包被禁止依赖了&#xff0c;方案如下 举例&#xff1a;会员系统后个包加入了禁止依赖<optional>true</opti…

Java中set的基本操作

文章目录1、定义Set2、增删改操作&#xff08;1&#xff09;新增&#xff08;2&#xff09;删出&#xff08;3&#xff09;修改3、访问set4、遍历set&#xff08;1&#xff09;foreach遍历&#xff08;2&#xff09;iterator迭代器遍历5、set转换6、其他操作set是一个无序的集合…

深度解析源码之SpringMVC文件上传为什么要用POST请求还要设置请求头

深度解析源码之SpringMVC文件上传为什么要用POST请求还要设置请求头 从本篇文章开始&#xff0c;来逐步介绍里面每一步的细节处理流程。 首先看到doDispatch方法的第一个重要操作就是校验文件上传请求。代码如下&#xff1a; 这个方法是如何校验文件上传请求的呢&#xff1f;…

软件测试最常用的 SQL 命令 | 通过实例掌握基本查询、条件查询、聚合查询

本文为霍格沃兹测试学院优秀学员学习笔记&#xff0c;汇总了软件测试人员经常使用&#xff0c;必须掌握的 SQL 基础命令1、DML核心CRUD增删改查缩写全称和对应 SQL&#xff1a;* DML 数据操纵语言&#xff1a;Data Manipulation Language* Create 增加&#xff1a;insert* Ret…

工作和学习遇到的技术问题

写在前面 记录工作和学习遇到的技术问题,以求再次遇到可以快速解决。 1&#xff1a;Ubuntu TSL换源报错&#xff1a;Err:1 http://mirrors.aliyun.com/ubuntu focal InRelease 执行如下操作&#xff08;已经操作的则忽略&#xff09;&#xff0c;首先在文件/etc/apt/sources…

Vue.js 数据双向绑定的实现

前言 在我们使用vue的时候&#xff0c;当数据发生了改变&#xff0c;界面也会跟着更新&#xff0c;但这并不是理所当然的&#xff0c;我们修改数据的时候vue是如何监听数据的改变以及当数据发生改变的时候vue如何让界面刷新的&#xff1f; 当我们修改数据的时候vue是通过es5中…

DataGear 制作基于Vue2、Element UI弹窗效果的数据可视化看板

DataGear 在4.4.0版本新增了dg-chart-manual-render特性&#xff0c;用于手动控制看板内图表的渲染&#xff0c;而非在页面加载时自动渲染。利用这一特性&#xff0c;可以很方便制作具有弹窗效果的数据可视化看板。 本文以Vue2、Element UI 前端框架为例&#xff0c;介绍如何制…

【C语言】通讯录—静态版

前言: 刚学完结构体和枚举&#xff0c;在网上找了个通讯录的项目&#xff0c;用来练手 目标:该通讯录可存储千人个人信息 包括:姓名&#xff0c;年龄&#xff0c;性别&#xff0c;电话&#xff0c;地址 实现功能: 1.添加联系人 2.删除联系人 …

Web 安全漏洞之 XSS 攻击

什么是 XSS 攻击 XSS&#xff08;Cross-Site Scripting&#xff09;又称跨站脚本&#xff0c;XSS的重点不在于跨站点&#xff0c;而是在于脚本的执行。XSS是一种经常出现在 Web 应用程序中的计算机安全漏洞&#xff0c;是由于 Web 应用程序对用户的输入过滤不足而产生的。 常…

MyBatis -- 多表查询

MyBatis -- 多表查询一、准备工作二、多表查询属性名与字段名不匹配一、准备工作 博客系统场景。 创建库、表&#xff1a; -- 创建数据库 drop database if exists mycnblog; create database mycnblog DEFAULT CHARACTER SET utf8mb4;-- 使用数据数据 use mycnblog;-- 创建…

小程序样式和组件基础

小程序样式和组件基础小程序样式样式wxss简介响应式单位rpx其它css单位支持的单位内置组件简介image组件-基础组件介绍常用属性示例image组件-懒加载与基础库版本用法swiper组件组件介绍常用属性示例navigator组件-基础组件介绍常用属性示例navigator组件-页面栈页面栈返回按钮…

常用windows自带程序对应的命令

敲winr键&#xff0c;调出 运行 框&#xff1b; 输入命令回车&#xff0c;打开对应程序&#xff1b; 输入cmd&#xff0c;调出命令行窗口&#xff1b; gpedit&#xff0c;组策略编辑器&#xff0c; 有的电脑没有组策略编辑器&#xff1b; 资源管理器&#xff1b; dvdplay&…

【BP靶场portswigger-客户端15】基于DOM的漏洞-7个实验(全)

前言&#xff1a; 介绍&#xff1a; 博主&#xff1a;网络安全领域狂热爱好者&#xff08;承诺在CSDN永久无偿分享文章&#xff09;。 殊荣&#xff1a;CSDN网络安全领域优质创作者&#xff0c;2022年双十一业务安全保卫战-某厂第一名&#xff0c;某厂特邀数字业务安全研究员&…

使用PyTorch构建GAN生成对抗网络源码(详细步骤讲解+注释版)02 人脸识别 上

文章目录1 数据集描述2 GPU设置3 设置Dataset类4 设置辨别器类5 辅助函数与辅助类1 数据集描述 此项目使用的是著名的celebA&#xff08;CelebFaces Attribute&#xff09;数据集。其包含10,177个名人身份的202,599张人脸图片&#xff0c;每张图片都做好了特征标记&#xff0c…

【数据结构】顺序表的原理及实现

1.什么是顺序表 顺序表是用一段物理地址连续的存储单元进行存储元素的线性结构&#xff0c;通常是以数组进行存储。通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系。 2.顺序表的实现 判断顺序表是否为空表public boolean isEmpty()判断顺序表是否满publi…

复旦MBA海外短期课程 | 善用ESG金融,共创可持续未来

2022年&#xff0c;世界在颠簸中向前迈进&#xff1a;全球气候变化、能源危机、大国博弈……在这样的背景下&#xff0c;近年来备受瞩目的ESG价值、“双碳”目标、可持续发展、责任投资等话题愈发成为焦点。今年复旦MBA培养体系全面升级之际&#xff0c;在新增的“未来发展模块…

Pandas CSV 文件

Pandas CSV 文件CSV&#xff08;Comma-Separated Values&#xff0c;逗号分隔值&#xff0c;有时也称为字符分隔值&#xff0c;因为分隔字符也可以不是逗号&#xff09;&#xff0c;其文件以纯文本形式存储表格数据&#xff08;数字和文本&#xff09;。CSV 是一种通用的、相对…

【沐风老师】3dMax一键生成中央空调排风口插件使用教程

3dMax一键创建中央空调排风口插件&#xff0c;快捷生成矩形或菱形两种形状的排风口。 【版本要求】 不确定。3dmax2020环境测试可用&#xff0c;其他版本自行测试&#xff0c;欢迎反馈测试结果。 【安装方法】 方法一&#xff1a;拖动插件文件到3dMax窗口打开。 方法二&#x…

ESP32相关知识点

1.vs code代码回退到上一步: 方法1:在Windows中可以使用快捷键“Alt←”实现 方法2:利用vs code界面操作&#xff0c;Go-Back 2.设置vs code下ESP-IDF Monitor Device的波特率。 步骤Manage-New Code update available------Command Palette 弹出对话框 搜索或选择:ESP-IDF:SD…

基于Androidstudio的打车拼车app

需求信息&#xff1a; 客户端&#xff1a; 1&#xff1a;注册和登录:用户信息录入与登录。 2&#xff1a;修改密码:用户忘记密码可在此处找回。 3&#xff1a;地图功能:提供城市地图&#xff0c;能被自由移动、放大和缩小。 4&#xff1a;自身定位:获取用户位置信息&#xff0c…