Skip to content

Commit

Permalink
add go mod shell & update md
Browse files Browse the repository at this point in the history
  • Loading branch information
yangjing committed Apr 17, 2020
1 parent 811fd21 commit 8cfdf8b
Show file tree
Hide file tree
Showing 20 changed files with 1,502 additions and 164 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ example/replayer/example.test
example/replayer/example
example/replayer/sut.pid
example/replayer/sut.log
example/replayer/gocov
example/replayer/gocov*
example/replayer/gocov-html
example/replayer/nohup.out

Expand Down
43 changes: 22 additions & 21 deletions doc/replayer/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@
* **Inbound**: 指SUT对外提供的HTTP接口的请求和响应,即Inbound Request/Response。
* **Outbound**: 指SUT提供的http接口内调用的下游请求和响应,即Outboud Request/Response。目前支持的Outbound协议有 MYSQL、REDIS、HTTP、Binary Thrift、Compact Thrift。
* **流量**: 指在TCP层对SUT录制的Inbound请求/响应 和 对应的Outbound请求/响应。
* **回放**: 基于录制的一条流量,Agent根据Inbound Request构造HTTP Request并对SUT发起请求;其中SUT的Outbound请求会发送到Mock Server进行流量匹配并返回Outbound响应;最后,Agent将收到的SUT HTTP Response与Inbound Response做对比,给出回放结果。
* **Agent**: 包括回放过程的Web Server和Mock Server。其中Web Server默认监听8998端口,主要负责流量搜索,回放请求的构造和发起,以及回放结果的对比和展示。
* **回放**: 基于录制的一条流量,Replayer-Agent根据Inbound Request构造HTTP Request并对SUT发起请求;其中SUT的Outbound请求会发送到Mock Server进行流量匹配并返回Outbound响应;最后,Replayer-Agent将收到的SUT HTTP Response与Inbound Response做对比,给出回放结果。
* **Replayer-Agent**: 包括回放过程的Web Server和Mock Server。其中Web Server默认监听8998端口,主要负责流量搜索,回放请求的构造和发起,以及回放结果的对比和展示。
* **Mock Server**: 默认监听**3515**端口,主要负责接收SUT的下游请求,然后与回放流量的Outbound请求匹配,将最匹配的Outbound响应返回SUT。
* **噪音**: 即在Inbound Response对比和Outbound Request匹配过程里,出现的不影响回放结果和匹配度的diff字段,如时间戳。Agent回放结果页支持上报噪音,方便再次回放时精确回放结果。
* **DSL**: 特指ElasticSearch的查询DSL。Agent首页支持上报流量查询DSL,方便后面直接复用。
* **噪音**: 即在Inbound Response对比和Outbound Request匹配过程里,出现的不影响回放结果和匹配度的diff字段,如时间戳。Replayer-Agent回放结果页支持上报噪音,方便再次回放时精确回放结果。
* **DSL**: 特指ElasticSearch的查询DSL。Replayer-Agent首页支持上报流量查询DSL,方便后面直接复用。

<br>

Expand All @@ -24,36 +24,37 @@
回放前提:已经完成流量录制。[录制接入文档](../recorder/README.md)

对于服务启动阶段有TCP请求的SUT,如初始化连接池等,推荐 服务启动顺序:
* 先启动Agent
* 先启动Replayer-Agent
* 再启动SUT

#### 1. 配置并启动Agent
#### 1. 配置并启动Replayer-Agent

> 温馨提示:Agent默认配置的是 **[本地回放](#4本地回放)**,即 仅依赖本地配置文件的回放。
* 如需 读取录制的线上流量,只需根据[回放Agent配置](./replayer-conf.md#5-es_url)修改es_url字段即可;
* 如需 读取上报到自有服务的噪音或DSL,只需根据[回放Agent配置](./replayer-conf.md#4-http_api)修改http_api字段即可;
> 温馨提示:Replayer-Agent默认配置的是 **[本地回放](#4本地回放)**,即 仅依赖本地配置文件的回放。
* 如需 读取录制的线上流量,只需根据[Replayer-Agent配置](./replayer-conf.md#5-es_url)修改es_url字段即可;
* 如需 读取上报到自有服务的噪音或DSL,只需根据[Replayer-Agent配置](./replayer-conf.md#4-http_api)修改http_api字段即可;
* 如需 新增本地回放模块,请参考[本地回放接入](./replayer-local.md)

首先,确保本地存在go环境(官方或定制版均可,且版本无要求), 并根据本地go版本选择go mod或glide来安装sharingan的依赖。
```shell script
glide install || go mod download
git clone https://github.com/didichuxing/sharingan.git
&& cd sharingan && go mod download // 低版本go执行 glide install
```
然后编译并启动Agent
然后编译并启动Replayer-Agent
```shell script
cd ./replayer-agent && go build && nohup ./replayer-agent >> run.log 2>&1 &
```
> Agent一键安装和启动 [脚本](../../replayer-agent/control.sh) 及其 [使用方法](./replayer-agent.md)
> Replayer-Agent一键安装和启动 [脚本](../../replayer-agent/control.sh) 及其 [使用方法](./replayer-agent.md)
<br>

#### 2. 配置并启动SUT

> 需要使用定制的golang,并通过指定tag来编译 引入回放包的SUT代码。
首先,配置定制版golang环境,目前支持go1.10、go1.11、go1.12、go1.13。亦可参考:[golang安装](https://github.com/didichuxing/sharingan-go)
首先,配置定制版golang环境,目前支持go1.10、go1.11、go1.12、go1.13。亦可参考:[golang安装](https://github.com/didichuxing/sharingan-go/tree/recorder)
```shell script
curl https://github.com/didichuxing/sharingan-go/raw/recorder/install/go1.10 | sh
&& export GOROOT=/tmp/recorder-go1.10
curl https://github.com/didichuxing/sharingan-go/raw/recorder/install/go1.13 | sh
&& export GOROOT=/tmp/recorder-go1.13
&& export PATH=$GOROOT/bin:$PATH
```

Expand All @@ -75,7 +76,7 @@ go build -tags="replayer" -gcflags="all=-N -l"

## 三、使用手册

按照上面的接入流程逐步操作 并 成功启动SUT和Agent后,即可开始回放之旅~
按照上面的接入流程逐步操作 并 成功启动SUT和Replayer-Agent后,即可开始回放之旅~

首页点击"流量查询"搜索流量后,即可点击"运行"开始回放。
![web_index](../images/web_index.png)
Expand Down Expand Up @@ -108,14 +109,14 @@ go build -tags="replayer" -gcflags="all=-N -l"

[本地回放接入](./replayer-local.md)

Agent默认配置的本地回放,如需修改,请参考:[回放Agent配置](./replayer-conf.md#4-http_api)
Replayer-Agent默认配置的本地回放,如需修改,请参考:[Replayer-Agent配置](./replayer-conf.md#4-http_api)

#### 5.Agent和SUT分开部署
#### 5.Replayer-Agent和SUT分开部署

如上 二-回放接入,默认将Agent和SUT部署在一台机器,其实,Agent和SUT是可以分开部署的。
如上 二-回放接入,默认将Replayer-Agent和SUT部署在一台机器,其实,Replayer-Agent和SUT是可以分开部署的。

* Agent的启动如上所示,无需改动
* 启动SUT时,需设置环境变量 REPLAYER_MOCK_IP 为Agent的ip地址即可。详见: [SUT启动脚本-3. 与Agent分开部署](./replayer-sut.md#3-与agent分开部署)
* Replayer-Agent的启动如上所示,无需改动
* 启动SUT时,需设置环境变量 REPLAYER_MOCK_IP 为Replayer-Agent的ip地址即可。详见: [SUT启动脚本-3. 与Replayer-Agent分开部署](./replayer-sut.md#3-与replayer-agent分开部署)

<br>

Expand Down
8 changes: 4 additions & 4 deletions doc/replayer/conf/http_api.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

<br>

回放Agent默认配置的是本地回放;对于想将 噪音、DSL、模块信息存入数据库的同学,请仔细阅读下面接口说明。
Replayer-Agent默认配置的是本地回放;对于想将 噪音、DSL、模块信息存入数据库的同学,请仔细阅读下面接口说明。
> 温馨提示:
>
> 接口实现 只要字段名和字段类型符合接口说明即可,**至于字段的具体值无需担心,因为所有的值都会通过前端js处理后传给后端,比如dsl字段、noise字段等**
Expand Down Expand Up @@ -72,7 +72,7 @@

接口: http://{{your_domain}}/noise

定义 噪音上报接口。在回放结果页,可以上报回放结果里的diff噪音。对于上报过的噪音,回放Agent会在对比回放结果时过滤对应噪音字段,提升回放成功率。若noise_push为空,则 存入本地 [conf/noise](../../../replayer-agent/conf/noise) 下的配置文件。
定义 噪音上报接口。在回放结果页,可以上报回放结果里的diff噪音。对于上报过的噪音,Replayer-Agent会在对比回放结果时过滤对应噪音字段,提升回放成功率。若noise_push为空,则 存入本地 [conf/noise](../../../replayer-agent/conf/noise) 下的配置文件。

![push_noise](../../images/push_noise.png)

Expand Down Expand Up @@ -189,6 +189,6 @@

* listen-addr:必选,SUT的监听地址,一般为127.0.0.1:xxxx

* department:可选,模块所属部门,默认空(则为default部门)。非空时,同时流量配置的读取自ES,则 会按部门字段读取es_url地址。es_url配置可详见:[回放Agent配置](../replayer-conf.md#5-es_url)
* department:可选,模块所属部门,默认空(则为default部门)。非空时,同时流量配置的读取自ES,则 会按部门字段读取es_url地址。es_url配置可详见:[Replayer-Agent配置](../replayer-conf.md#5-es_url)

非本地回放时,Agent只用到上面三个key值,如果业务方想在该接口顺便存储模块其他信息,只需扩充[]KV即可。
非本地回放时,Replayer-Agent只用到上面三个key值,如果业务方想在该接口顺便存储模块其他信息,只需扩充[]KV即可。
10 changes: 9 additions & 1 deletion doc/replayer/conf/moduleinfo.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@
{
"name":"example",
"data":"[{\"key\":\"listen-addr\",\"value\":\"127.0.0.1:9999\"}]"
},
{
"name": "example2",
"data": "[{\"key\":\"listen-addr\",\"value\":\"10.179.84.1:8888\"},{\"key\":\"department\",\"value\":\"Biz\"}]"
}
]
}
Expand All @@ -35,12 +39,16 @@
| name | string | 模块名 |
| data | string | []KV类型的json串,存储模块详细信息 |

<br>

> 温馨提示:
>
> name尽量与编译后的$binName保持一致。如果存在冲突,可以增加前缀'\*-',即\*-$binName。
>
> 如果name形如'\*a-b-c',则尽量保证c具有可识别性,因为,[覆盖率统计回放](../replayer-codecov.md#1-覆盖率报告)会通过 *c* 来获取SUT进程信息并重启SUT。
<br>

| KV类型说明 | 类型 | 说明 |
| :-----| :----- | :----- |
| key | string | 与模块相关的一些信息,如监听地址listen-addr等 |
Expand All @@ -49,4 +57,4 @@
本地回放时,KV类型中key只需支持一个"listen-addr"即可:
* listen-addr:必选,SUT的监听地址,一般为127.0.0.1:xxxx

* department:可选,模块所属部门,默认空(则为default部门)。非空时,同时流量配置的读取自ES,则 会按部门字段读取es_url地址。es_url配置可详见:[回放Agent配置](../replayer-conf.md#5-es_url)
* department:可选,模块所属部门,默认空(则为default部门)。非空时,同时流量配置的读取自ES,则 会按部门字段读取es_url地址。es_url配置可详见:[Replayer-Agent配置](../replayer-conf.md#5-es_url)
2 changes: 1 addition & 1 deletion doc/replayer/guide/replay.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@

##### 2. 定位失败原因

回放Agent采用了非常严格的测试标准,只要有任何diff或者异常都会显示回放失败,目的是为了让大家能够发现隐藏问题
Replayer-Agent采用了非常严格的测试标准,只要有任何diff或者异常都会显示回放失败,目的是为了让大家能够发现隐藏问题

对于回放失败的结果,还可以细分如下:

Expand Down
12 changes: 6 additions & 6 deletions doc/replayer/guide/report.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@

<br>

回放过程中,为了提升回放体验、回放效率及回放成功率,回放Agent特意提供了噪音/DSL上报功能。
回放过程中,为了提升回放体验、回放效率及回放成功率,Replayer-Agent特意提供了噪音/DSL上报功能。

<br>
下面详细介绍 DSL和噪音 上报的方法及注意事项:

##### 1. DSL上报

根据 [流量搜索指南-1. 搜索界面介绍](./search.md#1-搜索界面介绍) 可知,Agent提供的流量搜索条件分的很细。为了节省流量搜索时间,Agent提供了DSL上报功能。
根据 [流量搜索指南-1. 搜索界面介绍](./search.md#1-搜索界面介绍) 可知,Replayer-Agent提供的流量搜索条件分的很细。为了节省流量搜索时间,Replayer-Agent提供了DSL上报功能。

![save_dsl](../../images/save_dsl.png)

Expand All @@ -23,8 +23,8 @@

> 使用上报DSL:
1. 点击"快速查询",Agent会列出所有上报的tag。
2. 选中一个合适的tag名,Agent会自动填充红框字段,然后直接点击"流量查询",即可查询流量。
1. 点击"快速查询",Replayer-Agent会列出所有上报的tag。
2. 选中一个合适的tag名,Replayer-Agent会自动填充红框字段,然后直接点击"流量查询",即可查询流量。

> tag命名规则
Expand All @@ -34,9 +34,9 @@ tag命名尽量具有可读性,且具有实际意义。比如按 '接口名_

##### 2. 噪音上报

流量回放结果里,部分失败的case是由噪音导致。为了解决这个问题,Agent提供了噪音上报功能。
流量回放结果里,部分失败的case是由噪音导致。为了解决这个问题,Replayer-Agent提供了噪音上报功能。

对于上报的噪音字段,下次回放时,Agent会过滤由噪音字段导致的diff,给出流量回放成功结果。
对于上报的噪音字段,下次回放时,Replayer-Agent会过滤由噪音字段导致的diff,给出流量回放成功结果。

![push_noise](../../images/push_noise.png)
> 上报噪音:
Expand Down
6 changes: 3 additions & 3 deletions doc/replayer/guide/troubleshoot.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ sharingan已经在滴滴内部服务了一批go业务模块,现将各业务模
##### 2. SUT启动失败
* **现象1**:SUT启动时,提示TCP连接:3515拒绝

* **原因**回放Agent服务未启动
* **原因**Replayer-Agent服务未启动

* **解决**请先启动回放Agent,再启动SUT服务
* **解决**请先启动Replayer-Agent,再启动SUT服务

***

Expand Down Expand Up @@ -114,7 +114,7 @@ sharingan已经在滴滴内部服务了一批go业务模块,现将各业务模

<br>

* **可能原因2**:连续点击"覆盖率报告"链接。每次点击"覆盖率报告"链接,Agent会自动重启SUT服务,重新统计覆盖率。
* **可能原因2**:连续点击"覆盖率报告"链接。每次点击"覆盖率报告"链接,Replayer-Agent会自动重启SUT服务,重新统计覆盖率。

* **解决**:请在两次点击"覆盖率报告"链接之间,回放一个或多个流量。[覆盖率统计回放-1. 覆盖率报告](../replayer-codecov.md#1-覆盖率报告)

Expand Down
38 changes: 26 additions & 12 deletions doc/replayer/replayer-agent.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
### Agent一键安装和启动脚本
### Replayer-Agent一键安装和启动脚本

<br>

[./replayer-agent/control.sh](../../replayer-agent/control.sh) 脚本是 [流量回放-1. 配置并启动Agent](./README.md#1-配置并启动agent) 的一键安装和启动脚本。
[./replayer-agent/control.sh](../../replayer-agent/control.sh) 脚本是 [流量回放-1. 配置并启动Replayer-Agent](./README.md#1-配置并启动replayer-agent) 的一键安装和启动脚本。

* go mod方式脚本:[./replayer-agent/control_gomod.sh](../../replayer-agent/control_gomod.sh) 。对于没有GO环境的机器,会自动安装golang1.13,并设置GOROOT、GOPATH。
* glide方式脚本:[./replayer-agent/control_glide.sh](../../replayer-agent/control_glide.sh) 。对于没有GO环境的机器,会自动安装golang1.10、glide,并设置GOROOT、GOPATH。

control.sh 默认使用 go mod方式,即control_gomod.sh 脚本。

<br>

Expand All @@ -12,43 +17,52 @@

* GO 「任意版本官方golang,或者定制版本golang都可以」
* Glide 「低版本GO包管理工具」
* Go mod 「高版本GO包管理工具,GO>=1.13原生自带」
* Go mod 「高版本GO包管理工具,go原生自带」

GO>=1.13推荐go mod, 低版本推荐glide

<br>

##### 2. 使用

下面的命令都是基于 **sharingan/replayer-agent** 操作的
下面的命令都是基于 **sharingan/replayer-agent** 目录操作的

> 构建(build)
检测GO环境并编译Agent服务。

此脚本默认使用glide包管理工具,对于没有GO环境的机器,会自动安装golang1.10、glide,并设置GOROOT、GOPATH。 [golang安装](https://github.com/didichuxing/sharingan-go)

使用gomod包管理的脚本即将提供~
检测GO环境并编译Replayer-Agent服务。

```shell
sh control.sh build
```
如果提示如下错误:
```text
curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused
```
可能是raw.githubusercontent.com域名不通,建议配置个代理;或者 配置hosts (151.101.108.133 raw.githubusercontent.com);再或者 自己安装go后,重新执行脚本构建。可参考: [go安装](https://github.com/golang/go#download-and-install)

<br>

> 启动(start)
启动Agent服务
启动Replayer-Agent服务
```shell
sh control.sh start
```

<br>

> 停止(stop)
停止Agent服务
停止Replayer-Agent服务
```shell
sh control.sh stop
```

<br>

> 重启(reload)
重启Agent服务
重启Replayer-Agent服务
```shell
sh control.sh reload
```
10 changes: 5 additions & 5 deletions doc/replayer/replayer-codecov.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@
回放前提:已经完成流量录制。[录制接入文档](../recorder/README.md)

对于服务启动阶段有TCP请求的SUT,如初始化连接池等,推荐 服务启动顺序:
* 先启动Agent
* 先启动Replayer-Agent
* 再启动SUT

##### 1. 配置并启动Agent
##### 1. 配置并启动Replayer-Agent

[回放接入-1. 配置并启动Agent](./README.md#1-配置并启动agent)
[回放接入-1. 配置并启动Replayer-Agent](./README.md#1-配置并启动replayer-agent)

##### 2. 配置并启动SUT

Expand Down Expand Up @@ -67,7 +67,7 @@ B. [批量回放](./replayer-parallel.md)结果页

> 注意:
>
> a.点击 "覆盖率报告" 链接后,Agent会 **自动重启SUT服务**。所以,覆盖率数据会重新统计!!!
> a.点击 "覆盖率报告" 链接后,Replayer-Agent会 **自动重启SUT服务**。所以,覆盖率数据会重新统计!!!
>
> b.上面两处 "覆盖率报告" 链接 点击效果一样。覆盖率统计不区分单流量回放和批量回放,会一起统计。
Expand Down Expand Up @@ -99,7 +99,7 @@ b. 按 [main_flag.go](../../replayer-agent/install/codeCov/main_with_flag/main_f
历史覆盖率报告存放在本机 /tmp/ShaRinGan/ 目录下。

a. 覆盖率原始报告, 命名格式 coverage.$binName.$timestamp
> $timestamp 一般包括起始和终止两个时间戳。对于初始手动启动SUT的情况,只有终止时间戳。对于Agent自动启动SUT的情况,都有起始和终止两个时间戳。
> $timestamp 一般包括起始和终止两个时间戳。对于初始手动启动SUT的情况,只有终止时间戳。对于Replayer-Agent自动启动SUT的情况,都有起始和终止两个时间戳。
b. 格式化后的 *.html 报告,命名格式 coverage.$binName.$timestamp.html
> 意外惊喜:历史 *.html 报告,可通过接口 http://127.0.0.1:8998/coverage/report/coverage.$binName.$timestamp.html 查看。
Expand Down
Loading

0 comments on commit 8cfdf8b

Please sign in to comment.