Logstash和Flume

269 阅读3分钟

Logstash诞生于2009年8有2日,其作者是世界著名的虚拟主机托管商DreamHost的运维工程师乔丹 西塞(Jordan Sissel)。Logstash的开发很早,对比一下,Scribed诞生于2008年,Flume诞生于2010年,Graylog2诞生于2010年,Fluentd诞生于2011年。2013年,Logstash被ElasticSearch公司收购。这里顺便提一句,Logstash是乔丹的作品,所以带着独特的个人性格,这一点不像Facebook的Scribe,Apache的Flume开源基金项目。
你说的没错,以上都是废话。(手动滑稽→_→)

Logstash的设计非常规范,有三个组件,其分工如下:
1、Shipper 负责日志收集。职责是监控本地日志文件的变化,并输出到 Redis 缓存起来;

2、Broker 可以看作是日志集线器,可以连接多个 Shipper 和多个 Indexer;

3、Indexer 负责日志存储。在这个架构中会从 Redis 接收日志,写入到本地文件。

Logstash最值得一提的是,在Filter plugin部分具有比较完备的功能,比如grok,能通过正则解析和结构化任何文本,Grok 目前是Logstash最好的方式对非结构化日志数据解析成结构化和可查询化。此外,Logstash还可以重命名、删除、替换和修改事件字段,当然也包括完全丢弃事件,如debug事件。还有很多的复杂功能供程序员自己选择,你会发现这些功能Flume是绝对没有(以它的轻量级线程也是不可能做到的)。当然,在input和output两个插件部分也具有非常多类似的可选择性功能,程序员可以自由选择,这一点跟Flume是比较相似的。
大大的分割线,读者朋友们可以去上个厕所,然后再买一包瓜子了。
Logstash因为集成化设计,所以理解起来其实不难。

最早Flume是由Cloudrea开发的日志收集系统,初始的发行版本叫做Flume OG(就是original generation的意思),作为开源工具,一经公布,其实是很受关注的一套工具

其实从作者和历史背景来看,两者最初的设计目的就不太一样。Flume本身最初设计的目的是为了把数据传入HDFS中(并不是为了采集日志而设计,这和Logstash有根本的区别),所以理所应当侧重于数据的传输,程序员要非常清楚整个数据的路由,并且比Logstash还多了一个可靠性策略,上文中的channel就是用于持久化目的,数据除非确认传输到下一位置了,否则不会删除,这一步是通过事务来控制的,这样的设计使得可靠性非常好。相反,Logstash则明显侧重对数据的预处理,因为日志的字段需要大量的预处理,为解析做铺垫。

最后总结下来,我们可以这么理解他们的区别:Logstash就像是买来的台式机,主板、电源、硬盘,机箱(Logstash)把里面的东西全部装好了,你可以直接用,当然也可以自己组装修改;Flume就像提供给你一套完整的主板,电源、硬盘,Flume没有打包,只是像说明书一样指导你如何组装,才能运行的起来。
讲完,收工。
参考文献:
《Flume日志收集与Map Reduce模式》张龙 译
《ELK stack权威指南》 饶琛琳 编著