专栏文章 GoReplay 的简单使用

simonpatrick · 2019年10月09日 · 最后由 rachellingzi 回复于 2021年02月22日 · 5422 次阅读

Gorelapy 简介

goreplay 是一款从生产环境 copy 流量到测试环境的工具,且不会影响生产环境的业务响应,又能很简单的达到复用 http 请求来做稳定性测试的目的。

GoReplay 工作方式:listener server 捕获流量,并将其发送至 replay server 或者保存至文件。replay server 会将流量转移至配置的地址
img

最简单的使用模式是:listener server 捕获流量,并将其发送至 kafka,然后解析 kafka 的消息并存入 mysql,处理起来还是比较方便的.

环境准备

  • 1、安装 kafka
    启动 zookeeper 和 kafka server,并创建一个 topic
    温馨提示:server.properties 中的 PLAINTEX 后面需要把 ip 加上,否则其他服务器上的消息接收不到

  • 2、安装 mysql
    创建 db 和表,用来保存请求数据

监听消息发送到 kafaka

  • 1、在目标服务器上安装 gorepay
    • a、源码:https://github.com/buger/goreplay
    • b、二进制包:百度或者找我要吧。如果你的服务器是 centos7 以上,可以直接解压使用。建议使用这种方式
  • 2、监听并往 kafka 发消息

  • 使用 HTTP 请求输出到 kafka - HTTP 原始信息

    sudo ./goreplay --input-raw :8179--output-kafka-host '10.8.1.43:9092' --output-kafka-topic 'test'
    
  • 使用 HTTP 请求输出到 kafka - JSON 格式

sudo ./goreplay --input-raw :8080 --input-raw-track-response --output-kafka-host '10.8.1.43:9092' --output-kafka-topic 'test' --output-kafka-json-format
  • 查看监听消息 在 kafka 所在的服务器上启一个 consumer,查看这个 topic 中的消息,可以看到监听端口的流量了 bin/kafka-console-consumer.sh --bootstrap-server 10.8.1.43:9092 --topic test

解析 kafka 的消息并保存到 mysql

  • 安装依赖库:confluent-kafka、records、PyMySQL sh pip install confluent-kafka pip install records pip install PyMySQL
  • Confluent-kafka 是一款高效、稳定的 kafka 的 python 客户端 https://github.com/confluentinc/confluent-kafka-python
  • records 一个非常简单但功能强大的库,用于对大多数关系数据库进行原始 SQL 查询
  • PyMySQL 是从 Python 连接到 MySQL 数据库服务器的接口
  • 编写解析 kafka 消息的 python 代码,进行解析并且保存落库

常用命令

基本命令:

  • 1、获取经过本地 8080 端口的请求流量,然后打印出来
sudo ./goreplay --input-raw :8080 --output-stdout
  • 2、获取经过本地 8080 端口的请求流量,然后保存在.gor 文件中

    sudo ./goreplay --input-raw :8080 --output-file=request.gor
    
  • 3、从保存下来的流量文件中提取流量并向某的地址的某个端口输出

sudo ./goreplay --input-file=request.gor --output-http="http://localhost:8000"
  • 4、转发

    sudo ./goreplay --input-raw :8080 --output-http="http://localhost:8000"
    
  • 5.请求过滤

例如只收集 /api 下的请求

./gor --input-raw :8080 --output-http staging.com --http-allow-url /api

例如只收集请求头中符合 api-version 为 1.0x 的请求

./gor --input-raw :8080 --output-http staging.com --http-allow-header api-version:^1\.0\d
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 2 条回复 时间 点赞

关于 response 的校验,楼主是通过匹配 mysql 里的记录进行校验的吗?楼主有试过直接把 response 导到 es 里面吗

使用 sudo ./goreplay --input-raw :8179--output-kafka-host '10.8.1.43:9092' --output-kafka-topic 'test'
这个命令监听 http 消息到 kafka 的时候收不到消息可能是什么原因呢?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册