侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

使用zabbix监控mongodb的方法

数据库  /  管理员 发布于 5年前   155

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

Mongodb如今越来越火,要做好对mongodb的监控就需要从它的安装配置,到简单的command语句使用,再到对它运行机制以及状态获取方法的掌握。

    mongodb有三种基本的状态获取方式:

    1.mongostat

    2.开启28017的监听端口,curl http://127.0.0.1:28017/_status

   3.进入mongo执行db.serverStatus命令

    我用的是第三种方法:

echo "db.serverStatus()" |/usr/local/mongodb/bin/mongo 192.168.1.123:27017/foo --quiet{    "host" : "TENCENT64.site", --server的hostname    "version" : "2.0.5", --mongo版本    "process" : "mongod", --进程名    "uptime" : 1238418, --启动时间(单位:S)    "uptimeEstimate" : 1230730, --基于MongoDB内部粗粒度定时器的运行时间    "localTime" : ISODate("2012-09-14T09:09:52.657Z"), --server的本地时间    "globalLock" : {        "totalTime" : 1238418105923, --全局锁创建的时间(单位:ms 微秒)        "lockTime" : 75055831911, --全局锁保持的时间(单位:ms 微秒)        "ratio" : 0.06060621332329477, --lockTime和totalTime的比        "currentQueue" : {"total" : 0, --等待全局锁的队列中操作数目"readers" : 0, --等待读锁的队列中操作数目"writers" : 0 --等待写锁的队列中操作数目        },        "activeClients" : {"total" : 1, --连接到server的当前活动client数目"readers" : 1, --执行读操作的当前活动client数目"writers" : 0 --执行写操作的当前活动client数目        }    },    "mem" : {        "bits" : 64, --64位机器        "resident" : 18363, --占用物理内存量。        "virtual" : 478810, --占用的虚拟内存量        "supported" : true, --是否支持扩展内存        "mapped" : 233311, --映射到内存的数据文件大小,很接近于你的所有数据库大小。        "mappedWithJournal" : 466622,        "note" : "virtual minus mapped is large. could indicate a memory leak"    },    "connections" : {        "current" : 737, --当前活动连接量。连接到server的当前活跃连接数目        "available" : 82 --剩余空闲连接量。剩余的可用连接数目    },    "extra_info" : {        "note" : "fields vary by platform",        "heap_usage_bytes" : 3838448, --此过程中所有的堆字节数目。仅适用于Linux        "page_faults" : 31058356 --此过程中访问内存中页面失败的总次数。仅适用于Linux    },    "indexCounters" : {        "btree" : {"accesses" : 68229146, --Btree索引的访问次数(索引被访问量)"hits" : 68229146, --内存中的Btree页的数目。(索引命中量)"misses" : 0, --内存中不存在的Btree也数目。(索引偏差量)(索引内存访问失败次数)"resets" : 0, --索引计数器被重置为0的次数"missRatio" : 0 --索引偏差率(未命中率)        }    },    "backgroundFlushing" : {        "flushes" : 20640, --数据库刷新写到磁盘的次数        "total_ms" : 2453287, --数据库刷新数据到磁盘花费的微秒数        "average_ms" : 118.8608042635659, --执行单次刷新花费的平均微秒数        "last_ms" : 1, --最后一次执行完成刷新数据到磁盘花费的微秒数        "last_finished" : ISODate("2012-09-14T09:09:35.656Z") --当最后一次刷新数据完成时的时间戳    },    "cursors" : {        "totalOpen" : 0, --server为client保持的游标(cursor)总数        "clientCursors_size" : 0, --        "timedOut" : 24 --server启动以来游标(cursor)超时的总数    },    "network" : {        "bytesIn" : NumberLong("1929833164782"), --发送到数据库的数据总量(bytes)        "bytesOut" : 553137147925, --数据库发出的数据总量(bytes)        "numRequests" : 2475184328 --发送到数据库的请求量    },    "opcounters" : {        "insert" : 687531883, --server启动以来总的insert数据量        "query" : 711010343, --server启动以来总的query数据量        "update" : 0, --server启动以来总的update数据量        "delete" : 0, --server启动以来总的delete数据量        "getmore" : 6484, --server启动以来调用任何游标的getMore总次数        "command" : 1287537 --server启动以来执行其他命令的总次数    },    "asserts" : {        "regular" : 0, --server启动以来抛出正规断言(assert 类似于异常处理的形式)总数目        "warning" : 1, --server启动以来抛出的告警总数目        "msg" : 0, --消息断言数目。服务器内部定义的良好字符串错误        "user" : 4, --用户断言数目。用户产生的错误,譬如:磁盘空间满;重复键。        "rollovers" : 0 --server启动以来,assert counters have rolled over的次数    },    "writeBacksQueued" : false, --是否有从mongos执行的retry操作    "dur" : {        "commits" : 30, --上一间隔journal日志发生commit的次数        "journaledMB" : 0, --上一间隔写到journal日志的数据量(单位:MB)        "writeToDataFilesMB" : 0, --上一间隔journal日志写到数据文件的数据量(单位:MB)        "compression" : 0, --        "commitsInWriteLock" : 0, --写锁期间发生commits的次数        "earlyCommits" : 0, --schedule时间前请求commit的次数        "timeMs" : {"dt" : 3064,"prepLogBuffer" : 0, --准备写journal日志花费的时间"writeToJournal" : 0, --写journal日志花费的实际时间"writeToDataFiles" : 0, --journal日志后写数据文件花费的时间"remapPrivateView" : 0 --The amount of time spent remapping copy-on-write memory mapped views        }    },    "ok" : 1 --serverStatus是否返回正确}

    以上,我们把所需要的参数抽取出来就可以做成监控项了。

先定义键值:

#mongodb.confUserParameter=mongodb_port_discovery,/usr/local/zabbix/exec/mongo_discovery.pyUserParameter=mongodb_stats[*],/usr/local/zabbix/exec/mongo_status.sh $1 $2 $3 $4 $5

写mongo_discovery.py脚本(用于端口发现)

#!/usr/bin/env python# -*- coding:utf-8 -*-import jsonimport subprocessjson_data = {"data":[]}net_cmd = '''sudo netstat -nlpt|awk '/mongo/{print $4}''''p = subprocess.Popen(net_cmd, shell=True, stdout=subprocess.PIPE)net_result = p.stdout.readlines()for server in net_result:  dic_content = {   "{#MONGO_PORT}" : server.split(':')[1].strip(),   "{#MONGO_IPADDR}" : server.split(':')[0].strip()   }  json_data['data'].append(dic_content)result = json.dumps(json_data,sort_keys=True,indent=4)print result

写mongo_status.sh状态检测脚本

#!/bin/bash##mongo_status.sh####wuhf##case $# in 3)  output=$(/bin/echo "db.serverStatus().$3" |/usr/local/mongodb/bin/mongo $1:$2/foo --quiet)  ;; 4)  output=$(/bin/echo "db.serverStatus().$3.$4" |/usr/local/mongodb/bin/mongo $1:$2/foo --quiet)  ;; 5)  output=$(/bin/echo "db.serverStatus().$3.$4.$5" |/usr/local/mongodb/bin/mongo $1:$2/foo --quiet)  ;;esacif [[ "$output" =~ "NumberLong"  ]];then echo $output|sed -n 's/NumberLong(//p'|sed -n 's/)//p'else  echo $outputfi

权限设置

chmod 755 /usr/local/zabbix/exec/*chown zabbix.zabbix /usr/local/zabbix/exec/*chown zabbix.zabbix /usr/local/zabbix/etc/zabbix_agentd.conf.d/*echo "zabbix ALL=(root) NOPASSWD:ALL" >> /etc/sudoerssed -i 's/^Defaults.*.requiretty/#Defaults  requiretty/' /etc/sudoers

做MongoDB模板

定义自动发现规则


定义监控项


最后添加触发器和图就完成了

注意:在mongodb.conf配置文件里定义了键值对应关系后要重启zabbix服务才能生效


  • 上一条:
    MongoDB性能优化及监控
    下一条:
    在Mac OS上安装使用MongoDB的教程
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 分库分表的目的、优缺点及具体实现方式介绍(0个评论)
    • DevDB - 在 VS 代码中直接访问数据库(0个评论)
    • 在ubuntu系统中实现mysql数据存储目录迁移流程步骤(0个评论)
    • 在mysql中使用存储过程批量新增测试数据流程步骤(0个评论)
    • php+mysql数据库批量根据条件快速更新、连表更新sql实现(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2017-06
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-11
    • 2018-01
    • 2018-05
    • 2018-10
    • 2018-11
    • 2020-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2021-02
    • 2021-04
    • 2021-07
    • 2021-08
    • 2021-11
    • 2021-12
    • 2022-02
    • 2022-03
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-07
    • 2023-08
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-03
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客