💡
原文中文,约2700字,阅读约需7分钟。
📝
内容提要
Logstash从数据源拉取日志时,因TCP插件处理日志过大导致输出量减少和丢失。通过调整最大缓存和错误处理,成功解决了该问题。
🎯
关键要点
- Logstash通过TCP插件发送日志时,发现输出量减少和丢失。
- 问题排查从Logstash日志和管道状态入手,发现输入量大于输出量。
- 怀疑是发送方或接收方的问题,通过添加stdout插件确认output管道正常。
- 日志大小134k可能导致丢失,手动发送日志确认proxy未收到。
- Proxy服务使用bufio.NewScanner读取数据,maxTokenSize默认值为64k,导致大日志无法接收。
- Scan方法未处理超长日志错误,导致无法发现问题。
- 解决方法是将TCP最大缓存大小可配置,并在Scan发生错误时打印错误日志。
- 总结强调排查手段和组件参数理解的重要性,以减少BUG发生。
❓
延伸问答
TCP插件导致日志丢失的原因是什么?
日志大小超过TCP插件的最大缓存限制,导致日志无法接收和丢失。
如何确认Logstash的输出管道是否正常?
可以通过添加stdout插件来检查,比较in和out的数量是否相等。
解决TCP日志丢失问题的有效方法是什么?
将TCP的最大缓存大小设置为可配置,并在Scan发生错误时打印错误日志。
在排查日志丢失时,应该关注哪些方面?
应关注Logstash日志、管道状态、日志大小及TCP插件的配置。
为什么Logstash的输出量会减少?
因为输入量大于输出量,且可能由于日志大小超过TCP插件的处理能力。
bufio.NewScanner的maxTokenSize默认值是多少?
maxTokenSize的默认值为64k。
➡️