资讯专栏INFORMATION COLUMN

mtools-MongoDB慢日志文件分析工具

社区管理员 / 1029人阅读

一、mtools工具集介绍

1.1 mtools工具集是什么?

开源地址介绍:https://github.com/rueckstiess/mtools

mtools是一组工具集脚本,用于解析、过滤和可视化 MongoDB 日志文件 ( mongod, mongos)。mtools也包含mlaunch工具,该工具可以快速搭建本地测试环境。mtransfer工具可以用于数据库之间数据传输。

1.2 mtools工具组件介绍

  • mlogfilter:日志过滤组件,支持按时间切割、合并、过滤慢查询、查找全表扫描操作,支持通过多个属性进行信息过滤,支持输出为JSON格式。

  • mloginfo:返回有关日志文件的信息,例如:开始和结束时间、版本、二进制文件、重新启动、连接、不同视图等特殊部分

  • mplotqueries:支持将日志分析结果转换为图表形式,依赖于tkinter(python图形模块)和matplotlib模块。

  • mlaunch:支持快速部署本地测试环境,可以是单机、副本集、分片集群。(依赖pymongo

  • mtransfer:通过复制 WiredTiger 数据文件在 MongoDB 实例之间传输数据库的实验脚本。(需要pymongowiredtiger

二、mtools工具的使用

#(1)安装mtools工具及依赖
pip3 install mtools
yum install python-tools
pip3 install psutil
pip3 install pymongo
pip3 install matplotlib
pip3 install numpy

#(2)安装Python环境
wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz 
xz -d Python-3.6.8.tar.xz 
tar -xvf Python-3.6.8.tar

cd Python-3.6.8/
./configure --with-ssl             # 带上ssl不然pip会出现错误
make
make install

2.1 mloginfo日志统计

(1)日志总体信息,比如:日志的起止时间范围、主机端口、版本、数据库引擎等概要信息。

[root@10-23-85-17 ~]# mloginfo mongodb.log 
     source: mongodb.log
       host: 84b511baa949:27017
      start: 2022 May 27 00:00:05.941
        end: 2022 May 28 00:00:06.954
date format: iso8601-local
   timezone: UTC +0800
     length: 1437359
     binary: mongod
    version: 3.2.7
    storage: wiredTiger

(2)连接数

[root@10-23-85-17 ~]# mloginfo mongodb.log --connections
     source: mongodb.log
       host: 84b511baa949:27017
      start: 2022 May 27 00:00:05.941
        end: 2022 May 28 00:00:06.954
date format: iso8601-local
   timezone: UTC +0800
     length: 1437359
     binary: mongod
    version: 3.2.7
    storage: wiredTiger

CONNECTIONS
     total opened: 14282
     total closed: 14358
    no unique IPs: 4
socket exceptions: 0
127.0.0.1 opened: 12886 closed: 12889
172.21.0.10 opened: 658 closed: 716
172.21.0.20 opened: 461 closed: 490
172.21.0.30 opened: 277 closed: 263

(3)事件统计,即统计出当前某些事件的发生频次

[root@10-23-85-17 ~]# mloginfo mongodb.log --distinct
     source: mongodb.log
       host: 84b511baa949:27017
      start: 2022 May 27 00:00:05.941
        end: 2022 May 28 00:00:06.954
date format: iso8601-local
   timezone: UTC +0800
     length: 1437359
     binary: mongod
    version: 3.2.7
    storage: wiredTiger

DISTINCT
                                                                                          
   25460  SocketException handling request, closing client connection:
   19504  assertion ... ns: ... query:
   18464  exception: ... on:
    5075  going to kill op:
     660  Index ... :
     400  Error in heartbeat request to ... ;
     312  build index on: ... properties:
     312  building index using bulk method
     300  Placing a marker at optime
      59  Successfully connected to
      44  Member ... is now in state
      28  DBClientCursor::init call() failed
      27  Socket recv() timeout
      27  SocketException: remote: ... error:
      23  Plan executor error during find: ... , stats:
      18  transition to

(4)慢查询:显示所有慢查询,并按出现次数排序

[root@10-23-85-17 ~]# mloginfo mongodb.log --queries --sort count
     source: mongodb.log
       host: 84b511baa949:27017
      start: 2022 May 27 00:00:05.941
        end: 2022 May 28 00:00:06.954
date format: iso8601-local
   timezone: UTC +0800
     length: 1437359
     binary: mongod
    version: 3.2.7
    storage: wiredTiger

QUERIES
namespace         operation    pattern                                                                count     min (ms)    max (ms)    95%-ile (ms)    sum (ms)       mean (ms)    allowDiskUse
doyo.news         count        {"$or": [{"n_cate": 1}, {"n_prop": 1}], "bigcate": 1, "status": 1}     188339         587      492592         45736.2     1247160002       6621.9    None
doyo.resource     query        {"cate": 1, "status": 1}                                               173569         101      429614          1792.0       78818078        454.1    None
doyo.news         query        {"nid": 1, "status": 1}                                                120989         101     1159648        760531.2    12485218384

(5)重启信息

[root@10-23-85-17 ~]# mloginfo mongodb.log --restart
     source: mongodb.log
       host: 84b511baa949:27017
      start: 2022 May 27 00:00:05.941
        end: 2022 May 28 00:00:06.954
date format: iso8601-local
   timezone: UTC +0800
     length: 1437359
     binary: mongod
    version: 3.2.7
    storage: wiredTiger

RESTARTS
   May 27 08:44:55 version 3.2.7
   May 27 08:59:23 version 3.2.7
   May 27 11:25:00 version 3.2.7

(6)副本切换情况

[root@10-23-85-17 ~]# mloginfo mongodb.log --rsstate
     source: mongodb.log
       host: 84b511baa949:27017
      start: 2022 May 27 00:00:05.941
        end: 2022 May 28 00:00:06.954
date format: iso8601-local
   timezone: UTC +0800
     length: 1437359
     binary: mongod
    version: 3.2.7
    storage: wiredTiger

RSSTATE
date               host                 state/message

May 27 08:44:58    10.23.1.242:27017    ARBITER
May 27 08:44:58    10.23.1.26:27017     PRIMARY
May 27 08:54:42    10.23.1.26:27017     SECONDARY
May 27 08:59:25    10.23.1.242:27017    ARBITER
May 27 08:59:25    10.23.1.26:27017     SECONDARY
May 27 08:59:30    10.23.1.26:27017     PRIMARY
May 27 08:59:42    10.23.1.26:27017     SECONDARY

2.2 日志过滤

(1)查询超过10s的慢查询

[root@10-23-85-17 ~]# mlogfilter mongodb.log --slow 10000 --shorten 200

2022-05-27T08:27:25.862+0800 I COMMAND [conn84751] query doyo.news query: { $query: { nid: { $gt: ...0 } }, Database: { acquireCount: { r: 3795 } }, Collection: { acquireCount: { r: 3795 } } } 10510ms
2022-05-27T08:27:28.254+0800 I COMMAND [conn84689] command doyo.news command: count { count: "news... acquireCount: { r: 3788 } }, Collection: { acquireCount: { r: 3788 } } } protocol:op_query 10247ms

(2)查询慢扫描操作

  • 慢扫描是指该操作需要扫描过多的记录(超过1w行),且返回数量不足扫描数量的1/100,这样的操作通常对CPU消耗很高,也比较低效

[root@10-23-85-17 ~]# mlogfilter mongodb.log --scan --shorten 200

2022-05-27T12:10:51.816+0800 I COMMAND [conn581] query doyo.news query: { $query: { bigcate: "2", ...0 } }, Database: { acquireCount: { r: 1470 } }, Collection: { acquireCount: { r: 1470 } } } 11869ms
2022-05-27T12:10:53.739+0800 I COMMAND [conn578] query doyo.news query: { $query: { bigcate: "1", ...6 } }, Database: { acquireCount: { r: 3183 } }, Collection: { acquireCount: { r: 3183 } } } 14412ms

(3)获取某时间点之后1小时的日志

[root@10-23-85-17 ~]# mlogfilter mongodb.log --from May 27 0:00 --to "+1h" | tail -n3

2022-05-27T00:00:05.941+0800 I CONTROL [conn80893] distarch: x86_64
2022-05-27T00:00:05.941+0800 I CONTROL [conn80893] target_arch: x86_64


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128117.html

相关文章

  • What’s New in TiDB 3.0.0 Beta.1

    摘要:作者申砾今年月份,我们发布了版本,上也对这个版本做了介绍,经过两个月的努力,今天推出了下一个版本。新增通过语句方式管理状态,简化状态管理,当前仅支持查看状态。支持通过配置文件管理发送策略丰富管理方式。在这里对各位贡献者表示由衷的感谢。 作者:申砾 今年 1 月份,我们发布了 TiDB 3.0.0 Beta 版本,DevCon 上也对这个版本做了介绍,经过两个月的努力,今天推出了下一个 ...

    cc17 评论0 收藏0
  • What’s New in TiDB 3.0.0 Beta.1

    摘要:作者申砾今年月份,我们发布了版本,上也对这个版本做了介绍,经过两个月的努力,今天推出了下一个版本。新增通过语句方式管理状态,简化状态管理,当前仅支持查看状态。支持通过配置文件管理发送策略丰富管理方式。在这里对各位贡献者表示由衷的感谢。 作者:申砾 今年 1 月份,我们发布了 TiDB 3.0.0 Beta 版本,DevCon 上也对这个版本做了介绍,经过两个月的努力,今天推出了下一个 ...

    SimpleTriangle 评论0 收藏0
  • MySQL日志实践

    摘要:慢日志查询作用慢日志查询的主要功能就是,记录语句中超过设定的时间阈值的查询语句。但是慢日志查询开启之后,针对查询会通过磁盘将相关的记录写入到磁盘文件中,增加了一个磁盘的读写。慢日志查询工具由于慢日志查询文件越到后期,内容越多。 慢日志查询作用 慢日志查询的主要功能就是,记录sql语句中超过设定的时间阈值的查询语句。例如,一条查询sql语句,我们设置的阈值为1s,当这条查询语句的执行时间...

    2i18ns 评论0 收藏0
  • MySQL日志管理

    摘要:决定是否将警告信息记录入错误日志。其他相关配置设定二进制日志文件上限,单位为字节,最小值为,最大值为,默认为。当从崩溃中恢复时,会读取事务日志,将其中已经的事务写入数据库,没有的事务。事务日志由存储引擎管理,一般不需要手动干预。 参照:系统是CentOS6.4 ,MySQL版本为5.5.32 MySQL 服务器上一共有六种日志:错误日志,查询日志,慢查询日志,二进制日志,事...

    codercao 评论0 收藏0
  • redis监控

    摘要:为了防止人为的失误,所以我们最好对配置进行监控,使用命令来获取当前运行时的配置,并与中的配置值进行对比。监控服务主从监控工具,并实现主挂掉之后的自动故障转移。更通用的监控方案。开发的监控服务,原理和类似数据分布对的数据集进行分析。 获得系统的状态报告 我们可以用这个命令去了解当前redis的运行状态 redis-cli info 这条命令会显示当前redis运行时的全局的包括各种方面状...

    tuniutech 评论0 收藏0

发表评论

0条评论

社区管理员

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<