更新文档

This commit is contained in:
hebo 2019-12-27 18:45:01 +08:00
parent 467b0681c6
commit 7771eacde8
2 changed files with 18 additions and 17 deletions

View File

@ -3,14 +3,14 @@
> Sniffer TCP package, parsed with mysql protocol, optional you can just print on screen or send query info to Kafka.
> 抓取tcp包解析出mysql语句将查询信息打印在屏幕上或者发送到Kafka
### Architecture
### 1. Architecture
架构设计:
本项目采用模块化设计主要分为四大模块TCP抓包模块协议解析模块输出模块心跳模块
![架构设计图](https://github.com/zr-hebo/sniffer-agent/blob/master/images/arch.png)
### Parse Protocol
### 2. Parse Protocol
sniffer-agent采用模块化结构支持用户添加自己的解析模块只要实现了统一的接口即可
- [x] MySQL
@ -19,22 +19,18 @@ sniffer-agent采用模块化结构支持用户添加自己的解析模块
- [ ] Mongodb
- [ ] GRPC
目前输出的内容都是解析结果组成的json。
MySQL协议的解析结果示例如下
```
{"cip":"192.168.XXX.XXX","cport":63888,"sip":"192.168.XX.XX","sport":3306,"user":"root","db":"sniffer","sql":"show tables","cpr":1.0,"bt":1566545734147,"cms":15}
```
其中cip代表客户端ipcport代表客户端port(客户端ipport组成session标识)sip代表server ipsport代表server portuser代表查询用户db代表当前连接的库名sql代表查询语句cpr代表抓包率bt代表查询开始时间戳cms代表查询消耗的时间单位是毫秒
## [CapturePacketRate](https://github.com/zr-hebo/sniffer-agent/blob/master/docs/capture_rate.md)
##### 详细输出格式[查看](https://github.com/zr-hebo/sniffer-agent/blob/master/docs/output.md)
### 3. [CapturePacketRate](https://github.com/zr-hebo/sniffer-agent/blob/master/docs/capture_rate.md)
sniffer-agent可以动态设置抓包率详情[查看文档](https://github.com/zr-hebo/sniffer-agent/blob/master/docs/capture_rate.md)
### Exporter
### 4. Exporter
输出模块主要负责将解析的结果对外输出。默认情况下输出到命令行可以通过指定export_type参数选择kafka这时候会直接将解析结果发送到kafka。
同样只要实现了export接口用户可以自定义自己的输出方式。
### Install:
### 5. Install:
环境:
@ -58,7 +54,7 @@ apt-get install libpcap-dev
```
2.执行编译命令 go build
### Demo
### 6. Demo
目前只支持MySQL协议的抓取需要将编译后的二进制文件上传到MySQL服务器上
@ -84,20 +80,19 @@ apt-get install libpcap-dev
`./sniffer-agent --strict_mode=true --admin_user=root --admin_passwd=123456`
#### 题外话
#### 7. 题外话
在做这个功能之前,项目组调研过类似功能的产品,最有名的是 [mysql-sniffer](https://github.com/Qihoo360/mysql-sniffer) 和 [go-sniffer](https://github.com/40t/go-sniffer),这两个产品都很优秀,不过我们的业务场景要求更多。
我们需要将提取的SQL信息发送到kafka进行处理之前的两个产品输出的结果需要进行一些处理然后自己发送在QPS比较高的情况下这些处理会消耗较多的CPU
另外mysql-sniffer使用c++开发,平台的适用性较差,后期扩展较难。
开发的过程中也借鉴了这些产品的思想另外在MySQL包解析的时候参考了一些 [Vitess](https://github.com/vitessio/vitess) 和 [TiDB](https://github.com/pingcap/tidb) 的内容,部分私有变量和函数直接复制使用,这里向这些优秀的产品致敬,如有侵权请随时联系。
#### 结果分析
#### 8. 结果分析
在压测的过程中和mysql-sniffer进行了结果对比压测执行28万条语句mysql-sniffer抓取了8千条sniffer-agent抓取了30万条语句其中包含client自动生成的语句
#### 风险提示
#### 9. 风险提示
1.sniffer-agent使用了pacp抓包根据pacp抓包原理在IO较高的时候有一定的概率丢包
2.sniffer-agent提供了Prepare语句的支持但是如果sniffer-agent在prepare语句初始化之后启动就无法抓取prepare语句
### License
[MIT](https://opensource.org/licenses/MIT)
##### License [MIT](https://opensource.org/licenses/MIT)

6
docs/output.md Normal file
View File

@ -0,0 +1,6 @@
目前输出内容使用json格式。
#### MySQL协议的解析结果示例如下
```
{"cip":"192.XX.XX.1","cport":63888,"sip":"192.XX.XX.2","sport":3306,"user":"root","db":"sniffer","sql":"show tables","cpr":1.0,"bt":1566545734147,"cms":15}
```
其中cip代表客户端ipcport代表客户端port(客户端ipport组成session标识)sip代表server ipsport代表server portuser代表查询用户db代表当前连接的库名sql代表查询语句cpr代表抓包率bt代表查询开始时间戳cms代表查询消耗的时间单位是毫秒