Code前端首页关于Code前端联系我们

Brother MongoDB迁移指南:MD日志分析工具

terry 2年前 (2023-09-26) 阅读数 92 #数据库

先决条件

MongoDB强大的文档模型使其成为处理数据的最佳方式。该文档适用于流行的数据类型,支持多种类型的平台。文档模型可以包含键值、关系数据集和图形数据,当然还可以包含父子关系、列表/数组和其他空间关系,这比传统数据库技术(表)提供了更大的灵活性。由于文档模型直接对应于标准面向对象编程语言中的对象,因此开发人员可以根据“现实世界”中实体之间的自然关系来存储和组织数据,从而使开发人员能够专注于以最有意义的方式构建应用程序。但不能解决其存储限制。因此,文档模型的使用极大地提高了开发人员的工作效率,使组织能够更快地进行创新。 MongoDB 首席执行官兼 总裁 Dev Ittycheria 称之为:文档就是未来。

但是,MongoDB 的通用监控工具有限,而且其中一些是付费的。通过 Percona 监控和管理工具进行监控是一个不错的选择。但是,如果查询收集速度较慢,则需要启用 Profiling,这可能会导致性能下降。另外,维护一个更好的控制对象并不容易。如果您不想删除自己的信息,可以通过收集分析mongodb运行日志来进行性能监控,还可以通过运行日志获取更多与运行状态相关的信息。

今天我们要介绍的是Mtools,一个专门用于读取和分析MongoDB活动日志的工具。

mtools工具简介

mtools工具是什么?

介绍开源网址:https://github.com/ruecksties/mtools

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

mtools工具组件介绍

  • mlogfilter:日志过滤组件,支持截断、分组、慢查询过滤、搜索全表搜索功能、支持多字符新建过滤、支持JSON格式输出。
  • mloginfo:返回有关日志文件的信息,例如:开始和结束时间、版本、二进制文件、启动、连接、不同视图和其他特殊部分
  • mplotqueries:支持将日志分析结果转换为表格格式,取决于 tkinter(python 图形模块)和 matplotlib 模块。
  • mlaunch:支持快速部署本地测试环境,可以是单机,也可以是集群,也可以是集群。 (取决于 pymongo)
  • mtransfer:通过复制 WiredTiger 数据文件在 MongoDB 实例之间传输数据的实验脚本。 (需要pymongo和wiredtiger)

使用mtools

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

#安装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

mloginfo日志统计

一般日志信息,例如:日志起始和结束编号、主机端口、版本、引擎数据库等摘要信息。

[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
连接数
[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
事件统计

即现在统计某些事件发生的频率

[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
慢查询

以数字显示以数字形式出现他们启动缓慢的信息

[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
复制切换属性
[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

日志过滤器

mlogfilter是一个强大的日志过滤模块。与Linux中使用grep/egrep进行文本过滤相比,该组件可以分析日志内容并根据我们想要的结果进行过滤。

慢查询,耗时超过 10 秒
[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
慢扫描处理

慢扫描是指该操作需要扫描太多文件(超过 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
在特定时间后 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
按位置名称过滤
# mlogfilter mongo.log --namespace dmspace.DeviceInfo
2018-05-18T21:50:58.105+0800 I COMMAND [conn31] command dmspace.DeviceInfo appName: "MongoDB Shell...adata: { acquireCount: { w: 16 } }, oplog: { acquireCount: { w: 16 } } } protocol:op_command 2963ms
2018-05-18T21:50:59.195+0800 I COMMAND [conn31] command dmspace.DeviceInfo appName: "MongoDB Shell...tadata: { acquireCount: { w: 16 } }, oplog: { acquireCount: { w: 16 } } } protocol:op_command 936ms
2018-05-18T21:51:00.173+0800 I COMMAND [conn44] command dmspace.DeviceInfo command: insert { inser...tadata: { acquireCount: { w: 16 } }, oplog: { acquireCount: { w: 16 } } } protocol:op_command 745ms
2018-05-18T21:51:00.433+0800 I COMMAND [conn44] command dmspace.DeviceInfo command: insert { inser...tadata: { acquireCount: { w: 16 } }, oplog: { acquireCount: { w: 16 } } } protocol:op_command 252ms
按操作类型过滤
# mlogfilter mongo.log --operation update
2018-05-18T21:56:25.114+0800 I WRITE [conn156] update dmspace.PolicyTask query: { _id: "###" } pla...Count: { w: 2 } }, Metadata: { acquireCount: { w: 1 } }, oplog: { acquireCount: { w: 1 } } } 2630ms
2018-05-18T21:56:25.114+0800 I WRITE [conn92] update nsspace.TimerTask query: { _id: "###" } planS...Count: { w: 2 } }, Metadata: { acquireCount: { w: 1 } }, oplog: { acquireCount: { w: 1 } } } 1264ms
2018-05-18T21:56:25.125+0800 I WRITE [conn43] update dmspace.TaskHistory query: { _id: "###" } pla...Count: { w: 2 } }, Metadata: { acquireCount: { w: 1 } }, oplog: { acquireCount: { w: 1 } } } 2643ms
2018-05-18T21:56:30.027+0800 I WRITE [conn532] update dmspace.TaskHistory query: { _id: "###" } pl...eCount: { w: 2 } }, Metadata: { acquireCount: { w: 1 } }, oplog: { acquireCount: { w: 1 } } } 868ms
2018-05-18T21:56:32.115+0800 I WRITE [conn517] update dmspace.TaskHistory query: { _id: "###" } pl...eCount: { w: 2 } }, Metadata: { acquireCount: { w: 1 } }, oplog: { acquireCount: { w: 1 } } } 497ms
链接:https://www.starcto .com/mongodb/295.html

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门