原文中文,约2500字,阅读约需6分钟。
📝
内容提要
在logstash中,tcp和udp接入的日志无法发送到pulsar,经过抓包和检查发现服务端未消费日志,导致日志在队列中阻塞。最终确认是pulsar的bug,更新pulsar-client版本后问题解决。
🔎
延伸解读
问题根源分析
在使用logstash与pulsar集成时,tcp和udp接入的日志出现阻塞,主要是由于pulsar的bug导致的。通过抓包和查看系统状态,可以确认数据包正常进入,但服务端未能消费,造成日志堆积。了解这一点有助于快速定位问题,避免不必要的排查工作。
解决方案与经验总结
更新pulsar-client版本是解决日志阻塞问题的有效方法。此案例强调了及时更新组件版本的重要性,尤其是在发现已知bug时。此外,利用工具分析系统状态和日志信息,可以更高效地找到问题根源,提升故障排查的效率。
注意事项
在使用pulsar时,开启压缩功能可能会引发内存限制相关的bug,特别是在内存设置较低的情况下。用户在配置时应谨慎选择内存参数,并定期关注官方文档和更新,以避免类似问题的发生。
❓
Q&A
为什么logstash无法将日志发送到pulsar?
因为服务端未消费日志,导致日志在队列中阻塞。
如何确认logstash中的日志接入问题?
通过抓包检查数据包是否正常进入容器,并使用netstat查看tcp和udp缓存队列。
pulsar的bug是什么导致了日志阻塞?
在开启压缩时,pulsar-client的内存限制过小会触发该bug,导致阻塞。
如何解决logstash与pulsar之间的日志阻塞问题?
通过更新pulsar-client版本解决了阻塞问题。
如何复现pulsar的阻塞问题?
修改pulsar-client的memory_limit参数并开启压缩,可以稳定快速复现该问题。
在排查日志阻塞时,如何查看logstash的管道信息?
可以通过curl命令获取logstash对应管道的信息,查看input和output的日志数量。
🏷️