同时监控多个文件并下沉到hdfs配置的agent:
这种功能应用场景:是对历史文件进行迁移使用,并不适用实时收集场景,只能通过拆分日志实现准实时,而且必须要把要存储的文件扔进被flume监控的文件夹才能被自动监控并发送到hdfs中存储起来。整个文件数据传输完毕后,文件后缀会被更改成后缀为.COMPLETED的文件。此后缀在设置source时可以通过其fileSuffix关键字自定义,默认是COMPLETED
采集源,即source——监控文件目录 : spooldir
下沉目标,即sink——HDFS文件系统 : hdfs sink
source和sink之间的传递通道——channel,可用file channel 也可以用内存channel
配置文件名称:spooldir-memory-hdfs.conf
# Name the components on this agent
spooldir-memory-hdfs.sources = spooldir-source
spooldir-memory-hdfs.sinks = hdfs-sink
spooldir-memory-hdfs.channels = memory-channel
# Describe/configure the source
##注意:不能往监控目中重复丢同名文件
## 通过spooldir来监控文件内容的变化
spooldir-memory-hdfs.sources.spooldir-source.type = spooldir
##监控日志文件所在的目录
spooldir-memory-hdfs.sources.spooldir-source.spoolDir =/usr/logtest
spooldir-memory-hdfs.sources.spooldir-source.fileHeader = true
spooldir-memory-hdfs.sources.spooldir-source.ignorePattern=^(.)*\\.out$
# Describe the sink
## 表示下沉到hdfs,下面配置的类型不同,type下面的参数就不同
spooldir-memory-hdfs.sinks.hdfs-sink.type = hdfs
#sinks.k1只能连接一个channel,source可以配置多个
spooldir-memory-hdfs.sinks.hdfs-sink.channel = memory-channel
#下面的配置告诉用hdfs去写文件的时候写到什么位置,下面的表示不是写死的,而是动态变化的。表示输出的目录名称是可变的
spooldir-memory-hdfs.sinks.hdfs-sink.hdfs.path =hdfs://192.168.32.129:9000/xcx/%y-%m-%d/%H%M/
#表示文件的前缀
spooldir-memory-hdfs.sinks.hdfs-sink.hdfs.filePrefix = xcx-
spooldir-memory-hdfs.sinks.hdfs-sink.hdfs.fileSuffix =.lzo ###存储文件后缀,推荐lzo
spooldir-memory-hdfs.sinks.hdfs-sink.hdfs.codeC=lzo ###压缩格式可选值gzip, bzip2, lzo, lzop, snappy
spooldir-memory-hdfs.sinks.hdfs-sink.hdfs.writeFormat=Text ###书写格式
spooldir-memory-hdfs.sinks.hdfs-sink.hdfs.codeC=lzo ###压缩格式
#表示到了需要触发的时间时,是否要更新文件夹,true:表示要更新
spooldir-memory-hdfs.sinks.hdfs-sink.hdfs.round = true
##表示每隔10分钟改变一下文件夹
spooldir-memory-hdfs.sinks.hdfs-sink.hdfs.roundValue = 10
##切换文件的时候单位是分钟
spooldir-memory-hdfs.sinks.hdfs-sink.hdfs.roundUnit = minute
##表示只要过了3秒钟,就切换生成一个新的文件
##spooldir-memory-hdfs.sinks.hdfs-sink.hdfs.rollInterval = 3
##如果记录的文件大于200(字节)时切换一次
spooldir-memory-hdfs.sinks.hdfs-sink.hdfs.rollSize = 200
##当写了5个事件时触发,如果让此项失效,设置为0
spooldir-memory-hdfs.sinks.hdfs-sink.hdfs.rollCount = 5
##收到了多少条消息往hdfs中追加内容
spooldir-memory-hdfs.sinks.hdfs-sink.hdfs.batchSize = 1
#使用本地时间戳
spooldir-memory-hdfs.sinks.hdfs-sink.hdfs.useLocalTimeStamp = true
# Use a channel which buffers events in memory
##使用内存的方式
spooldir-memory-hdfs.channels.memory-channel.type = memory
spooldir-memory-hdfs.channels.memory-channel.capacity = 1000
spooldir-memory-hdfs.channels.memory-channel.transactionCapacity = 100
# Bind the source and sink to the channel
spooldir-memory-hdfs.sources.spooldir-source.channels = memory-channel
spooldir-memory-hdfs.sinks.hdfs-sink.channel = memory-channel
屏蔽无需flume监控的文件
在传输新文件到监控的文件夹时,需要让Spooing Directory Source忽略这个正在传输的文件,等传输完毕后在触发。可以使用ignorePattern属性来避免。
spooldir-memory-hdfs.sources.spooldir-source.ignorePattern=^(.)*\\.out$
临时方式启动:
bin/flume-ng agent --conf $FLUME_HOME/conf --conf-file $FLUME_HOME/conf/spooldir-memory-hdfs.conf --name spooldir-memory-hdfs -Dflume.root.logger=INFO,console
后台方式启动:
nohup bin/flume-ng agent --conf $FLUME_HOME/conf --conf-file $FLUME_HOME/conf/spooldir-memory-hdfs.conf --name spooldir-memory-hdfs &
改动文件后flume监控的目录下文件都会
扔了之后,现象是
1、/usr/logtest/文件夹下的文件加了一个后缀.COMPLETED