Brother MongoDB迁移指南:MD日志分析工具
先决条件
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前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。