goreplay 默认对于minio s3 的支持不是很好,所以修改了关于s3 的部分代码,可以方便的集成minio
需要修改的代码
注意pro 特性也是需要修改的
- s3_reader.go
修改的不好,实际应该走环境变量
func awsConfig() *aws.Config {
region := os.Getenv("AWS_DEFAULT_REGION")
if region == "" {
region = os.Getenv("AWS_REGION")
if region == "" {
region = "us-east-1"
}
}
config := &aws.Config{Region: aws.String(region)}
if endpoint := os.Getenv("AWS_ENDPOINT_URL"); endpoint != "" {
config.Endpoint = aws.String(endpoint)
log.Println("Custom endpoint:", endpoint)
}
log.Println("Connecting to S3. Region: " + region)
config.CredentialsChainVerboseErrors = aws.Bool(true)
// 使用url 模式,同时禁用ssl
+ config.S3ForcePathStyle = aws.Bool(true)
+ config.DisableSSL = aws.Bool(true)
if os.Getenv("AWS_DEBUG") != "" {
config.LogLevel = aws.LogLevel(aws.LogDebugWithHTTPBody)
}
return config
}
- pro.go
var PRO = true
试用
- docker-compose 文件
version: "3"
services:
minio:
image: minio/minio
command: server /data
volumes:
- "./data:/data"
ports:
- "9000:9000"
environment:
- "MINIO_DOMAIN=minios3.com"
- "MINIO_REGION_NAME=demo"
- "MINIO_ACCESS_KEY=minio"
- "MINIO_SECRET_KEY=minio123"
pg:
image: postgres:9.6.11
environment:
- "POSTGRES_PASSWORD=dalong"
ports:
- "5432:5432"
- 启动
docker-compose up -d
- 添加bucket
登录 http://localhost:9000 添加logs bucket - 环境变量配置
export AWS_ACCESS_KEY_ID=minio
export AWS_REGION=demo
export AWS_BUCKET=demo
export AWS_SECRET_ACCESS_KEY=minio123
export AWS_ENDPOINT_URL=http://minios3.com:9000
export AWS_DEBUG=true
- 运行命令
gor --input-raw :5432 --input-raw-protocol binary --output-file=requests.gor --output-file s3://logs/%Y-%m-%d.gz
- 效果
说明
以上只是一个简单的修改,为了测试s3 的特性,还可以使用s3 的回放功能,当然支持的协议有限,但是对于web的请求,我们基于s3 还是一个很不错的选择的
参考资料
https://github.com/buger/goreplay/wiki/%5BPRO%5D-Replaying-Binary-protocols