flume的简介及核心概念在一二章已讲解,不再赘述、
1.Flume日志环境的搭建(记File的Source和Channel的几个类型)
1.1Source
avro source:支持avro协议(实际上是avro rpc),内置支持
thrift source:支持thrift协议,内置支持
exec source:基于Unix的command在标准输出上产生数据
1.2.Channel
Channel是连接Source和Sink的组件,可以将它看做一个数据的缓冲区(数据队列),它可以将事件暂存到内存中也可以持久化到本地磁盘上, 直到Sink处理完该事件。介绍两个较为常用的Channel, MemoryChannel和FileChannel。
memory channel:event数据存储在内存中
jdbc channel:event数据存储带持久化内存中,当前flume channel内置支持derby
file channel:event数据存储在磁盘文件中
2.Flume组件常用配置分析
2.1 Source
2.1.1Avro Source(一个数据序列化系统)
监听AVRO端口,接受来自外部AVRO客户端的事件流。利用Avro Source可以实现多级流动、扇出流、扇入流等效果。另外也可以接受通过flume提供的Avro客户端发送的日志信息。Avro Source主要属性说明如下:
channels:接收客户端数据源事件流的通道
type:类型名称(avro)
bind:需要监听的主机名或IP
port:监听的端口
使用avro的source可以说明被监听的的主机IP和端口号,本例子中agent的名称设置为a1。
al.sources = r1 #指定采集数据源的名称为r1
al.channels = c1 #指定使用通道的名称为c1
al.sources.r1.type = avro #指定采集数据源的方式为avro
al.sources.r1.channels = c1 #指定采集数据源的通道
al.sources.r1.bind = 0.0.0.0 #指定avro channel需要监听的主机名或ip
al.sources.r1.port = 4441 #指定avro监听的端口号
a1的含义就是agent1。
ep:
a1.sources = r1
a1.sinks = k1
al.channels = c1
#配置Source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 4444
#配置sink
a1.sink.k1.type = logger
#配置Channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
#把 Source 和 Sink 绑定到Channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
2.1.2 exec source
exec可以通过指定的操作对日志进行读取,exec可以通过指定的操作对日志进行读取,使用exec时需要指定shell命令,对日志进行读取,基本配置如表所示:
补充:
tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。
tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。
命令格式:
tail [参数] [文件]
参数:
- -f 循环读取
- -q 不显示处理信息
- -v 显示详细的处理信息
- -c<数目> 显示的字节数
- -n<行数> 显示文件的尾部 n 行内容
- --pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
- -q, --quiet, --silent 从不输出给出文件名的首部
- -s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
2.1.3 spooling-directory source
这个Source允许将要收集的数据放置到“自动搜集”目录中。 这个Source将监视该目录,并将解析新文件的出现。事件处理逻辑是可插拔的,当一个文件被完全读入通道,它会被重命名或可选的直接删除。
要注意的是,放置到自动搜集目录下的文件不能修改,如果修改,则flume会报错。另外,也不能产生重名的文件,如果有重名的文件被放置进来,则flume会报错。
属性说明如下:
channels:接收客户端数据流的通道
type:类型名称spooldir
spooldir:读文件的路径,即”搜集目录“
Flume可以读取spooldir对应文件夹里的日志,使用时指定一个文件夹映射到spooldir,Flume就可以读取该文件夹中的所有文件。基本配置如表所示:
2.1.4 syslog source
syslog source可以通过syslog协议读取系统日志,分为tcp和udp两种,使用时需指定ip和端口,基本配置如表所示:
2.2 Channel
Flume的channel种类并不多,最常用的是memory channel,基本配置如表所示
2.3 Sink
2.3.1 logger sink
logger sink是指用于记录INFO级别日志的汇聚点,就是将收集到的日志写到flume的log中,是个十分简单但非常实用的sink,一般用于调试,前面介绍Source时候用到的Sink都是这个类型的Sink。logger sink的基本配置如表所示:
2.3.2 avro sink
avro可以将接受到的日志发送到指定端口,供级联agent的下一跳收集和接受日志,使用时需要指定目的ip和端口;其基本配置如表所示:
2.3.3 fill roll sink
file_roll可以将一定时间内收集到的日志写到一个指定的文件中,具体过程为用户指定一个文件夹和一个周期,然后启动agent,这时该文件夹会产生一个文件将该周期内收集到的日志全部写进该文件内,直到下一个周期再次产生一个新文件继续写入,以此类推,周而复始。其基本配置如表所示:
任务实施1:
# 设置Agent上的各个组件名称
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# 配置Source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
# 配置Sink
a1.sinks.k1.type = logger
# 配置Channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# 把Source和Sink绑定到Channel上
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
任务实施2:
#定义三大组件名称
a1.sources = r1
a1.channels = c1
a1.sinks = k1
#定义Source
a1.sources.r1.type = spooldir
a1.sources.r1.spoolDir = C:/mylogs/
#定义Channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000
a1.channels.c1.transactionCapacity = 100
#定义Sink
a1.sinks.k1.type = logger
#组装Source、Channel、Sink
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1