一. 需求背景

MongoDB数据库的强大的文档模型使其成为处理数据的最佳方式。文档适用于广泛的流行数据模型,支持各种各样的场景。文档模型可以包含键值、关系数据集和图形数据集,当然,还可以包含父子关系、列表/数组以及其他层次关系,它们比传统的关系型数据库技术(表格)具有更大的灵活性。由于文档模型与主流面向对象编程语言中的对象直接对应,因此开发人员可以根据现实世界中实体之间的自然关系存储和组织数据,从而将重点放在以最有意义的方式构建应用程序上,而不是围绕其数据库的局限性开展工作。因此,使用文档模型显著提高了开发人员的生产效率,使组织机构能够更快地进行创新。MongoDB CEO 兼总裁Dev Ittycheria称之为: 文档即未来。

但是MongoDB通用的监控工具有限,其中又有一部分还是要收费的,通过工具 Percona Monitoring and Management 进行监控,是个不错的选择。但在慢查询收集方面,需要开启Profiling,对性能方面会有一些侵害,另外,更细粒度的监控项维护起来也不容易。如果不想不开启Profiling,我们还可以通过收集分析mongodb的运行log来来进行性能监控,并且通过运行日志还可以获取更多的运行状态相关的信息。

今天介绍的就是一款专门用来读取、分析MongoDB运行日志的工具--Mtools。

二. Mtools 的介绍

Mtools的工具包和功能可以通过下面的List来描述。

工具包 工具 功能概览 实现功能 执行的命令(案例)
mtools Mlogfilter mlogfileter可以简单理解为日志的过滤器 列出日志文件中所有的slow log(以json格式输出)  mlogfilter mongod.log --slow 100 --json
通--from 和 --to 参数限定搜索范围 mlogfilter mongod.log --slow 100 --from 2018-12-10T09:32:26 --to 2018-12-10T09:58:26
上面命令限定范围 也通过 to 来指定时间段,例如监控10min内的数据 mlogfilter mongod.log  --from 2018-12-10T09:32:26 --to +10min
通过mlogfilter查询日志中某个表的slow log(超过100ms的) mlogfilter --namespace xxx.xx --slow 100 mongod.log
mloginfo mloginfo可以过滤总结出slow query的情况,以及为日志中各类最常常出现情况进行统计 通过mloginfo统计日志中connections的来源情况 mloginfo mongod.log --connections
通过mloginfo查看日志中所记录的复制集状态变更(如果有的话) mloginfo mongod.log --rsstate
通过mloginfo统计查看日志中慢查询的分类 mloginfo --queries mongod.log
通过mloginfo统计日志中各类信息的distinct mloginfo mongod.log --distinct
mplotqueries 用不同类型的图将日志文件可视化(需要安装matplotlib) 通过mplotqueries进行慢查询散点分布图绘制 mplotqueries mongod.log --output-file slow01-2.png
通过mplotqueries进行慢查询散点分布图绘制,且只返回前10个 mplotqueries mongod.log --output-file slow01-4.png --logscale --group-limit 10
仅看日志中某一个表的慢查询散点分布情况 mlogfilter mongod.log --namespace xx.xxx |mplotqueries --output-file slow01-5.png
通过mplotqueries来对日志中的慢查询进行操作类型分布 mplotqueries mongod.log --group operation --output-file slow01-6.png
查看每小时的insert情况 mlogfilter mongod.log --operation insert | mplotqueries --type histogram --bucketsize 3600 --output-file 01-11.png

注:mongod.log 是MonogoDB 运行时产生的日志文件名字,也可以是其它日志文件名。

三. Mtools安装的详细步骤

很多同学抱怨安装比较麻烦,错误很多,在这儿,把安装的详细步骤梳理如下。

Step 1  下载pip程序包

wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=834b2904f92d46aaa333267fb1c922bb"

Step 2 解析下载的文件

 Step 3 安装 python setup.py install

此时报错,提示错误信息如截图

Step 4  针对上述错误,需安装setuptools,python下的setuptools。此程序包带有一个easy_install的工具,在安装python的每三方模块、工具时很有用,。

下载

wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-12.0.3.tar.gz#md5=f07e4b0f4c1c9368fcd980d888b29a65

解压

Step 5 转到解析后的文档中,再次安装 python setup.py install

安装成功。

Step 6 安装 yum -y install python-pip

如果提示错误

No package python-pip available.

Error: Nothing to do

请看后面的附注

Step 7  安装  mtools

执行命令  pip install mtools

Step 8 安装效果验证

使用其中的mlogfileter命令,查看日志超过100ms的慢查询。

通过mloginfo统计日志中connections的来源情况

验证工具安装OK。

安装后,工具包所在的文档位于 /usr/lib/python2.7/site-packages/mtools 下 (自动生成)

四 附录

A:解决 No package python-pip available的问题

此错误的原因主要是没有安装epel。索引, 运行以下命令,安装epel

安装 epel-release后,再次安装 python-pip,不再报错。

 B:运行 mplotqueries 工具 需安装 python-matplotlib 包,和修改mplotqueries.py文件

否则报错,具体信息如下:

安装命令 yum install python-matplotlib

到此,还没结束,还会报错,我们还需要修改 /usr/lib/python2.7/site-packages/mtools/mplotqueries/mplotqueries.py 执行文件。

添加 以下指令

import matplotlib as mpl
mpl.use('Agg')

添加前

添加后

再次执行 mplotqueries 命令后,看出生成了我们想要的 01-2.png 统计文件

本文版权归作者所有,未经作者同意不得转载,谢谢配合!!!

推荐一款关于MongoDB日志分析的工具--Mtools的更多相关文章

  1. 推荐15款最好的 Twitter Bootstrap 开发工具

    Twitter Bootstrap 自从2011年最初发布到网上后,迅速成为 Web 领域最流行的响应式前端开发框架之一,是网页设计的优秀实践.Twitter Bootstrap 框架包含了众多的预定 ...

  2. 推荐10款非常优秀的 HTML5 开发工具

      HTML5 发展如火如荼,随着各大浏览器对 HTML5 技术支持的不断完善以及 HTML5 技术的不断成熟,未来 HTML5 必将改变我们创建 Web 应用程序的方式.今天这篇文章向大家推荐10款 ...

  3. 推荐五款优秀的PHP代码重构工具

    在软件工程学里,重构代码一词通常是指在不改变代码的外部行为情况下而修改源代码.软件重构需要借助工具完成,而重构工具能够修改代码同时修改所有引用该代码的地方.本文收集了五款出色的PHP代码重构工具,以帮 ...

  4. 推荐两款好用的反编译工具(Luyten,Jadx)

    使用JD-Gui打开单个.class文件,总是报错// INTERNAL ERROR 但当我用jd-gui反编译前面操作获得的jar文件的时,但有一部分类不能显示出来--constants类,仅仅显示 ...

  5. 推荐一款优秀的web自动化测工具

    在业务使用的自动化测试工具很多.有开源的,有商业化的,各有各得特色,各有各得优点!下面我就介绍几个我用过的一款非常优秀的国产自动化测试工具.在现有的自动化软件当中,都是以元素的name.id.xpat ...

  6. 推荐一款阿里开源的 Java 诊断工具,好用到爆!

    Arthas是什么鬼? Arthas是一款阿里巴巴开源的 Java 线上诊断工具,功能非常强大,可以解决很多线上不方便解决的问题. Arthas诊断使用的是命令行交互模式,支持JDK6+,Linux. ...

  7. 测试开发:推荐一款阿里最新 Python 自动化开源工具!

    大家好,我是麦小米,是狂师老师全栈测开训练营中的一名学员. 如果之前做过iOS自动化的同学相信都知道,一直以来,iOS自动化的实现&执行都必须依赖 Mac 系统,其主要原因是因为需要通过 xc ...

  8. 推荐10款最常用的Android开发工具

    我们使用各种语言进行开发时,总是会用到各种各样的开发工具.有些开发工具是开发人员的必备品,有些则是为了提高开发效率而用.Android开发同样也会用到多种开发工具,供开发人员设计.创建.测试和发布程序 ...

  9. 推荐10款免费的在线UI测试工具

    发布网站之前至关重要的一步是网站测试.网站测试要求我们全面地运行网站并通过所有基本测试,如响应式设计测试.安全测试.易用性测试.跨浏览器兼容性.网站速度测试等. 网站测试对SEO.搜索引擎排名.转换率 ...

随机推荐

  1. 【Redis篇】Redis集群安装与初始

    一.前述   本文将单台节点不同端口模拟集群方式. 二.具体搭建 前提是安装好redis具体可参考http://www.cnblogs.com/LHWorldBlog/p/8463269.html 1 ...

  2. Hbase篇--Hbase和MapReduce结合Api

    一.前述 Mapreduce可以自定义Inputforma对象和OutPutformat对象,所以原理上Mapreduce可以和任意输入源结合. 二.步骤 将结果写会到hbase中去.  2.1 Ma ...

  3. NDK开发入门终极教程

    0 前言 同NDK技术的渊源始于3年前,使用so文件的时候了解到NDK技术,并且C语言一直是强项,就鼓捣起NDK开发.在AndroidStduio还没推广的年代,基于eclipse搭建NDK开发环境需 ...

  4. Python内置函数(62)——sum

    英文文档: sum(iterable[, start]) Sums start and the items of an iterable from left to right and returns ...

  5. JVM基础系列开篇:为什么要学虚拟机?

    跟许多人一样,我一开始接触 Java 虚拟机只是因为面试需要用到,所以硬着头皮看看.所以很多人对于为什么要学虚拟机这个问题,他们的答案都是:因为面试.但我经过了几年的学习和实战,我发现其实学习虚拟机并 ...

  6. Can't connect to X11 window server using ':1.0' as the value of the DISPLAY variable.

    安装oracle数据时需要用到图形界面安装,当我们用root用户登录后切换到oracle用户时运行./runInstaller提示报错: Can't connect to X11 window ser ...

  7. Python爬虫入门教程 22-100 CSDN学院课程数据抓取

    1. CSDN学院课程数据-写在前面 今天又要抓取一个网站了,选择恐惧症使得我不知道该拿谁下手,找来找去,算了,还是抓取CSDN学院吧,CSDN学院的网站为 https://edu.csdn.net/ ...

  8. EF架构~mysql中时间戳字段被认为是主键自增

    回到目录 如果在mysql中添加了自增字段,用来维护行的版本,那么在EF中会有一个问题,会把它当成是数据表主键,当你的真正主键是自曾时,就会把默认值0拼到生成的SQL语句里,导致你的insert出错, ...

  9. tensorflow机器学习模型的跨平台上线

    在用PMML实现机器学习模型的跨平台上线中,我们讨论了使用PMML文件来实现跨平台模型上线的方法,这个方法当然也适用于tensorflow生成的模型,但是由于tensorflow模型往往较大,使用无法 ...

  10. RabbitMQ消息队列(五)-安装amqp扩展并订阅/发布Demo(.Net Core版)

    publish发布消息 新建一个Asp.Net Core控制台项目:PublishDemo 安装Nuget包 Install-Package RabbitMQ.Client 添加命名空间引用 usin ...