同時(shí)監(jiān)控多個(gè)文件并下沉到hdfs配置的agent:
這種功能應(yīng)用場景:是對歷史文件進(jìn)行遷移使用,并不適用實(shí)時(shí)收集場景,只能通過拆分日志實(shí)現(xiàn)準(zhǔn)實(shí)時(shí),而且必須要把要存儲的文件扔進(jìn)被flume監(jiān)控的文件夾才能被自動監(jiān)控并發(fā)送到hdfs中存儲起來。整個(gè)文件數(shù)據(jù)傳輸完畢后,文件后綴會被更改成后綴為.COMPLETED的文件。此后綴在設(shè)置source時(shí)可以通過其fileSuffix關(guān)鍵字自定義,默認(rèn)是COMPLETED
采集源,即source——監(jiān)控文件目錄 : spooldir
下沉目標(biāo),即sink——HDFS文件系統(tǒng) : hdfs sink
source和sink之間的傳遞通道——channel,可用file channel 也可以用內(nèi)存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
##注意:不能往監(jiān)控目中重復(fù)丟同名文件
## 通過spooldir來監(jiān)控文件內(nèi)容的變化
spooldir-memory-hdfs.sources.spooldir-source.type = spooldir
##監(jiān)控日志文件所在的目錄
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下面的參數(shù)就不同
spooldir-memory-hdfs.sinks.hdfs-sink.type = hdfs
#sinks.k1只能連接一個(gè)channel,source可以配置多個(gè)
spooldir-memory-hdfs.sinks.hdfs-sink.channel = memory-channel
#下面的配置告訴用hdfs去寫文件的時(shí)候?qū)懙绞裁次恢?,下面的表示不是寫死的,而是動態(tài)變化的。表示輸出的目錄名稱是可變的
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? ###壓縮格式
#表示到了需要觸發(fā)的時(shí)間時(shí),是否要更新文件夾,true:表示要更新
spooldir-memory-hdfs.sinks.hdfs-sink.hdfs.round = true
##表示每隔10分鐘改變一下文件夾
spooldir-memory-hdfs.sinks.hdfs-sink.hdfs.roundValue = 10
##切換文件的時(shí)候單位是分鐘
spooldir-memory-hdfs.sinks.hdfs-sink.hdfs.roundUnit = minute
##表示只要過了3秒鐘,就切換生成一個(gè)新的文件
##spooldir-memory-hdfs.sinks.hdfs-sink.hdfs.rollInterval = 3
##如果記錄的文件大于200(字節(jié))時(shí)切換一次
spooldir-memory-hdfs.sinks.hdfs-sink.hdfs.rollSize = 200
##當(dāng)寫了5個(gè)事件時(shí)觸發(fā),如果讓此項(xiàng)失效,設(shè)置為0
spooldir-memory-hdfs.sinks.hdfs-sink.hdfs.rollCount = 5
##收到了多少條消息往hdfs中追加內(nèi)容
spooldir-memory-hdfs.sinks.hdfs-sink.hdfs.batchSize = 1
#使用本地時(shí)間戳
spooldir-memory-hdfs.sinks.hdfs-sink.hdfs.useLocalTimeStamp = true
# Use a channel which buffers events in memory
##使用內(nèi)存的方式
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監(jiān)控的文件
在傳輸新文件到監(jiān)控的文件夾時(shí),需要讓Spooing Directory Source忽略這個(gè)正在傳輸?shù)奈募?,等傳輸完畢后在觸發(fā)??梢允褂胕gnorePattern屬性來避免。
spooldir-memory-hdfs.sources.spooldir-source.ignorePattern=^(.)*\\.out$
臨時(shí)方式啟動:
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監(jiān)控的目錄下文件都會
扔了之后,現(xiàn)象是?
1、/usr/logtest/文件夾下的文件加了一個(gè)后綴.COMPLETED
