背景
使用beego做的一个http服务一个接口,接收logstash推送过来的日志数据,对日志进行报警和统计处理,一直稳定运行。但是最近开始该服务的日志显示经常收到logstash推送日志的请求,但是处理的日志数量为0条并且处理时间明显比正常的请求时间长(正常30ms以内,异常请求都是500ms以上)。正常情况下logstash会打包推送日志,也就是说根据需要推送的日志量不同一个http请求中包含1-1000条不等的日志。所以上面的情况就很不正常。
由下面这个连接(https://github.com/astaxie/beego/issues/2739)中提问的启发仔细看了一下相关源码
// router.go 709行
if r.Method != http.MethodGet && r.Method != http.MethodHead {
if BConfig.CopyRequestBody && !context.Input.IsUpload() {
context.Input.CopyBody(BConfig.MaxMemory)
}
context.Input.ParseFormOrMulitForm(BConfig.MaxMemory)
}
// input.go 353行
// CopyBody returns the raw request body data as bytes.
func (input *BeegoInput) CopyBody(MaxMemory int64) []byte {
if input.Context.Request.Body == nil {
return []byte{
}
}
var requestbody []byte
safe := &io.LimitedReader{
R: input.Context.Request.