美文网首页我爱编程
Log4j2+Flume+Hdfs日志采集

Log4j2+Flume+Hdfs日志采集

作者: 阿坤的博客 | 来源:发表于2018-03-15 19:19 被阅读531次

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

主要内容:

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

测试环境:

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

日志采集整体架构

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
image.png

看到started就表示启动成功

3.测试

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


image.png

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

image.png

4.参考链接:

log4j2+flume+hadoop

相关文章

网友评论

    本文标题:Log4j2+Flume+Hdfs日志采集

    本文链接:https://www.haomeiwen.com/subject/lrgfqftx.html