案例说明
监控一个目录的文件,当文件发生变化时,将内容打印到控制台中
Taildir Source
通过 Taildir Source 实现此功能
Taildir Source 监控指定的一些文件,检测到新的一行数据产生时,几乎实时地读取数据,如果新的一行数据还没写完,Taildir Source 会等到这行写完后再读取。
记录读取的位置
Taildir Source 是可靠的,即使发生 文件轮换 也不会丢失数据。它会定期地以 JSON 格式在一个专门用于定位的文件上记录每个文件的最后读取位置。
如果Flume由于某种原因停止或挂掉,它可以从文件的标记位置重新开始读取。不会发生重复读取
文件轮换:log4j等日志框架或者系统会自动丢弃日志文件中时间久远的日志,一般按照日志文件大小或时间来自动分割或丢弃的机制。
读取位置
Taildir Source 还可以从任意指定的位置开始读取文件。默认情况下,它将从每个文件的第一行开始读取。
文件按照修改时间的顺序来读取。修改时间最早的文件将最先被读取(简单记成:先来先走)。
不会修改文件
Taildir Source 不会 修改监控文件的名字,也不会 删除该文件,不会修改文件的内容
支持的文件
当前 不支持 读取 二进制文件。
只能逐行读取文本文件。
文档
https://flume.liyifeng.org/#taildir-source
http://flume.apache.org/releases/content/1.9.0/FlumeUserGuide.html#taildir-source
参数解释
详细解释见 链接
channels:与Source绑定的channel,多个用空格分开
type:组件类型,这个是:
TAILDIRfilegroups:被监控的文件夹目录集合,这些文件夹下的文件都会被监控,多个用空格分隔
filegroups.<filegroupName>:被监控文件夹的 绝对路径。支持:正则表达式(注意不会匹配文件系统的目录)只是用来匹配文件名positionFile:默认值~/.flume/taildir_position.json记录读取文件的位置,JSON格式
Logger Sink
使用INFO级别把Event内容输出到日志中,一般用来 测试、调试 使用。这个 Sink 是唯一一个不需要额外配置就能把 Event 的原始内容输出的Sink
文档
https://flume.liyifeng.org/#logger-sink
创建测试目录
登录 hadoop1 ,创建以下目录,用于测试:
mkdir -vp /test_flume/logs/
编写配置文件
登录 hadoop1,
cd /program/flume-1.9.0/conf
vim my.conf
内容如下:
# 定义agent名字为a1,相当于变量名,可任意起。启动命令会指定 a1
# 给 sources 起名
a1.sources = r1
# 给 sinks 起名
a1.sinks = k1
# 给 channels 起名
a1.channels = c1
# 配置source类型为taildir
a1.sources.r1.type = TAILDIR
# 定义2个 file
a1.sources.r1.filegroups = f1 f2
# 给f1指定监视的文件
a1.sources.r1.filegroups.f1 = /test_flume/1.log
# 给f2 指定监视的文件,支持正则表达式,表示监视该目录下所有 .log 后缀的文件
a1.sources.r1.filegroups.f2 = /test_flume/logs/.*log
# 配置 sink 为打印到控制台中
a1.sinks.k1.type = logger
# 配置 channel 类型为内存
a1.channels.c1.type = memory
# 内存队列最大为1000,可以存储1000个event
a1.channels.c1.capacity = 1000
# 一个事务中从source接收的events数量或发送给sink的events数量最大为100
a1.channels.c1.transactionCapacity = 100
# 将source 和 sink 绑定到channel上
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
启动
进入 flume 根目录:
cd /program/flume-1.9.0/
正常启动
执行下面命令(必须在上面目录中才能执行):
bin/flume-ng agent -n a1 -c conf -f conf/my.conf -Dflume.root.logger=INFO,console
解释:
agent:运行一个 agent-n a1:配置文件中 agent 的名字
-c conf:指定配置目录-f conf/my.conf:指定要运行的配置文件
-Dflume.root.logger=INFO,console:将信息打印到控制台中
后台启动
nohup bin/flume-ng agent -n a1 -c conf -f conf/my.conf -Dflume.root.logger=INFO,console &
执行结果
会打印一大堆信息,看到下面字样,表示启动成功:
测试: 监控 1.log 文件
进入 /test_flume/ 目录
cd /test_flume
修改 /test_flume/1.log 文件:
执行下面命令:
echo lucy >> 1.log
注意: 如果使用 vim ,文件权限的 other 要有 w权限,否则保存后,inode 值会改变
控制台会打印
说明 flume 成功监控到 1.log 文件内容的变化
测试:监控 logs 目录
进入 logs 目录
cd /test_flume/logs/
创建文件
touch a.log
flume控制台打印:
说明监控到该目录有新建文件
修改文件
向文件添加 java,执行下面命令:
echo java >> a.log
flume控制台打印:
说明监控到该文件内容变化




