背景
使用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.B
beego框架POST请求参数长度限制解析

在使用beego框架构建的HTTP服务中,遇到一个接口接收logstash日志数据的问题,发现当日志数据量较大时,beego默认POST参数长度限制为64MB。超过此限制,RequestBody无法获取完整数据,且无错误提示,导致处理失败。问题源于beego框架的源码设定,可参考相关GitHub议题进行解决。
最低0.47元/天 解锁文章
799

被折叠的 条评论
为什么被折叠?



