Log4j2+Flume+Hdfs日志采集

本篇文章主要讲述基于SpringBoot项目中使用Log4j2使用Log4j2+Flume收集日志到Hdfs的环境搭建

主要内容:

  • 1.配置Log4j2引入flume-ng
  • 2.部署flume-ng
  • 3.测试

测试环境:

  • windows
  • flume-1.6
  • hadoop-2.7.3 (三台部署在CentOS7上)

相关文章:
1.VM12安装配置CentOS7
2.Hadoop集群环境搭建(三台)
3.Hadoop之本地运行WordCount
4.Hadoop之集群运行WordCount
5.Log4j2+Flume+Hdfs日志采集

Log4j2+Flume+Hdfs日志采集_第1张图片
日志采集整体架构

1.配置Log4j2引入flume-ng

前面我们已经在SpringBoot里引入了Log4j2,下面我们引入基于Flume的依赖



    org.apache.logging.log4j
    log4j-flume-ng
    2.8.2



    org.apache.flume.flume-ng-clients
    flume-ng-log4jappender
    1.7.0

完整的pom.xml如下:


    
        org.springframework.boot
        spring-boot-starter-web
        
            
            
                org.springframework.boot
                spring-boot-starter-logging
            
        
    
    
    
        org.springframework.boot
        spring-boot-starter-log4j2
    

    
    
        org.apache.logging.log4j
        log4j-flume-ng
        2.8.2
    

    
        org.apache.flume.flume-ng-clients
        flume-ng-log4jappender
        1.7.0
    

    
        org.springframework.boot
        spring-boot-starter-test
        test
    

修改Log4j2.xml文件如下:






    
    
        
        
            
            
            
        
        
        
            
            
            
            
        
    
    
    
        
        
        
        
            
            
        
    

这里我们将日志以PatternLayout的形式通过flume输送到127.0.0.1的44444端口,那么下一步就是用Flume来监听127.0.0.1的44444端口来接收日志并传输给Hdfs

2.部署Flume

为了简单看到效果,应用和flume都部署在windows里,Hdfs在虚拟机上。

2.1.下载Flume

下载地址:传输门

2.2.部署Flume

2.2.1.解压

将下载的.tar.gz解压到任意目录

2.2.2.配置环境变量

在Path后面加入解压后的路径

D:\soft\dev\apache-flume-1.6.0-bin\bin;

2.2.3.新建配置文件

在根目录的conf下新建avro-hdfs.conf文件,文件内容如下:

# 定义这个 agent 中各组件的名字
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# 描述和配置 source 组件:r1
a1.sources.r1.type = avro
a1.sources.r1.bind = 0.0.0.0
a1.sources.r1.port = 44444

# 描述和配置 channel 组件,此处使用是内存缓存的方式
a1.channels.c1.type = memory
# 默认该通道中最大的可以存储的 event 数量
a1.channels.c1.capacity = 1000
# 每次最大可以从 source 中拿到或者送到 sink 中的 event 数量
a1.channels.c1.transactionCapacity = 100

# 描述和配置 sink 组件:k1
a1.sinks.k1.channel = c1
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://192.168.2.111:9000/business/%Y-%m-%d/%H
a1.sinks.k1.hdfs.filePrefix = logs
a1.sinks.k1.hdfs.inUsePrefix = .
# 默认值:30; hdfs sink 间隔多长将临时文件滚动成最终目标文件,单位:秒; 如果设置成 0,则表示不根据时间来滚动文件
a1.sinks.k1.hdfs.rollInterval = 0
# 默认值:1024; 当临时文件达到该大小(单位:bytes)时,滚动成目标文件; 如果设置成 0,则表示不根据临时文件大小来滚动文件
a1.sinks.k1.hdfs.rollSize = 16777216
# 默认值:10; 当 events 数据达到该数量时候,将临时文件滚动成目标文件; 如果设置成 0,则表示不根据 events 数据来滚动文件
a1.sinks.k1.hdfs.rollCount = 0
a1.sinks.k1.hdfs.batchSize = 1000
a1.sinks.k1.hdfs.writeFormat = text
# 生成的文件类型,默认是 Sequencefile,可用 DataStream,则为普通文本
a1.sinks.k1.hdfs.fileType = DataStream
# 操作 hdfs 超时时间
a1.sinks.k1.callTimeout =10000


# 描述和配置 source channel sink 之间的连接关系
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

这里我们定义了一个source监听44444端口,并定义Hdfs sink 执行hdfs://192.168.2.111:9000,表示我们将日志输送到这个地址的hdfs上.

2.2.4.启动Flume

回到flume的根目录运行如下命令:

# windows运行命令
flume-ng agent -conf conf/ -conf-file conf/ avro-hdfs.conf -name a1 -property flume.root.logger=INFO,console
Log4j2+Flume+Hdfs日志采集_第2张图片
image.png

看到started就表示启动成功

3.测试

启动SpringBoot程序可以在hdfs的文件管理页面看到如下文件


Log4j2+Flume+Hdfs日志采集_第3张图片
image.png

这里我们已经成功的收到日志了,下面查看日志信息:

Log4j2+Flume+Hdfs日志采集_第4张图片
image.png

4.参考链接:

log4j2+flume+hadoop

你可能感兴趣的:(Log4j2+Flume+Hdfs日志采集)