日志收集工具简单对比

Logstash

日志收集工具简单对比

文章插图
 
logstash基于JRuby实现,可以跨平台运行在JVM上
优点主要的优点就是它的灵活性,这还主要因为它有很多插件 。然后它清楚的文档已经直白的配置格式让它可以再多种场景下应用 。这样的良性循环让我们可以在网上找到很多资源,几乎可以处理任何问题 。
劣势Logstash 致命的问题是它的性能以及资源消耗(默认的堆大小是 1GB) 。尽管它的性能在近几年已经有很大提升,与它的替代者们相比还是要慢很多的 。因为logstash是jvm跑的,资源消耗比较大,所以后来作者又用golang写了一个功能较少但是资源消耗也小的轻量级的logstash-forwarder 。不过作者只是一个人,elastic.co公司以后,因为es公司本身还收购了另一个开源项目packetbeat,而这个项目专门就是用golang的,有整个团队,所以es公司干脆把logstash-forwarder的开发工作也合并到同一个golang团队来搞,于是新的项目就叫filebeat了 。logstash 和filebeat都具有日志收集功能,filebeat更轻量,占用资源更少,但logstash 具有filter功能,能过滤分析日志 。一般结构都是filebeat采集日志,然后发送到消息队列,redis,kafaka 。然后logstash去获取,利用filter功能过滤分析,然后存储到elasticsearch中 。
Filebeat使用Go语言编写
工作原理:Filebeat可以保持每个文件的状态,并且频繁地把文件状态从注册表里更新到磁盘 。这里所说的文件状态是用来记录上一次Harvster读取文件时读取到的位置,以保证能把全部的日志数据都读取出来,然后发送给output 。如果在某一时刻,作为output的ElasticSearch或者Logstash变成了不可用,Filebeat将会把最后的文件读取位置保存下来,直到output重新可用的时候,快速地恢复文件数据的读取 。在Filebaet运行过程中,每个Prospector的状态信息都会保存在内存里 。如果Filebeat出行了重启,完成重启之后,会从注册表文件里恢复重启之前的状态信息,让FIlebeat继续从之前已知的位置开始进行数据读取 。
Prospector会为每一个找到的文件保持状态信息 。因为文件可以进行重命名或者是更改路径,所以文件名和路径不足以用来识别文件 。对于Filebeat来说,都是通过实现存储的唯一标识符来判断文件是否之前已经被采集过 。
如果在你的使用场景中,每天会产生大量的新文件,你将会发现Filebeat的注册表文件会变得非常大
优势Filebeat 只是一个二进制文件没有任何依赖 。它占用资源极少,尽管它还十分年轻,正式因为它简单,所以几乎没有什么可以出错的地方,所以它的可靠性还是很高的 。它也为我们提供了很多可以调节的点,例如:它以何种方式搜索新的文件,以及当文件有一段时间没有发生变化时,何时选择关闭文件句柄 。开始时,它只能将日志发送到 Logstash 和 Elasticsearch,而现在它可以将日志发送给 Kafka 和 Redis,在 5.x 版本中,它还具备过滤的能力 。这也就意味着可以将数据直接用 Filebeat 推送到 Elasticsearch,并让 Elasticsearch 既做解析的事情,又做存储的事情 。也不需要使用缓冲,因为 Filebeat 也会和 Logstash 一样记住上次读取的偏移 。
filebeat只需要10来M内存资源;
【日志收集工具简单对比】典型应用场景
Filebeat 在解决某些特定的问题时:日志存于文件,我们希望
将日志直接传输存储到 Elasticsearch 。这仅在我们只是抓去(grep)它们或者日志是存于 JSON 格式(Filebeat 可以解析 JSON) 。或者如果打算使用 Elasticsearch 的 Ingest 功能对日志进行解析和丰富 。
将日志发送到 Kafka/Redis 。所以另外一个传输工具(例如,Logstash 或自定义的 Kafka 消费者)可以进一步丰富和转发 。这里假设选择的下游传输工具能够满足我们对功能和性能的要求
Flume
日志收集工具简单对比

文章插图
 
Flume 是Apache旗下使用JRuby来构建,所以依赖JAVA运行环境 。Flume本身最初设计的目的是为了把数据传入HDFS中(并不是为了采集日志而设计,这和Logstash有根本的区别.Flume设计成一个分布式的管道架构,可以看作在数据源和目的地之间有一个Agent的网络,支持数据路由 。
日志收集工具简单对比

文章插图
 
每一个agent都由Source,Channel和Sink组成 。
Source:Source负责接收输入数据,并将数据写入管道 。Flume的Source支持HTTP,JMS,RPC,NetCat,Exec,Spooling Directory 。其中Spooling支持监视一个目录或者文件,解析其中新生成的事件 。


推荐阅读