日志系统之Flume采集加morphline解析

本文探讨了在日志系统中选择Flume而非Logstash的原因,并详细介绍了如何使用Flume的morphline进行日志解析。通过服务端应用morphline,实现了从非结构化日志中提取结构化数据,从而简化日志处理流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

这段时间花了部分时间在处理消息总线跟日志的对接上。这里分享一下在日志采集和日志解析中遇到的一些问题和处理方案。

日志采集-flume

logstash VS flume

首先谈谈我们在日志采集器上的选型。由于我们选择采用ElasticSearch作为日志的存储与搜索引擎。而基于ELK(ElasticSearch,Logstash,Kibana)的技术栈在日志系统方向又是如此流行,所以把Logstash列入考察对象也是顺理成章,Logstash在几大主流的日志收集器里算是后起之秀,被Elastic收购之后更加成熟,社区也比较活跃。

Logstash的设计:inputfilter,output。flume的设计sourcechannelsink,当然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。它可以完成对日志的解析。

日志解析-morphline

morphline简介

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大致的处理模型:
morphline

这里还有一幅图,展示了在大数据生态系统中,morphline的架构模型:
morphlines-architecture

后来morphline的开发主要由Kite主导,它是构建于Hadoop上的一套抽象的数据模型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值