ELK系列~Fluentd对大日志的处理过程~16K

Fluentd是一个日志收集工具,有输入端和输出端的概念,前者主要是日志的来源,你能够走多种来源方式,http,forward,tcp均可以,后者输出端主要指把日志进行持久化的过程,你能够直接把它持久化到elasticsearch里,也能够直接在控制台输出,这看你如何配置了,更多基础配置能够看大叔这篇文章《ELK系列~对fluentd参数的理解》。html

Fluentd输入端的小知识git

今天写这篇文章主要是由于在实际工做中遇到的问题,咱们为了查询方便把日志定义成了json格式,当你的输入日志不是json时,这条日志将会被抛弃,这个功能点由fluentd的filter过滤器实现,它能够判断你的输入日志是否为json,即不是json会被抛弃!github

在项目中出现了大日志没法写入elasticsearch的问题

问题的出现json

通过屡次测试,发现大于16K的json日志,没法写入elastic,缘由通过分析得出结论:当fluentd输入端的日志大于16K时,会被拆封成小日志进行收集,这时被拆封的json就不是标准的了,因此在通过filter时,将会被抛弃!elasticsearch

Fluentd工做流程图tcp

 

Fluentd大日志分块收集工具

对于大于16K的日志来讲,Fluentd的输入端会分块收集,即大日志被拆封成多个小日志,这时咱们设想一下,若是你输入的是json,那被折断以后就必定不是标准的json了,这时,再走filter过滤器时,这条不是json的日志将被折断!测试

解决方法

目前这个问题在国外开发人员中也出现了,在github上也有人提这个issue,多是fluentd的bug,咱们将继续关注!spa

https://github.com/moby/moby/issues/34620日志

相关文章
相关标签/搜索