主旨:讲述SpringBoot项目使用LogBack日志,LogBack + Flume收集日志到Hdfs文件存储服务器的环境搭建
主要软件版本配置说明:
- SpringBoot-2.1.4 (windows10 IDEA DeBug模式运行)
- Flume-1.9.0 (部署在hadoop-1服务器上,也就是hadoop主节点所在服务器)
- Hadoop-3.2.0 (部署在三台Linux虚拟机上)
???????????????日志采集架构图???????????????
✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌以下介绍搭建步骤✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌
一、搭建Hadoop-3.2.0集群
二、安装Flume-1.9.0
2.1下载Flume-1.9.0安装包
2.2下载上传至Hadoop集群主节点服务器/opt/hadoop/路径下
2.3解压缩apache-flume-1.9.0-bin.tar.gz
2.4配置Flume的环境变量
2.5检查是否配置成功
2.6配置Flume
2.7创建HDFS下flume目录并给予权限
2.8启动Flume a1
三、配置SpringBoot项目
3.1引入logback-flume依赖
3.2配置logback-spring.xml
3.3启动SpringBoot项目
???????????????日志采集架构图???????????????
✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌以下介绍搭建步骤✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌
一、搭建Hadoop-3.2.0集群
准备资源: 3台Linux虚拟机 linux_JDK1.8安装包 Hadoop-3.2.0安装包
可参考我的另一篇文章:Linux从零搭建Hadoop集群(CentOS7+hadoop 3.2.0+JDK1.8完全分布式集群)
二、安装Flume-1.9.0
2.1下载Flume-1.9.0安装包
下载地址:http://flume.apache.org/download.html
我选择的是编译后的包。
2.2下载上传至Hadoop集群主节点服务器/opt/hadoop/路径下
2.3解压缩apache-flume-1.9.0-bin.tar.gz
# 解压缩命令
tar -zxvf apache-flume-1.9.0-bin.tar.gz
# 修改解压后的文件名
mv apache-flume-1.9.0-bin flume-1.9.0
如图:
2.4配置Flume的环境变量
# 修改Linux配置信息
vi /etc/profile
# 添加如下信息
export FLUME_HOME=/opt/hadoop/flume-1.9.0
export PATH=$PATH:$FLUME_HOME/bin
如图:
添加完毕保存配置文件,并重新编译配置文件
# 使配置文件生效
source /etc/profile
2.5检查是否配置成功
执行 flume-ng version 命令:
如图则代表成功:
2.6配置Flume
进入/opt/flume-1.9.0/conf目录
复制一份flume-env.sh.template
cp flume-env.sh.template flume-env.sh
修改flume-env.sh
vi flume-env.sh
# 添加如下信息
export JAVA_HOME=/usr/local/java/jdk1.8.0_201 (此处是你的JDK安装)
如图:
新建flume.conf,加入如下内容
vi flume.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 = 10000
# 每次最大可以从 source 中拿到或者送到 sink 中的 event 数量
a1.channels.c1.transactionCapacity = 1000
# 描述和配置 sink 组件:k1
a1.sinks.k1.channel = c1
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://192.168.217.128:9000/flume/%Y-%m-%d/%H(你的hadoop集群hdfs地址)
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
2.7创建HDFS下flume目录并给予权限
hadoop fs -mkdir /flume
hadoop fs -chown -R flume:flume /flume
如图:
2.8启动Flume a1
执行命令????
flume-ng agent --conf conf --conf-file conf/flume.conf -n a1 -Dflume.root.logger=INFO,console
看到如下日志即表示成功↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
三、配置SpringBoot项目
3.1引入logback-flume依赖
<!-- 引入logback-flume的依赖 -->
<dependency>
<groupId>com.teambytes.logback</groupId>
<artifactId>logback-flume-appender_2.10</artifactId>
<version>0.0.9</version>
</dependency>
3.2配置logback-spring.xml
<!-- 加入如下appender代码 -->
<appender name="flumeTest" class="com.teambytes.logback.flume.FlumeLogstashV1Appender">
<flumeAgents>
192.168.217.128:44444(你的flume a1所在地址:a1监听的端口号)
</flumeAgents>
<flumeProperties>
connect-timeout=4000;
request-timeout=8000
</flumeProperties>
<batchSize>100</batchSize>
<reportingWindow>1000</reportingWindow>
<additionalAvroHeaders>
myHeader = myValue
</additionalAvroHeaders>
<application>JustryDeng's Application</application>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
%d{HH:mm:ss.SSS} %-5level %logger{36} - \(%file:%line\) - %message%n%ex
</pattern>
</layout>
</appender>
<logger name="com" level="info">
<appender-ref ref="flumeTest"/>
</logger>
3.3启动SpringBoot项目
查看HDFS系统中flume目录:
图一 /flume:
图二 /flume/年-月-日:
图三 /flume/年-月-日/小时:
图四 日志文件内容: