使用zabbix监控mongodb的方法
作者:下善若火 发布时间:2024-01-21 05:13:16
标签:zabbix,监控,mongodb
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.conf
UserParameter=mongodb_port_discovery,/usr/local/zabbix/exec/mongo_discovery.py
UserParameter=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 json
import subprocess
json_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)
;;
esac
if [[ "$output" =~ "NumberLong" ]];then
echo $output|sed -n 's/NumberLong(//p'|sed -n 's/)//p'
else
echo $output
fi
权限设置
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/sudoers
sed -i 's/^Defaults.*.requiretty/#Defaults requiretty/' /etc/sudoers
做MongoDB模板
定义自动发现规则
定义监控项
最后添加触发器和图就完成了
注意:在mongodb.conf配置文件里定义了键值对应关系后要重启zabbix服务才能生效
0
投稿
猜你喜欢
- 一、引言这个五一假期自驾回老家乡下,家里没装宽带,用手机热点方式访问网络。这次回去感觉4G信号没有以前好,通过百度查找小说最新更新并打开小说
- 1、检查本机python 版本:2、安装Qt5 执行如下指令:pip install PyQt5 -i https://pypi.douba
- 一个非常简单的将半角"转换为中文"的asp函数function new_str(str) 
- 一.下载安装包1.安装网址https://www.jetbrains.com/pycharm/2.在导航栏输入网址回车3.点击 DOWNLO
- 目录一、IDEA如何连接数据库第一种方法:直接在方法体中增加连接信息方法二:二、方法代码的实现1.快递员增加快递2.快递员删除快递用数据库编
- 本文实例为大家分享了python监控nginx端口和进程状态的具体代码,供大家参考,具体内容如下#!/usr/local/bin/pytho
- 第一类人,用户体验无所不能。第二类人,用户体验无所不包括。第三类人,用户体验只是指导思想。用户研究通常是做创新的工作,也就注定只少数有财力、
- 密码已经是我们生活工作中必不可少的工具,但一个不安全的密码有又有可能会给我们造成不必要的损失。作为网站设计者,如果我们在网页中能对用户输入的
- 译者的话:寡妇、孤儿、捧打鸳鸯,这些场面足以让你有想哭的冲动,但当你在排版设计时,同样会碰到这些问题,甚至可能更槽。虽说今天的页面排版软件可
- 直接搭建网络必须与torchvision自带的网络的权重也就是pth文件的结构、尺寸和变量命名完全一致,否则无法加载权重文件。此时可比较2个
- rss.asp格式的 下面代码保存为rss.asp 代码如下:<!--#include file="conn.as
- 本文实例为大家分享了opencv实现图像校正的具体代码,供大家参考,具体内容如下1.引言:python实现倾斜图像校正操作2.思路流程:(1
- 一 Django的视图函数view一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。响
- 目录前言一、首先二、接下来1.对照人脸获取2. 通过算法建立对照模型3.识别前言今天,我们用Python实现简单的人脸识别技术!Python
- 本文实例讲述了Python3中函数参数传递方式。分享给大家供大家参考,具体如下:之前在看北理工嵩天等老师的python3的课程,在第五周中老
- 阅读上一篇文章《WEB2.0网页制作标准教程(5)head区的其他设置》在开始正式内容制作之前,我们必须先了解一下web标准有关代码的规范。
- 一、eval()函数是什么?Python的一个内置函数;返回传入字符串的表达式结果(官方)二、eval()函数语法解析三、eval()函数应
- 本文实例讲述了python使用htmllib分析网页内容的方法。分享给大家供大家参考。具体实现方法如下:import htmllib, ur
- 本文实例为大家分享了python实现按首字母分类查找的具体代码,供大家参考,具体内容如下要求:1.自己查找一些英文词汇,存储到某个容器类中2
- 场景描述在update表的时候出现DeadlockLoserDataAccessException异常 (Deadlock found wh