Mongodb 监测
原文地址:伍仪洲的博客
介绍
为什么要进行监控状态,因为在实际的情况中可能会发生一下无法预计的情况,比如阻塞的问题,阻塞的原因会有很多种情况造成,如果当我们查询文档的时候发生了阻塞,那么就会影响到后面的操作,甚至无法对后面的操作进行响应。
我们可以通过监控很快速的找到到底是哪里出了问题,这样有助于我们快速定位所在的问题,从而得到解决。
Mongodb官方提供了三种用语分析Mongodb的方式:
- Mongodb自带的监控工具:用于提供数据库活动的实时报告
- 数据库命令:以更真实的情况返回数据库状态的统计信息
- 第三方平台托管监控
Mongodb自带监控工具
mongostat
mongostat是官方随同mongodb下载包中一同下载的,你可以找到安装目录或者解压目录进行使用。
我们可以通过mongostat --help()
进行查询可用选项,也可以通过官方文档进行查询。
Mongostat默认所返回的信息都是基于秒为单位,比如返回的insert指的是每秒插入数据库的对象数,而如果我们限制了返回时间,那么这个返回的结果是基于限制时间的平均值。
-O 和 -o
这两个选项功能非常实用,按照正常的情况,Mongostat输出的报告会有很多我们不需要的列,所以我们可以通过-o
来实现,这个选项设置后只会包含我们选择想要列,并且这个选项可以重新命名列的名字,除此之外-o
和-O
还可以添加一些服务器状态到报表中,可以参考ServerStatus。
默认的mongostat输出的内容大概如下,并且每秒钟都会返回一个状态:
insert query update delete getmore command flushes mapped vsize res faults qrw arw net_in net_out conn time
*0 *0 *0 *0 0 2|0 0 0B 2.39G 14.0M 0 0|0 0|0 286b 13.8k 1 Aug 24 17:34:17.615
*0 *0 *0 *0 0 1|0 0 0B 2.39G 14.0M 0 0|0 0|0 285b 13.7k 1 Aug 24 17:34:18.618
*0 *0 *0 *0 0 2|0 0 0B 2.39G 14.0M 0 0|0 0|0 286b 13.8k 1 Aug 24 17:34:19.617
*0 *0 *0 *0 0 1|0 0 0B 2.39G 14.0M 0 0|0 0|0 285b 13.8k 1 Aug 24 17:34:20.617
下面的代码选项是重命名了insert列为cr,并只显示insert,query,update:
$ mongostat --host localhost -o 'insert=cr,query,update'
返回后的文档大概如下:
cr query update
*0 *0 *0
*0 *0 *0
*0 *0 *0
*0 *0 *0
-O
选项除了输出默认的列之外,可以重命名列名,还可以添加ServerStatus一些字段输出到报表,比如插入文档的总数、主机地址、版本号等信息。
$ mongostat --host localhost -O 'insert=cr,host,version'
返回后的文档大概如下:
cr query update delete getmore command flushes mapped vsize res faults qrw arw net_in net_out conn time cr host version
*0 *0 *0 *0 0 2|0 0 0B 2.39G 14.0M 0 0|0 0|0 286b 13.8k 2 Aug 24 17:51:34.031 *0 localhost:27040 3.4.6
*0 *0 *0 *0 0 1|0 0 0B 2.39G 14.0M 0 0|0 0|0 285b 13.8k 2 Aug 24 17:51:35.032 *0 localhost:27040 3.4.6
*0 *0 *0 *0 0 2|0 0 0B 2.39G 14.0M 0 0|0 0|0 286b 13.8k 2 Aug 24 17:51:36.032 *0 localhost:27040 3.4.6
--rowcount
--rowcount
可以控制mongostat返回报表的频率,--rowcount
接受的第一个参数为返回的次数,第二个参数是多少秒生成一次报表并返回。
比如我想每五秒返回一次报表,共返回十次:
$ mongostat --rowcount 10 5
--discover
监控副本集或分片的所有成员的统计信息。
mongotop
mongotop可以监控数据库或者副本集的成员中哪个集合最为繁忙。
$ mongotop --host localhost:27030
返回大概如下内容:
ns total read write 2017-08-25T20:50:06+08:00
admin.system.roles 0ms 0ms 0ms
admin.system.version 0ms 0ms 0ms
local.startup_log 0ms 0ms 0ms
local.system.replset 0ms 0ms 0ms
test.test 0ms 0ms 0ms
数据库命令
数据库命令可以提供比Mongodb自带的监控工具提供更细微的信息,如果上面的方法无法帮你定位到问题所在,你可以试试下面的数据库命令来操作问题的所在。
db.currentOp
db.currentOp()
方法可以列出数据中所有正在进行的所有操作,我们可以通过返回的信息中几个比较重要的字段来找出问题所在。
opid: 操作的ID号,可以通过db.killOp()方法来结束进程,就像系统命令中的PID。
active: 表示该操作当前是否还在运行。
secs_running:这个字段非常重要,我们可以根据此字段判断哪个操作进行了阻塞。
op:操作的类型,比如是查询,可能显示的是query。
desc:表示当前操作在日志中的前缀,我们可以根据此前缀在日志中快速定位。
除此之外,我们还可以过滤参数,得到我们只想要的结果,下面是过滤其他不是当前正在查询的操作。
db.currentOp({op: 'query'});
db.serverStatus
db.serverStatus()
方法返回数据库状态的一般概述,详细说明磁盘使用情况,内存使用,连接,日记记录和索引访问。
db.stats db.test.stats rs.status
db.stats()
方法返回当前数据库的信息,其中objects
就代表的是当前数据库所含的所有文档数量。
db.test.stats()
方法返回集合的信息
rs.status()
返回当前副本集的信息
参考
Mongodb 监测的更多相关文章
- MongoDB创建表步骤,Mongo常用的数据库操作命令,查询,添加,更新,删除_MongoDB 性能监测
->use Admin (切换到创建用户) ->db.TestDb (创建数据库) ->db.addUser(“userName”,”Pwd”) ...
- MongoDB高可用集群配置的方案
>>高可用集群的解决方案 高可用性即HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性. ...
- MongoDB学习笔记—Linux下搭建MongoDB环境
1.MongoDB简单说明 a MongoDB是由C++语言编写的一个基于分布式文件存储的开源数据库系统,它的目的在于为WEB应用提供可扩展的高性能数据存储解决方案. b MongoDB是一个介于关系 ...
- MongoDB Replica Set 选举过程
什么是选举? 选举是副本集选择某个成员成为primary的过程.primary是一个副本集中唯一能够接收写操作的成员. 下面的事件能够引发一次选举: 第一次初始化一个副本集 Primary失效.rep ...
- mongodb中的副本集搭建实践
准备运行1个主节点,2个从节点,从节点中其中是一个是仲裁节点(Arb). --oplogSize --oplogSize --oplogSize 其中application是副本集的名称,节点必须相同 ...
- MongoDB Replica Set 选举过程
Replica Set 选举过程 心跳检测 假设我们有三个节点的replica sets:X,Y和Z节点.在replica sets结构中,这三个节点每2秒会各自向其它两个节点发送一个心跳检测请求.比 ...
- MongoDB数据访问[C#]附源码下载(查询增删改) 转载
安装完MongoDBhttp://localhost:28017/监测是否成功! vs 2008 C# MongoDB 源代码下载地址:http://download.csdn.net/source/ ...
- mongoDB知识总结
官方说明文档:https://docs.mongodb.com/manual/mongo/ 1 NoSQL 简介 NoSQL,全称是”Not Only Sql”,指的是非关系型的数据库(相对于关系型数 ...
- MongoDB 复制集(二) 选举 自动故障切换
一 复制集的高可用性简介 复制集通过故障自动切换来实现高可用性,当主节点出现故障的时候,从节点可以通过选举成为主节点,而这个过程在大多数当情况下是自动进行的,不需要手动干预.在某些情况 ...
随机推荐
- jquery中append与appendTo方法区别
1. append(content)方法 方法作用:向每个匹配的元素内部追加内容. 参数介绍:content (<Content>): 要追加到目标中的内容. 用法示例: HTML代码为& ...
- Android系统--输入系统(十五)实战_使用GlobalKey一键启动程序
Android系统--输入系统(十五)实战_使用GlobalKey一键启动程序 1. 一键启动的过程 1.1 对于global key, 系统会根据global_keys.xml发送消息给某个组件 & ...
- sqlserver 处理百万级以上的数据处理与优化
一处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应 ...
- 每天来点Java面试题(一)
(1)java 中的 static 字段的 使用: 什么是 static ? 它是 java 的修饰符,定义静态变量和静态方法. 什么时候用? 通常用在工具类里面,修饰静态方法,然后供其它类的方法使 ...
- static 还是readonly 还是static readonly
一. static 多对象共享一段空间,或者说没有对象概念,就是类的概念,不需要实例化,自动被创建.多用于长期共享.不会为对象的创建或销毁而消失. public class C { ) publi ...
- ubuntu14.04_CUDA8.0_cudnn5.1_Tensorflow配置
深度学习框架tensorflow相比与caffe抽象层做的更好,即使用tensorflow的人不需要关心底层的实现,做底层实现的人不需要关心上层的模型和算法;caffe耦合比较紧凑,若想caffe用的 ...
- Python基础之常用模块(二)
一.sys模块 1.sys.exit() 退出程序,这是正常退出程序,与之前用的break不同的是,break只是退出循环,循环之后的代码还会正常运行 2.sys.argv 会返回一个列表,列表中的 ...
- Css元素居中设置
你对DIV CSS居中的方法是否了解,这里和大家分享一下,用CSS让元素居中显示并不是件很简单的事情,让我们先来看一下CSS中常见的几种让元素水平居中显示的方法. DIV CSS居中 用CSS让元素居 ...
- iOS开发实战-上架AppStore 通过内购和广告获得收益
写在前面 由于一些原因需要离职,准备重回大上海 忽然发现手头上也没什么独立App,那就随便写个放到AppStore上吧,凑个数吧.哈哈哈. 这个App是无聊找配色的时候看到的一套图 正好春节在家没什么 ...
- Java 字符排序问题
Java 字符排序问题 未专注于排序算法,而是写了一个MyString类,实现了comparable的接口,然后用Arrays的sort方法来实现排序.我觉得这道题的难度在于如果比较两个.因为大小写的 ...