Apache Flume-静态拦截器-功能实现|学习笔记

简介: 快速学习 Apache Flume-静态拦截器-功能实现

开发者学堂课程【Flume 基础应用实战-企业全场景解决方案 Apache Flume-静态拦截器-功能实现】学习笔记,与课程紧密联系,让用户快速学习知识。  

课程地址:https://developer.aliyun.com/learning/course/715/detail/12774


Apache Flume-静态拦截器-功能实现

 

日志采集汇总当中静态拦截功能的具体实现

打开参考资料,下面有 flume 拦截器案例1,这里以两台机器来模拟业务需求。

图片1.png

其中第一台服务器用来表明产生数据的服务器,当中有不同类型的文件,分别叫做access.log,nginx.log,web.log,另外一台服务器做日志的汇总之后统一的上传到 hadoop 当中去。

图片2.png

接下来看一下具体该怎么去编写,这里有两个配置,见名知意,既然涉及两极,势必涉及两极之间跨网络传递,涉及了 avro_sink, avro_source,因此从名字可以看出来,下面的文件是第一级,上面的文件是第二级。

图片3.png

首先打开第一级文件看一下, 上面定义 source 为三个 r1,r2,r3,sink 有一个叫做k1,channel 为 c1, 三个 source 分别去监控三个不同的文件,第一个 r1 的类型叫做 exec,可以执行一个命令,命令 tail-F,接下来统一举个例子,比如说在服务器当中,cd 到 logs 当中,看一下 pwd,以 /root/logs 路径为例做一个简单的修改,我们的数据位于一个叫做 access.log 的路径下,它把这个文件实时地收集到。

图片4.png

但是在它收集的时候,给它添加了一个拦截器,名字叫做 i1,是一个静态拦截器,会往 event 当中加入一个 K V,k 叫做 type, v 叫做 access。

图片5.png

其他两个与它类似,第二个 source 监控的是这一个文件,也给它添加一个静态拦截器,添加的内容叫做 nginx.log, 跟它的内容保持一致。

图片6.png

第三个叫做 web.log, 同样也往里面加入静态拦截器。

这三个组件表明了监控三个文件变化的时候,分别给它们添加的拦截器往 event 的header 当中插入定义好的 kv 标识。

图片7.png

把这三个数据收集到之后,通过 sink 统一的发给下一台机器,所以在使用 avro sink 发往下一台机器,这里用 node-2 来表示,端口是41414。

图片8.png

下面有两个 memory 内存缓存相关的,一个是 capacity 容量,可以根据需求修改一下,比如这台服务器内存就一点点,如果非要写这么大缓存,不好进行内存申报。

图片9.png

接下来指定三个 source 的 channel 为 c1,sink 的 channel 也为 c1,相当于通过channel 把这些组件串联起来,这样就制定好了好第一级的相关配置,保存一下。

接下来打开第二级配置。在第二级配置当中,要做的目的很简单,把上一级的数据接收到,然后把它上传到 HDFS 中去,所以说它有三个组件,分别叫 source(r1)、channel(c1)、sink(s1),它的 source 必须是 avro source,因为上一级是 avro sink,人家发的是41414,它绑定的端口也是 node-2,41414,这里的时间拦截器也是它自己内带的,可以获取相关的时间。

图片10.png

重点在于上传的时候,它的sink叫做hdfs,路径是hdfs://node-2]:9000/source/logs%{type}/%Y%m%d,这一级的文件夹就不是我们写的,也不是通过符号获取时间,而是根据拦截器的内容来动态地获取的,这里给文件加了一个前缀,叫做 event,可以自己修改,它的类型是普通文本文件。

图片11.png

下面进行 hdfs 文件滚动的相关参数介绍,count 为零叫做不按条数滚动,间隔30秒,30秒滚动一次,可以把它改小一点,比如20秒或者10秒,下面是文件的大小,这应该是64兆,这里写入 hdfs 个数,一批写20个 event,其他跟之前保持一致,确认无误之后就把配置文件上传到服务器上来做一个执行。

图片12.png

首先打开服务器,这里以 node-1 和 node-2 为例,首先 cd 到 node-1 conf 当中,做一个配置编辑,首先把名字复制一下,vim 编辑,可以看到这个名字写得比较规范,见名知意,通过这个名字就能知道它是什么样的 source 或 sink,建议大家在企业当中保持这样的命名规范。打开之后,把里面的内容复制过来,注意不要复制错了,然后做一个粘贴,打开服务器终端,41414,node-2,保存完之后,接下来到第二台机器上,同样的 cd 到 conf 当中啊,然后去 vim 编辑这个文件,之后把里面的内容给大家打开看一下,直接复制过来不用修改,然后确认 IP 和端口,没问题之后,做一个保存。

接下来是启动这两个 flume,从第二级开始启动,在启动之前,首先来解决如何去模拟的问题。

在这个路径下有三个文件源源不断地产生,通过配置来看一下监控的文件,这时候正好可以用现有命令来做一个解决。

图片13.png

模拟数据实时产生:

While true; do echo "access access.....">> /root/1ogs/access.log;sleep 0.5;done  

while true; do echo "web web.....">> /root/1ogs/web.1og;sleep 0.5;done

while true; do echo "nginx nginx....." >> /root/1ogs/nginx.1og;s1eep 0.5;done

接下来启动 flume,从远离数据源的第二节开始启动。启动时 cd..返回到上一级,用其他的启动命令来做一个启动,打开参考资料,里面有各种各样的相关配置,随便找一个复制启动命令,添加过来,需要改掉参考资料的名字。

首先启动的第二级,第二级叫做 a,到H应该选一个 A。A 下滑性。

一定需要心细,确定名字 a1 后,启动一下,接下来到第一 D 级当中,也做一个启动,cd.. 返回到上级当中,把刚才的命令再复制一遍 ,做一个粘贴,同样地把采集方案名字做一个修改,跟方案保持一致,它的名字叫做 exec_source。

启动一下,之后可以发现第二级已经连接。

接下来快速地把刚才执行的命令复制一下,首先来执行第一个,接下来再克隆几个窗口,把第二个命令也复制过来,然后再把第三个命令也执行一下,相当于接下来就往这三个文件当中不断的追加内容,可以看到现在这里创建的文件叫做 nginx,目录是动态获取的,上面有的叫 access, 这时候可以去验证一下它有没有把数据经过拦截之后分门别类地放在指定的文件夹里。回到根目录,在 source 下的 logs下,首先可以发现这三个文件夹并不是在配置当中写死的,而是根据拦截器内容自己动态的获取的,这里有三个文件夹,access、nginx和web。

图片14.png

里面内容应该就是跟它相关的。验证方法很简单,如果来到 access 当中,内容应该全是 access,点进去看一下,随便下载一个文件,打出来之后选择直接打开,里面全是 access 的内容。

图片15.png

说明数据没有混淆,以这个为方向,可以去验证其他两个文件夹,比如来验证web,在这个路径下,它里面内容应该全是 web 的内容,再把它打开来看一下,发现里面全是 web。这样就正好满足了讲义所说的需求——数据来自不同的文件,经过服务器拦截之后可以把它分门别类,来自哪个文件就放在对应的文件夹目录下,这是通过静态的拦截器来搞定的,这个静态拦截器不需要我们开发,只需要在我们使用的过程中进行配置即可,这就是我们一个日志采集汇总的需求,在企业当中经常会涉及不同类型的文件同时采集,然后放在不同的路径下,这个拦截器正好满足需求。

相关文章
|
7月前
|
域名解析 Linux Apache
Linux Apache服务详解——虚拟网站主机功能实战
Linux Apache服务详解——虚拟网站主机功能实战
168 5
|
7月前
|
安全 网络协议 Linux
Linux加强篇010-使用Apache服务部署静态网站
山重水复疑无路,柳暗花明又一村
734 0
|
存储 物联网 数据管理
使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(12)
现在到了使用Apache IoTDB进行IoT相关开发的架构设计与功能实现的最后一个环境,在本文中我将向大家介绍IoTDB的查询语言。IoTDB为咱们广大开发者提供了类似SQL的查询语言,用于与IoTDB进行交互,查询语言可以分为4个主要部分:架构语句、数据管理语句、数据库管理语句、功能。
214 0
|
7月前
|
Shell
Flume【问题记录 01】【at org.apache.flume.node.Application.main(Application.java:xxx) 类问题整理+其他类型问题总结】【避坑指南】
【2月更文挑战第17天】Flume【问题记录 01】【at org.apache.flume.node.Application.main(Application.java:xxx) 类问题整理+其他类型问题总结】【避坑指南】
349 2
|
7月前
|
Java Linux
Flume【环境搭建 01】CentOS Linux release 7.5 安装配置 apache-flume-1.9.0 并验证
【2月更文挑战第16天】Flume【环境搭建 01】CentOS Linux release 7.5 安装配置 apache-flume-1.9.0 并验证
136 0
|
7月前
|
数据采集 消息中间件 存储
Flume 快速入门【概述、安装、拦截器】
Apache Flume 是一个开源的数据采集工具,用于从各种数据源(如日志、网络数据、消息队列)收集大规模数据,并将其传输和加载到数据存储系统(如 HDFS、HBase、Hive)。Flume 由数据源(Source)、通道(Channel)、拦截器(Interceptor)和接收器(Sink)组成,支持灵活配置以适应不同的数据流处理需求。安装 Flume 包括解压软件包、配置环境变量和调整日志及内存设置。配置文件定义数据源、通道、拦截器和接收器,拦截器允许预处理数据。Flume 适用于构建数据管道,整合分散数据到中心存储系统,便于分析和报告。
1174 3
|
6月前
|
存储 SQL 数据管理
基于阿里云数据库 SelectDB 版内核 Apache Doris 全新分区策略 Auto Partition 应用场景与功能详解
自动分区的出现进一步简化了复杂场景下的 DDL 和分区表的维护工作,许多用户已经使用该功能简化了工作流程,并且极大的便利了从其他数据库系统迁移到 Doris 的工作,自动分区已成为处理大规模数据和应对高并发场景的理想选择。
|
7月前
|
存储 数据采集 监控
Flume 拦截器概念及自定义拦截器的运用
Apache Flume 的拦截器是事件处理组件,位于Source和Channel之间,用于在写入Channel前对数据进行转换、提取或删除。它们支持数据处理和转换、数据增强、数据过滤以及监控和日志功能。要创建自定义拦截器,需实现Interceptor接口,包含initialize、intercept、intercept(List<Event>)和close方法。配置拦截器时,通过Builder模式实现Interceptor.Builder接口。在Flume配置文件中指定拦截器全类名,如`TestInterceptor$Builder`,然后启动Flume进行测试。
214 0
|
7月前
|
运维 Linux Apache
LAMP架构调优(九)——Apache Rewrite功能实战
LAMP架构调优(九)——Apache Rewrite功能实战
65 1
|
7月前
|
存储 SQL Apache
Apache Hudi 1.x 版本重磅功能展望与讨论
Apache Hudi 1.x 版本重磅功能展望与讨论
117 4

推荐镜像

更多