我们知道,logstash的file input plugin可以读取nginx日志等日志类文件,而filebeat也可以进行相同的功能。那这两者有什么区别呢?在选型上应该怎么做呢?最佳实践是什么?
答案是:
当处理日志文件时,几乎总是需要使用Filebeat和Logstash的组合。为什么?
原因1:logstash提供了ETL中的强大的Transfer功能
原因2:支持多个日志记录管道,比如你采集的日志不仅仅来自于文件,还来自于kafka等多个消息源
但是logstash也有自己的问题,就是其是jruby编写的,是基于JVM的,所以比较重。如果部署多个logstash,使用file input plugin来采集多个端的file文件,并不合适
这个时候就需要filebeat了。
filebeat是golang语言编写的,比较轻量级,性能很好。但其不足的一点是并没有提供logstash那么强大的transfer功能,比如logstash的ruby filter plugin支持自定义的逻辑。
而将这两者配合使用,filebeat作为采集器,logstash执行transfer,优势互补
另外,针对使用logstash的两大原因,如果我们需要的transfer不复杂,也没有多个数据源的需求,使用filebeat提供了ingest pipeline,也可以进行transfer功能,那么可以直接使用filebeat直接到es的技术架构
参考: