日志采集框架Flume

前言

在一个完整的离线大数据处理系统中,除了hdfs+mapreduce+hive组成分析系统的核心之外,还需要数据采集、结果数据导出、任务调度等不可或缺的辅助系统,而这些辅助工具在hadoop生态体系中都有便捷的开源框架,如图:
在这里插入图片描述

1.Flume介绍

  • flume是一个分布式、可靠、高可用的海量日志采集、聚合和传输的系统。
  • flume可以采集文件,socket数据包、文件、文件夹、kafka等各种形式源数据,将采集到的数据(下沉sink)输出到HDFS、hbase、kafka等众多外部存储系统中。
  • 一般的采集需求,通过对flume的简单配置即可实现
  • flume针对特殊场景也具备良好的自定义扩展能力。因此,flume可以适用于大部分的日常数据采集场景

2.Flume的运行机制

1.flume分布式系统中最核心的角色是agent,flume采集系统就是一个个agent连接起来形成的
2.每个agent相当于一个数据传递员,内部有三个组件:
a) Source:采集组件,用于跟数据源对接以获取数据(监控文件)
b) Channel :传输通道组件,用于从source将数据传递到sink
c) Sink:下沉组件,用于往下一级agent传递数据或者往最终存储系统传递数据
在这里插入图片描述
Source到Channel到Sink之间传递数据的形式是Event事件:
Event事件是一个 数据流单元。
在这里插入图片描述

3.Flume采集系统的结构图

1.简单结构
单个agent采集数据
在这里插入图片描述

2.复杂结构
多级agent之间串联
在这里插入图片描述

4.Flume安装部署

Flume的安装非常简单,只需要解压即可,当然,前提是已有hadoop环境
上传安装包到数据源所在节点上
这里我们采用在第三台机器来进行安装
上传安装文件并解压

tar -zxvf flume-ng-1.6.0-cdh5.14.0.tar.gz -C /export/servers/
cd  /export/servers/apache-flume-1.6.0-cdh5.14.0-bin/conf
cp  flume-env.sh.template flume-env.sh
vim flume-env.sh

export JAVA_HOME=${JAVA_HOME}

5.Flume实战案例

案例一:采集某一端口的数据

采集需求:
使用网络telent命令向一台机器发送一些网络数据,然后通过flume采集网络端口数据

配置文件如图:
在这里插入图片描述
执行脚本

bin/flume-ng agent -c conf -f tmpconf/a1.conf -n a1 -Dflume.root.logger=INFO,console
  • -c 指定flume配置文件的路径
  • -f 指定配置文件
  • -n 指定agent的名字(必须与配置文件内的名字相同)
    设置日志级别: -Dflume.root.logger=INFO,console

在另一个节点发送数据
安装telnet : yum install -y telnet

telnet 192.168.100.201 44444(端口号)

案例二:采集文件夹数据

采集需求:
某服务器的某特定目录下,会不断产生新的文件,每当有新文件出现,就需要把文件采集到HDFS中去

配置文件如图:
在这里插入图片描述
监控路径下已经处理过的数据会添加后缀“COMPLETED”,表示已经处理过
新的数据没有标识,flume只处理没有标识的数据

案例三:采集文件夹内新增的数据

采集需求:
比如业务系统使用log4j生成的日志,日志内容不断增加,需要把追加到日志文件中的数据实时采集到hdfs

配置文件如图:
在这里插入图片描述

案例四:agent级联

采集需求:
node01 采集数据 发送给 node02 ,node02将数据写入HDFS

在这里插入图片描述

在这里插入图片描述
启动顺序:
先启动node02 再启动node01

案例五:高可用Flum-NG配置案例failover(故障转移)

需求说明:
如果node02宕机 则使用优先级较低的

配置文件如图:
节点node01:
在这里插入图片描述
节点node02:
在这里插入图片描述

在故障转移中:
agent1.sinkgroups.g1.processor.priority.k1=2 用来设置k1的优先级
数字越大优先级越高,发生故障时启用优先级较低的sink
当优先级较高的恢复时,任务切换到优先级较高的sink
启动顺序:
先启动node02 node03 再启动node01

案例六:负载均衡load balancer

负载均衡用于解决一台机器(一个进程)无法解决所有请求而产生的一种算法
Load balancing Sink Processor 能够实现 load balance 功能
如图:
在这里插入图片描述
avro:12300是一个路由节点 负责将Channel暂存的Event均衡到对应的多个Sink组件上,而每个Sink组件分别连接到一个独立的Agent上
在这里插入图片描述

配置文件如图:
节点node01:
在这里插入图片描述
节点node02:
在这里插入图片描述
节点node03:
在这里插入图片描述启动顺序:
先启动node02 node03 再启动node01

案例七:Flume过滤器

需求说明:
A、B两台日志服务机器实时生产日志主要类型为access.log、nginx.log、web.log
现在要求把A、B 机器中的access.log、nginx.log、web.log 采集汇总到C机器上然后统一收集到hdfs中
在hdfs中的目录为:
/source/logs/access/20180101/**
/source/logs/nginx/20180101/**
/source/logs/web/20180101/**

场景分析:
在这里插入图片描述

数据流程处理分析:
在这里插入图片描述
配置文件如下:
节点node01 (与node02 完全一样):

a1.sources = r1 r2 r3
a1.sinks = k1
a1.channels = c1

a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /export/taillogs/access.log
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = static
a1.sources.r1.interceptors.i1.key = type
a1.sources.r1.interceptors.i1.value = access

a1.sources.r2.type = exec
a1.sources.r2.command = tail -F /export/taillogs/nginx.log
a1.sources.r2.interceptors = i2
a1.sources.r2.interceptors.i2.type = static
a1.sources.r2.interceptors.i2.key = type
a1.sources.r2.interceptors.i2.value = nginx

a1.sources.r3.type = exec
a1.sources.r3.command = tail -F /export/taillogs/web.log
a1.sources.r3.interceptors = i3
a1.sources.r3.interceptors.i3.type = static
a1.sources.r3.interceptors.i3.key = type
a1.sources.r3.interceptors.i3.value = web

a1.channels.c1.type = memory
a1.channels.c1.capacity = 20000
a1.channels.c1.transactionCapacity = 10000

a1.sinks.k1.type = avro
a1.sinks.k1.hostname = node03
a1.sinks.k1.port = 41414

a1.sources.r1.channels = c1
a1.sources.r2.channels = c1
a1.sources.r3.channels = c1
a1.sinks.k1.channel = c1

节点node03:
a1.sources = r1
a1.sinks = k1
a1.channels = c1

a1.sources.r1.type = avro
a1.sources.r1.bind = 192.168.100.203
a1.sources.r1.port =41414

a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = org.apache.flume.interceptor.TimestampInterceptor$Builder

a1.channels.c1.type = memory
a1.channels.c1.capacity = 20000
a1.channels.c1.transactionCapacity = 10000

a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path=hdfs://192.168.100.201:8020/source/logs/%{type}/%Y%m%d

a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

启动顺序:
先启动node03 再启动node01 node02

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值