mongoreplay 常用参数详解
应用场景:
作为程序员大家肯定都遇到过一种场景,现网上程序出现bug,大家登录到现网后,bug环境早已变化,想在现网上复现bug,但触发bug的环境很难出现,并且运维同事也不允许程序员在现网环境上。那么怎么复现bug环境呢?如果有一种工具能够把程序在现网上接收的所有网络包存储下来,然后在测试环境上将这个些存储的网络包进行重放,复现bug。
因为可以重放多次,并且是在测试环境上,那这种工具对程序员查找和定位bug将会相当方便。而mongodb就提供了这样的一种工具mongoreplay。
工具比较:
mongoreplay 在3.4版本才开始提供,比3.4早的版本是没有这样的工具的。更早的版本提供了一个可以存储mongodb收到的所有网络包的工具mongosniff,但mongosniff不能重放所有网络包,只是一个捕获工具。
mongoreplay 参数详解:
mongoreplay 有3个命令 record,play,monitor。record 记录捕获的网络包,play将record记录的网络包在目标机器上进行重放操作。
record 支持如下参数:
-f
<path>:
此参数组主是方便mongoreplay工具和其他网络抓包工具配合使用。利用主流的抓包工具(
TcpDump/WinDump, Wireshark/TShark, snort等)生成
pcap 格式的抓包文件,将其转换成mongoreplay对应的网络包格式。
-i
<interface>
:
mongoreplay
监听的网卡,此网卡上的任何网络包会被记录下来。-i参数和-f参数这两次参数是冲突的,只能使用其中的一个。
--expr
<filter expression>,
-e
<filter expression>
:
网络包过滤条件,只有符合对应条件的包才记录下来,常用的主要是
'port 27017'这个过滤条件,只记录端口27017上的网络包,我们只捕获mongodb端口上的包。
--playback-file
<path>,
-p
<path>:
存储捕获的网络包的文件。
--gzip
<boolean>
:
如果存储的网络包太大,可以使用这个参数将捕获的网络包文件进行压缩,减少文件的大小。
用例:
mongoreplay record -f traffic.pcap -p ~/recordings/playback
mongoreplay record -i eth0 -e "port 27017" -p ~/recordings/playback
play
支持如下参数:
--playback-file
<path>,
-p
<path>:
从这个文件里面读取记录的捕获的网络包,进行重放操作。
--host
<hostname><:port>,
-h
<hostname><:port>
:
指定目标机器,即在哪个机器上将捕获的网络包进行重放
--speed
number
:
重放的速率,默认值是1.0,即按照捕获的包的速率进行重放。可以调快或调慢重放的速率。
--repeat
number
:
重放的次数
--report
<path>
:
指定将重放过程中的执行报告保存的路径,如果没有这个参数,执行报告就输出在终端。
--collect
<json|format|none>
:
指定执行报告输出的格式,当参数值为format时,和—format参数配合使用。
--format:
和collect 配合使用,让用户自己对执行报告进行格式化,方便用户阅读。
用例:
mongoreplay play -p ~/recordings/playback --report ~/reports/replay_stats.json --host mongodb://192.168.0.4:27018
monitor
支持如下参数:
monitor 的参数和play基本上一样,只是没有—host
参数,它其实就相当于play的预演,由于没有连接目标机器,因此不会产生实际效果。
- 点赞
- 收藏
- 关注作者
评论(0)