日志收集组件—Flume、Logstash、Filebeat 对比
概述
数据的价值在于把数据变成行动。这里一个非常重要的过程是数据分析。提到数据分析,大部分人首先想到的都是 Hadoop、流计算、机器学习等数据加工的方式。从整个过程来看,数据分析其实包含了 4 个过程:采集,存储,计算,展示。大数据的数据采集工作是大数据技术中非常重要、基础的部分,具体场景使用合适的采集工具,可以大大提高效率和可靠性,并降低资源成本。Flume、Logstash 和 Filebeat 都是可以作为日志采集的工具,本报告将针对这三者进行分析。
一、Flume
Flume 是一种分布式、高可靠和高可用的服务,用于高效地收集、聚合和移动大量日志数据。它有一个简单而灵活的基于流数据流的体系结构。它具有可调的可靠性机制、故障转移和恢复机制,具有强大的容错能力。它使用一个简单的可扩展数据模型,允许在线分析应用程序。
Flume 介绍
Flume 的设计宗旨是向 Hadoop 集群批量导入基于事件的海量数据。系统中最核心的角色是 agent,Flume 采集系统就是由一个个 agent 所连接起来形成。每一个 agent 相当于一个数据传递员,内部有三个组件:
source: 采集源,用于跟数据源对接,以获取数据
sink:传送数据的目的地,用于往下一级 agent 或者最终存储系统传递数据
channel:agent 内部的数据传输通道,用于从 source 传输数据到 sink
flume 配置
Flume 的配置是在 conf 下以.conf 结尾的文件
flume 启动
二、Logstash
Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到存储库中。数据从源传输到存储库的过程中,Logstash 过滤器能够解析各个事件,识别已命名的字段以构建结构,并将它们转换成通用格式,以便更轻松、更快速地分析和实现商业价值。
Logstash 介绍
logstash 是基于 pipeline 方式进行数据处理的,pipeline 可以理解为数据处理流程的抽象。在一条 pipeline 数据经过上游数据源汇总到消息队列中,然后由多个工作线程进行数据的转换处理,最后输出到下游组件。一个 logstash 中可以包含多个 pipeline。
Logstash 管道有两个必需的元素,输入和输出,以及一个可选元素过滤器:
Input:数据输入组件,用于对接各种数据源,接入数据,支持解码器,允许对数据进行编码解码操作;必选组件;
output:数据输出组件,用于对接下游组件,发送处理后的数据,支持解码器,允许对数据进行编码解码操作;必选组件;
filter:数据过滤组件,负责对输入数据进行加工处理;可选组件;Logstash 安装部署
pipeline:一条数据处理流程的逻辑抽象,类似于一条管道,数据从一端流入,经过处理后,从另一端流出;一个 pipeline 包括输入、过滤、输出 3 个部分,其中输入和输出部分是必选组件,过滤是可选组件;instance:一个 Logstash 实例,可以
包含多条数据处理流程,即多个 pipeline;
event:pipeline 中的数据都是基于事件的,一个 event 可以看作是数据流中的一条数据或者一条消息;
Logstash 配置
Logstash 启动
三、Filebeat
Filebeat 是一个日志文件托运工具,在服务器上安装客户端后,Filebeat 会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读),并且转发这些信息到 ElasticSearch 或者 Logstarsh 中存放。
Filebeat 介绍
Filebeat 由两个主要组成部分组成:prospector 和 harvesters。这些组件一起工作来读取文件并将事件数据发送到指定的 output。
Filebeat 目前支持两种 Prospector 类型:log 和 stdin。每个 Prospector 类型可以在配置文件定义多个。log Prospector 将会检查每一个文件是否需要启动 Harvster,启动的 Harvster 是否还在运行,或者是该文件是否被忽略(可以通过配置 ignore_order,进行文件忽略)。如果是在 Filebeat 运行过程中新创建的文件,只要在 Harvster 关闭后,文件大小发生了变化,新文件才会被 Prospector 选择到。
Filebeat 配置
Filebeat 配置相比较为复杂,可以参考 Filebeat 收集日志的那些事儿
四、Flume、Logstash、Filebeat 对比
总结
Flume 更注重于数据的传输,对于数据的预处理不如 Logstash。在传输上 Flume 比 Logstash 更可靠一些,因为数据会持久化在 channel 中。数据只有存储在 sink 端中,才会从 channel 中删除,这个过程是通过事物来控制的,保证了数据的可靠性。Logstash 是 ELK 组件中的一个,一般都是同 ELK 其它组件一起使用,更注重于数据的预处理,Logstash 有比 Flume 丰富的插件可选,所以在扩展功能上比 Flume 全面。但 Logstash 内部没有 persist queue,所以在异常情况下会出现数据丢失的问题。Filebeat 是一个轻量型日志采集工具,因为 Filebeat 是 Elastic Stack 的一部分,因此能够于 ELK 组件无缝协作。Filebeat 占用的内存要比 Logstash 小很多。性能比较稳健,很少出现宕机。
版权声明: 本文为 InfoQ 作者【数据社】的原创文章。
原文链接:【http://xie.infoq.cn/article/d6e70ca4572287cb758118c43】。文章转载请联系作者。
评论