本篇文章主要讲述基于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日志采集
![](https://img.haomeiwen.com/i1185917/2780ea8a65fa50d6.png)
1.配置Log4j2引入flume-ng
前面我们已经在SpringBoot里引入了Log4j2,下面我们引入基于Flume的依赖
<!-- flume -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-flume-ng</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>org.apache.flume.flume-ng-clients</groupId>
<artifactId>flume-ng-log4jappender</artifactId>
<version>1.7.0</version>
</dependency>
完整的pom.xml如下:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!-- 过滤logback日志框架 -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 引入log4j2 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!-- flume -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-flume-ng</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>org.apache.flume.flume-ng-clients</groupId>
<artifactId>flume-ng-log4jappender</artifactId>
<version>1.7.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
修改Log4j2.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<configuration status="WARN" monitorInterval="30">
<!--先定义所有的appender-->
<appenders>
<!--这个输出控制台的配置-->
<console name="Console" target="SYSTEM_OUT">
<!--<JSONLayout compact="true" eventEol="true"/>-->
<!--输出日志的格式-->
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
</console>
<!--输出到flume-->
<Flume name="FlumeInfo" compress="false" type="avro" ignoreExceptions="false">
<Agent host="127.0.0.1" port="44444"/>
<!--输出方式为json-->
<!--<JSONLayout/>-->
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
</Flume>
</appenders>
<!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
<loggers>
<!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
<logger name="org.springframework" level="INFO"></logger>
<logger name="org.mybatis" level="INFO"></logger>
<root level="all">
<appender-ref ref="Console"/>
<appender-ref ref="FlumeInfo"/>
</root>
</loggers>
</configuration>
这里我们将日志以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
![](https://img.haomeiwen.com/i1185917/3ff11cab03e6ff5a.png)
看到started就表示启动成功
3.测试
启动SpringBoot程序可以在hdfs的文件管理页面看到如下文件
![](https://img.haomeiwen.com/i1185917/a2d0e51b4512779c.png)
这里我们已经成功的收到日志了,下面查看日志信息:
![](https://img.haomeiwen.com/i1185917/1e4f93f82b2da02b.png)
网友评论