大数据分析中的数据采集方式包括Logstash、Flume、Fluentd、Logtail等,本文对这几种数据采集技术进行简要介绍。
Logstash
Logstash是一个具备实时处理能力的开源的数据收集引擎。可以动态地从不同的来源收集数据,将数据处理(过滤、变形)过之后统一输出到某个特定地址,为将来更多样化的数据分析做准备。Logstash的作用包括:
●收集各类系统日志:如Apache日志、log4j(Java程序日志)、Windows系统事件日志。通过Filebeat能够实现安全、快速的的日志传输。能够与很多采用UDP及TCP协议的工具对接,如JMX、NetFlow等等。
●Elasticsearch的数据采集的利器,可以配合Elasticsearch和Kibana使用;对input、filter及output部分可以使用多种插件灵活配合部署用以实现不同功能。
●在Web接口服务中,可以收集HTTP请求。能够与各类SQL或非SQL数据库对接,只要这个数据库支持JDBC接口。
Flume
Flume是由Cloudera公司开源的,分布式可靠,高可用的系统,它能够将不同数据源的海量日志数据进行高效收集、聚合、移动、最后存储到一个中心化数据存储系统中。由原来的Flume OG到现在的Flume NG,进行了架构重构,并且现在NG版本完全不兼容原来的OG版本,经过架构重构后,Flume NG更像是一个轻量级的小工具,适应各种方式的日志收集,并支持failover和负载均衡。
Flume NG的特点:
●NG只有一种角色的节点:代理节点(Agent)
●没有collector,master节点,这是核心组件最核心的变化
●去除了physical nodes,local nodes的概念和相关内容
●agent节点的组成也发生了变化,脱离了zookeeper
Fluentd
Fluentd是一个日志收集系统,通过丰富的插件,可以收集来自于各种系统或应用的日志,然后根据用户定义将日志做分类处理。通过Fluentd,你可以非常轻易的实现像追踪日志文件并将其过滤后转存到MongoDB这样的操作。Fluentd可以彻底的将你从繁琐的日志处理中解放出来。
本质上,Fluentd可以分为客户端和服务端两种模块。客户端为安装在被采集系统中的程序,用于读取log文件等信息,并发送到Fluentd的服务端。服务端则是一个收集器。在Fluentd服务端,我们可以进行相应的配置,使其可以对收集到的数据进行过滤和处理,并最终路由到下一跳。下一跳可以是用于存储的数据库,如MongoDB,Amazon S3,也可以是其他的数据处理平台,比如Hadoop。Fluentd有四个关键功能,使其适合构建清洁,可靠的日志管道:
●使用JSON进行统一日志记录:Fluentd尝试尽可能地将数据结构化为JSON:这允许Fluentd统一处理日志数据的所有方面:收集,过滤,缓冲和跨多个源和目标(统一日志层)输出日志。使用JSON可以更轻松地进行下游数据处理,因为它具有足够的结构,可以在保留灵活模式的同时进行访问。
●可插拔架构:Fluentd拥有灵活的插件系统,允许社区扩展其功能。我们的500多个社区贡献插件连接了数十个数据源和数据输出。通过利用插件,您可以立即开始更好地使用日志。
●所需的资源较少:Fluentd是用C语言和Ruby组合编写的,只需要很少的系统资源。vanilla实例运行30-40MB内存,可处理13,000个事件/秒/核心。
●内置可靠性:Fluentd支持基于内存和文件的缓冲,以防止节点间数据丢失。Fluentd还支持强大的故障转移功能,可以设置为高可用性。
Logtail
Logtail是日志服务提供的一种便于日志接入的日志采集客户端。通过在您的机器上安装Logtail来监听指定的日志文件并自动把新写入到文件的日志上传到您所指定的日志库。Logtail的功能优势主要包括以下几个方面:
●基于日志文件、无侵入式的收集日志。用户无需修改应用程序代码,且日志收集不会影响用户应用程序的运行逻辑。
●除支持文本日志采集外,还支持binlog、http、容器stdout等采集方式。
●对于容器支持友好,支持标准容器、swarm集群、Kubernetes集群等容器集群的数据采集。
●能够稳定地处理日志收集过程中各种异常。当遇到网络异常、服务端异常等问题时会采用主动重试、本地缓存数据等措施保障数据安全。
●基于服务端的集中管理能力。用户在安装Logtail后,只需要在服务端集中配置需要收集的机器、收集方式等信息即可,无需逐个登录服务器进行配置。
●完善的自我保护机制。为保证运行在客户机器上的收集Agent不会明显影响用户自身服务的性能,Logtail客户端在CPU、内存及网络使用方面都做了严格的限制和保护机制。