参考 > 参考 > MongoDB软件包组件 > mongoreplay
3.4版的新功能。
可用性
适用于Linux和macOS。
mongoreplay
是MongoDB的流量捕获和重播工具,可用于检查和记录发送到MongoDB实例的命令,然后在以后将这些命令重播到另一台主机上。
mongoreplay
可以帮助您预览MongoDB部署如何在不同环境下(例如,使用不同的存储引擎,在不同的硬件上或在不同的操作系统配置下)执行生产工作负载。
mongoreplay
还可以通过记录和重放触发问题的操作来帮助重现和调查问题。最后,mongoreplay
它是旧版mongosniff
工具的更灵活版本,可帮助您调查数据库活动。
运行mongoreplay
系统命令行,而不是mongo
外壳。
该mongoreplay
工具是MongoDB工具包的一部分。请查阅所用平台的
安装指南,以获取有关如何在MongoDB安装过程中安装工具包的说明。
该工具包也可以从
MongoDB下载中心获得,可以单独tools
下载,也可以包含在
TGZ
或ZIP
下载中,具体取决于平台。该mongoreplay
工具在Windows上不可用。
小费
如果从下载中心下载TGZ
或ZIP
文件,则可能需要更新PATH
环境变量以包括安装这些工具的目录。有关
更多信息,请参见所用平台的安装指南。
mongoreplay
需要访问record
或monitor
命令将监听的网络接口。您可能需要以mongoreplay
root权限运行才能访问网络设备。
mongoreplay
不适用于使用SSL连接的MongoDB实例。
警告
连接到可信源时仅使用root特权。
如果要play
用于连接到实施访问控制的MongoDB部署,则必须以具有所需特权的用户身份连接才能执行记录的操作。在--host
MongoDB连接字符串中包括用户的凭据
。
mongoreplay
¶--verbosity
,
-v
¶增加标准输出或日志文件中返回的内部报告的数量。-v
通过多次包含选项来增加详细程度(例如)-vvvvv
。
--debug
,
-d
¶增加有关mongoreplay操作和日志文件中记录的错误的详细信息。-d
通过多次包含该选项来增加调试细节,例如(-ddd
)。
--silent
,
-s
¶设置后,mongoreplay不会产生任何日志输出。
--help
¶返回有关mongoreplay的选项和用法的信息。
mongoreplay
包括以下命令,用于记录,回放和监视MongoDB网络流量。
mongoreplay record
¶record
根据网络流量生成播放文件。record
支持直接收集网络流量,或者可以接受pcap文件
来生成播放文件。回放文件包含mongod
在记录过程中发送到实例的所有请求
以及在记录过程中发送给客户端的所有响应的列表。回放文件还记录每个请求的元数据,例如连接标识符和时间戳。
以下原型用于mongoreplay
在回送网络接口上记录数据,并创建位于的播放文件~/recordings/playback
。
类似地,以下原型用于mongoreplay
从现有的pcap文件中产生一个回放文件:
record
支持以下选项:
mongoreplay record
¶record
¶-b
=<number>
¶用于将单独的流合并在一起的堆大小。
--expr
=<filter expression>
,
-e
=<filter expression>
¶Berkeley数据包筛选器(BPF)语法中的表达式,适用于要记录的传入流量。如果要使用从网络接口捕获流量,则为必需
-i
。
例如,要捕获来自端口27017上运行的MongoDB实例的流量,您可以指定。-e='port 27017'
-i
=<interface>
¶指定record
应侦听以捕获网络流量的网络接口。
与一起使用-e
。
使用-i
作为一种替代-f
,用于读取现有的PCAP文件。您必须指定任一
-f
或-i
。如果同时包含两个选项,则mongoreplay记录将
产生错误。
--playback-file
=<path>
,
-p
=<path>
¶指定写入播放文件的路径。
产生的播放文件是BSON文件。
看到
使用记录获取mongoreplay
与record
命令一起使用的示例
。
mongoreplay play
¶注意
从MongoDB 4.0开始,支持一个新的
环境变量,该变量指定MongoDB连接字符串。可以使用新的环境变量代替命令行选项。mongoreplay play
MONGOREPLAY_HOST
--host
例如,以下示例用于将文件重播
到在上运行的实例
:mongoreplay play
~/recordings/playback
mongod
192.168.0.4:27018
使用--host
选项:
使用MONGOREPLAY_HOST
环境变量(从MongoDB 4.0开始可用):
play
选项¶play
支持以下选项:
mongoreplay play
¶--collect
=<json|format|none>
¶默认值:格式
指定收集的统计信息的输出格式。
json
:将统计信息输出为jsonformat
:使用--format
选项中指定的格式来生成输出文件。none
:不提供任何输出--format
=<format>
¶默认值:%F{blue}%t%f %F{cyan}(Connection: %o:%i)%f %F{yellow}%l%f
%F{red}%T %c%f %F{white}%n%f
%F{green}%Q{Request:}%f%q%F{green}%R{Response:}%f%r)
指定终端输出的格式。您可以通过将其用大括号括起来,在格式“动词”之后立即指定参数%Q{<arg>}
。
如果指定--format
,还请指定format
作为--collect
选项的值
。
--format
支持以下动词:
%n
:名称空间%l
: 潜伏%t
: 时间。您可以选择使用Go编程语言的时间格式指定日期布局。Go将其用作参考时间。您必须使用参考时间指定时间格式。因此,如果要以格式打印日期,则可以指定。
有关更多信息,请参考Go 时间格式文档。Mon Jan 2 15:04:05 MST 2006
yyyy-mm-dd hh:mm
%t{2006-01-02 15:04}
%T
:上班时间%c
:命令%o
:连接数%i
:请求ID%q
:要求。您可以在JSON结构中最终指定一个以点分隔的字段,如中所示%q{command_args.documents}
。%r
:回应。您可以在JSON结构中最终指定一个以点分隔的字段,如中所示%q{command_args.documents}
。%Q{<arg>}
:<arg>
在存在请求数据时显示%R{<arg>}
:<arg>
在响应数据存在时显示另外,--format
支持以下开始/结束ANSI转义序列:
%B
/ %b
:粗体%U
/ %u
:下划线%S
/ %s
:出色%F
/ %f
:文本颜色(必填arg-单词或数字,8色)%K
/ %k
:背景色(必填arg-与%F /%f相同)--no-colors
¶设置后,从中删除颜色。default format
--speed
=<number>
¶默认值:1.0
指定一个乘数以调整播放速度。
实时处理回放文件;半速 以三倍的速度。--speed 1.0
--speed 0.5
--speed 3.0
指定速度是目标速度。如果mongoreplay播放遇到瓶颈,则播放速度可能会比指定的乘数慢。
--host
=<uri connection string>
¶默认值:mongodb:// localhost:27017
为MongoDB部署指定MongoDB 连接字符串,以将捕获的网络流量回放到该字符串。
默认情况下,play
尝试连接到mongod
端口号为localhost上运行的实例27017
。
注意
从MongoDB 4.0开始,支持一个新的
环境变量,该变量指定MongoDB部署的连接字符串。可以使用新的环境变量代替命令行选项。mongoreplay play
MONGOREPLAY_HOST
--host
--repeat
=<number>
¶默认值:1
指定播放播放文件的次数。
--queueTime
=<number>
¶默认值:15
指定在传输操作之前将操作排队的最长时间(以秒为单位)。
看到
使用play作为mongoreplay
与play
命令一起使用的示例
。
mongoreplay monitor
¶monitor
检查实时或预先记录的MongoDB网络流量。
以下原型用于mongoreplay
根据目录中的playback.bson
播放文件生成JSON报告~/recordings
:
monitor
支持以下选项:
mongoreplay monitor
¶monitor
¶--collect
=<json|format|none>
¶默认值:格式
指定收集的统计信息的输出格式。
json
:将统计信息输出为jsonformat
:使用--format
选项中指定的格式来生成输出文件。none
:不提供任何输出--format
=<format>
¶默认值:%F{blue}%t%f %F{cyan}(Connection: %o:%i)%f %F{yellow}%l%f
%F{red}%T %c%f %F{white}%n%f
%F{green}%Q{Request:}%f%q%F{green}%R{Response:}%f%r)
指定终端输出的格式。您可以通过将其用大括号括起来,在格式“动词”之后立即指定参数%Q{<arg>}
。
如果指定--format
,还请指定format
作为--collect
选项的值。
--format
支持以下动词:
%n
:名称空间%l
: 潜伏%t
: 时间。您可以选择使用Go编程语言的时间格式指定日期布局。Go将其用作参考时间。您必须使用参考时间指定时间格式。因此,如果要以格式打印日期,则可以指定。
有关更多信息,请参考Go 时间格式文档。Mon Jan 2 15:04:05 MST 2006
yyyy-mm-dd hh:mm
%t{2006-01-02 15:04}
%T
:上班时间%c
:命令%o
:连接数%i
:请求ID%q
:要求。您可以在JSON结构中最终指定一个以点分隔的字段,如中所示%q{command_args.documents}
。%r
:回应。您可以在JSON结构中最终指定一个以点分隔的字段,如中所示%q{command_args.documents}
。%Q{<arg>}
:<arg>
在存在请求数据时显示%R{<arg>}
:<arg>
在响应数据存在时显示另外,--format
支持以下开始/结束ANSI转义序列:
%B
/ %b
:粗体%U
/ %u
:下划线%S
/ %s
:出色%F
/ %f
:文本颜色(必填arg-单词或数字,8色)%K
/ %k
:背景色(必填arg-与%F /%f相同)--no-colors
¶设置后,从中删除颜色。default format
-f
=<path>
¶指定monitor
应读取以生成播放文件的pcap文件的路径。
-f
用作使用捕获网络流量的替代方法
-i
。您必须指定任一 -f
或-i
。如果同时包含两个选项,则mongoreplay监视器会产生错误。
-b
=<number>
¶用于将单独的流合并在一起的堆大小。
--expr
=<filter expression>
,
-e
=<filter expression>
¶Berkeley数据包筛选器(BPF)语法中的表达式,适用于要记录的传入流量。如果要使用从网络接口捕获流量,则为必需
-i
。
例如,要捕获来自端口27017上运行的MongoDB实例的流量,您可以指定。-e 'port 27017'
-i
=<interface>
¶指定monitor
应侦听以捕获网络流量的网络接口。
与一起使用-e
。
使用-i
作为一种替代-f
,用于读取现有的PCAP文件。您必须指定任一
-f
或-i
。如果同时包含两个选项,则mongoreplay监视器会产生错误。
--playback-file
=<path>
,
-p
=<path>
¶指定从中读取播放文件的路径。
看到
使用监视器以获取mongoreplay
与monitor
命令一起使用的示例
。
mongoreplay
报告格式¶monitor
并play
在使用该--report
选项运行时可以基于播放文件生成报告。
mongoreplay
报告可以包括以下字段:
order
单调递增的键,指示记录和播放操作的顺序。这可以用于重构在连接上执行的一系列操作的顺序,因为它们在报告文件中出现的顺序可能与播放顺序不匹配。
op
请求表示的操作类型:即“查询”,“插入”,“命令”,“ getmore”。
command
执行的数据库命令的名称,例如isMaster
或
getLastError
。对于非命令的操作(例如查询和插入),此字段保留为空白。
ns
执行请求的名称空间。
request_data
操作的有效负载。
request_data
包含发出的实际查询。request_data
包含要插入的文档。request_data
包含查询选择器和更新修饰符。reply_data
回复请求的有效负载。
nreturned
作为操作结果返回的文档数。
played_at
的时间在该play
命令执行的操作。
play_at
该play
命令应该执行该操作的时间。
playbacklag_us
played_at
和之间的时间差(以微秒为单位)play_at
。较高的值通常表示目标服务器无法跟上根据回放文件执行请求的速率。
connection_num
标识执行请求的连接的键。在同一连接上执行的所有请求/回复的值都相同connection_num
。
该connection_num
值与服务器端记录的连接ID 不匹配。
latency_us
客户端发送请求与接收到服务器响应之间的时间差(以微秒为单位)。
errors
列出从服务器返回的所有错误。
msg
列出从服务器返回的错误消息。
seen
最初捕获操作的时间。
request_id
MongoDB操作的ID。所述request_id
用于请求操作是一样的response_id
用于相应的答复。
--format