日志系统之Flume采集加morphline解析
优采云 发布时间: 2020-08-11 13:55概述
这段时间花了部份时间在处理消息总线跟日志的对接上。这里分享一下在日志采集和日志解析中遇见的一些问题和处理方案。
日志采集-flumelogstash VS flume
首先说说我们在日志采集器上的选型。由于我们选择采用ElasticSearch作为日志的储存与搜索引擎。而基于 ELK(ElasticSearch,Logstash,Kibana)的技术栈在日志系统方向又是这么流行,所以把Logstash纳入考察对象也是顺 理成章,Logstash在几大主流的日志采集器里算是后起之秀,被Elastic竞购以后愈发成熟,社区也比较活跃。
Logstash的设计:input,filter,output。flume的设计source,channel,sink,当然flume也有interceptor。具体的设计就不多屁话,大致上都是分拆,解耦,pipeline(管道)的思想。同时,它们都支持分布式扩充,比如Logstash既可以作为shipper也可作为indexer,flume可以多个agent组成分布式风波流。
我对flume的接触早于Logstash。最近督查Logstash的时侯,对它强悍的filter印象深刻,特别是grok。而之前flume阵营指出最多的是它的source,sink,channel对各类开源组件的扩充支持十分强悍。
Logstash虽说是一个不错的,但它采用JRuby语言(一种酷似Ruby句型的JVM平台的语言)实现促使它的定制性不够灵活, 这是我舍弃Logstash的主要诱因。因为生态的缘由,我确实须要Java技术栈提供的扩展性(这里主要目标是将消息总线作为日志采集的缓存队列),而 这正是flume的强项。但flume里极少有提到对日志的解析支持,即便有支持正则的interceptor,也只是太有限的查找、替换之类的。经过一 番督查发觉似乎flume提供了这样一个interceptor——morphline。它可以完成对日志的解析。
日志解析-morphlinemorphline简介
morphline是由flume的母公司cloudera开源的一个ETL框架。它用于建立、改变基于Hadoop进行ETL(extract、 transfer、load)的流式处理程序。(值得一提的是flume是由cloudera捐赠给Apache的,后来经过重构成了flume- ng)。morphline促使你在建立ETL Job不需要编码而且不需要大量的MapReduce方法。
morphline是一个富配置文件可以很简单得定义一个转化链,用于从任何数据源消费任何类型的数据,处理数据之后加载结果到Hadoop组件中。它用简单的配置步骤取代了Java编程。
morphline是一个泛型,可以嵌入任何java程序中。morphline是一个显存容器可以储存转化命令。这些命令以插件的方式被加载到 morphline中以执行任务,比如加载、解析、转化或则处理单条记录。一个记录是在显存中的名称-值对的数据结构。而且morphline是可扩充 的,可以集成已存在的功能和第三方系统。
这篇文章不是morphline的软文,所以更多介绍请移步cloudera的CDK官方文档。
这里有副图,形象地展示了morphline大致的处理模型:
系统。利用storm stream做实时解析,利用mapreduce做离线分析,这种高度多样化的使用场景,几乎不需要flume的agent在客户端进行解析的能力,因此flume的morphline也就极少被提到。
但morphline还是不可多得的文本ETL神器,无论你是在采集的时侯直接用morphline 做ETL还是在服务端做,flume+morphline加上去带来的灵活性也不输Logstash。