(五)Flume安装、配置、实现日志定时复制、采集

内容简介

数据可视化课程设计上课案例项目、使用简易商城项目产生用户访问日志,使用nginx记录访问日志、使用Flume +kafka完成日志采集到HDFS、使用Spark 完成日志离线分析、使用Sqoop将分析结果抽取到MySQL,最终使用SSM后端项目完成数据可视化展示。

一、Hadoop分布式集群安装
二 、Nginx安装配置、部署前端项目
三 、MySQL安装
四 、Tomcat安装、部署后端项目
五 、Flume安装、配置、实现日志定时复制、采集
六 、Hadoop实现简单的日志分析
七 、Kafka集群安装配置、Flume整合Kafka实现日志采集
八 、Spark集群安装、配置
九 、使用Spark进行日志分析
十 、Sqoop安装配置、抽取分析结果到MySQL数据库
十 一、使用Echarts展示分析结果

1、下载 apache-flume-1.9.0-bin.tar.gz 到/mnt/tools目录下
http://www.apache.org/dyn/closer.lua/flume/1.9.0/apache-flume-1.9.0-bin.tar.gz
2、解压

tar -zvxf  /mnt/tools/apache-flume-1.9.0-bin.tar.gz -C  /mnt/training/

3、配置环境变量
vi ~/.bash_profile 或者 vi /etc/profile

export FLUME_HOME=/mnt/training/apache-flume-1.9.0-bin
export PATH=$PATH:$FLUME_HOME/bin

source ~/.bash_profile 或者 source /etc/profile

4、复制jar包(需要注意自己的Hadoop的版本,找到对应的Hadoop版本对应的jar包版本再复制)
到 /mnt/training/apache-flume-1.9.0-bin/lib目录

share/hadoop/common/hadoop-common-2.7.3.jar
share/hadoop/common/lib/commons-configuration-1.6.jar
share/hadoop/common/lib/hadoop-auth-2.7.3.jar
share/hadoop/hdfs/hadoop-hdfs-2.7.3.jar
share/hadoop/common/lib/htrace-core-3.1.0-incubating.jar
share/hadoop/common/lib/commons-io-2.4.jar

5、验证

flume-ng version 

6、配置Flume HDFS Sink:
在/mnt/training/apache-flume-1.9.0-bin/conf/新建一个flume-hdfs.conf


# define the agent
a1.sources=r1
a1.channels=c1
a1.sinks=k1

# define the source
#上传目录类型
a1.sources.r1.type=spooldir
# 设定Flume监听或者监视的文件夹
a1.sources.r1.spoolDir=/usr/local/nginx/logs/flumeLogs
#定义自滚动日志完成后的后缀名
a1.sources.r1.fileSuffix=.FINISHED
#根据每行文本内容的大小自定义最大长度4096=4k
a1.sources.r1.deserializer.maxLineLength=4096

# define the sink
a1.sinks.k1.type = hdfs
#上传的文件保存在hdfs的/flumeLogs目录下
a1.sinks.k1.hdfs.path = hdfs://master:9000/flumeLogs/%y-%m-%d/%H/%M/%S
a1.sinks.k1.hdfs.filePrefix=access_log
a1.sinks.k1.hdfs.fileSufix=.log
a1.sinks.k1.hdfs.batchSize=1000
a1.sinks.k1.hdfs.fileType = DataStream
a1.sinks.k1.hdfs.writeFormat= Text 
# roll 滚动规则:按照数据块128M大小来控制文件的写入,与滚动相关其他的都设置成0
#为了演示,这里设置成500k写入一次
a1.sinks.k1.hdfs.rollSize= 512000
a1.sinks.k1.hdfs.rollCount=0
a1.sinks.k1.hdfs.rollInteval=0
#控制生成目录的规则:一般是一天或者一周或者一个月一次,这里为了演示设置10秒 
a1.sinks.k1.hdfs.round=true
a1.sinks.k1.hdfs.roundValue=10
a1.sinks.k1.hdfs.roundUnit= second    
#是否使用本地时间
a1.sinks.k1.hdfs.useLocalTimeStamp=true   

#define the channel
a1.channels.c1.type = memory
#自定义event的条数
a1.channels.c1.capacity = 500000
#flume事务控制所需要的缓存容量1000条event
a1.channels.c1.transactionCapacity = 1000

#source channel sink cooperation
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

7、修改conf/flume-env.sh(该文件事先是不存在的,需要复制一份)

cp flume-env.template.sh flume-env.sh
#设置JAVA_HOME:
export JAVA_HOME = /mnt/training/1.8.0_261          
#修改默认的内存:  
export JAVA_OPTS="-Xms1024m -Xmx1024m -Xss256k -Xmn2g -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:-UseGCOverheadLimit"   

8、编写复制日志脚本,将access.log文件采集到 指定的目录中
位置:/root/rollingLog.sh
内容:

	#!/bin/bash

	dataformat=`date +%Y-%m-%d-%H-%M-%S`

	cp /usr/local/nginx/logs/access.log /usr/local/nginx/logs/access_$dataformat.log
	echo "复制日志完成..."
	host=`hostname`
	sed -i 's/^/'${host}',&/g' /usr/local/nginx/logs/access_$dataformat.log

	lines=`wc -l < /usr/local/nginx/logs/access_$dataformat.log`
	
	mv /usr/local/nginx/logs/access_$dataformat.log /usr/local/nginx/logs/flumeLogs
	echo "移动日志完成..."

	sed -i '1,'${lines}'d' /usr/local/nginx/logs/access.log
	
	/usr/local/nginx/sbin/nginx -s stop
	echo "nginx停止中..."
	/usr/local/nginx/sbin/nginx
	echo "nginx启动中..."
	ls -al /usr/local/nginx/logs/flumeLogs/

9、设置定时任务定时复制日志,为Flume准备预处理日志

crontab -e
# 像vi或者vim命令一样编辑 定时任务列表
# 设定 每个30分钟执行一次 复制日志的脚本
*/30 * * * * /root/rollingLog.sh
ESC 退出编辑
:wq保存退出

10、编写启动脚本
位置:/root/flume_start.sh
内容:

#!/bin/bash
/mnt/training/apache-flume-1.9.0-bin/bin/flume-ng agent -c /mnt/training/apache-flume-1.9.0-bin/conf/ -f /mnt/training/apache-flume-1.9.0-bin/conf/flume-hdfs.conf -n a1 -Dflume.root.logger=INFO,console &

11、启动
cd /root
./flume_start.sh

12、测试采集结果
1)在shop界面 随便单击几个商品,产生nginx access.log文件
2)日志将会被采集到 HDFS中 使用 HDFS的文件管理界面可以查看结果

**PS:关于接下来的做法的几点思考:

方案一:使用Hadoop直接去分析HDFS中的数据内容,然后使用sqoop将结果导出到关系型数据库,最后进行数据可视化。(六) Hadoop日志分析、(十)Sqoop安装配置、抽取数据到MySQL、(十一)使用Echarts展示分析结果
方案二:如果要做实时消费,需要安装kafka+Spark streaming 并将Flume的Sink改成kafka相关的类型,然后进行实时消费,实时分析,结果存入Hbase或者MySQL进行数据可视化
方案三:修改Flume的Sink的类型将采集的日志直接落入 HBase数据库,然后使用Hive进行分析,结果存入MyQL,然后进行数据可视化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韩亮老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值