flume採集日誌到hdfs遇到採集一會不採集
環境4c 4G虛擬機器,上面部署應用業務,flume採集應用日誌,幾乎機器可用記憶體就幾十M,還有4Gswap交換記憶體,硬體環境就這樣,提好幾次新增記憶體,資源有限一直沒加。
之前業務日誌小flume也可以正常採集日誌,但是最近公司flume經常假死,明明程序在資料就是採集不到,之前沒在意。都是重啟後看有日誌,就不管了,第二天一看只採集一個小時就不採集了,苦不堪言,每天都在補資料的路上。配置如下:
#Agent
provider.channels = c1
provider.sources = s1
provider.sinks = k1
#provider Spooling Directory Source
#注(1)
provider.sources.s1.type = exec
provider.sources.s1.shell = /bin/bash -c
provider.sources.s1.command = tail -F /home/logs/test.log
provider.sources.s1.channels = c1
provider.sources.s1.threads = 10
#provider FileChannel
#注(2)
provider.channels.c1.type = file
provider.channels.c1.checkpointDir = /data/logs/test1
provider.channels.c1.dataDirs = /data/logs/test
provider.channels.c1.capacity = 10000000 機器記憶體太小這個不要設定這麼大 10000即可
provider.channels.c1.transactionCapacity = 1000 設定成2000
provider.channels.c1.keep-alive = 30
provider.channels.c1.write-timeout = 30
provider.channels.c1.checkpoint-timeout=600
# provider Sinks
#注(3)
provider.sinks.k1.channel = c1
provider.sinks.k1.type = hdfs
provider.sinks.k1.hdfs.path = hdfs://namespace/hive/warehouse/test.db/ha_his/%Y-%m-%d/%H
provider.sinks.k1.hdfs.filePrefix = app111.log-%Y-%m-%d-%H
#provider.sinks.k1.hdfs.fileSuffix = .gz
provider.sinks.k1.hdfs.fileSuffix = .log
#provider.sinks.k1.hdfs.proxyUser = hadoop
provider.sinks.k1.hdfs.rollSize = 0
provider.sinks.k1.hdfs.rollInterval = 3600
provider.sinks.k1.hdfs.rollCount = 0
provider.sinks.k1.hdfs.batchSize = 100 此值有些小設定1000不能大於transactionCapacity否則flume會報錯
provider.sinks.k1.hdfs.threadsPoolSize = 10
provider.sinks.k1.hdfs.minBlockReplicas = 1
provider.sinks.k1.hdfs.useLocalTimeStamp = true
provider.sinks.k1.hdfs.fileType = DataStream
#provider.sinks.k1.hdfs.fileType = CompressedStream
#provider.sinks.k1.hdfs.codeC = gzip
provider.sinks.k1.hdfs.writeFormat = Text
provider.sinks.k1.hdfs.serializer = TEXT
provider.sinks.k1.hdfs.callTimeout = 120000
provider.sinks.k1.hdfs.hdfs.idleTimeout=3601此值要大於等於rollInterval
配置反覆核查也沒有發覺不妥,為什麼起來兩個程序,其中一個正常採集,另一個就採集不正常,經過這兩天的跟蹤發現是業務日誌每天變大,當flume在日誌超過2G以後重啟flume就不能好好的工作了,好吧,反覆查,這幾天因為加班,0點之後起來發現該flume可以正常採集,為了驗證,我在中午殺掉程序,之後再啟動,又出現採集一會就不採集資料的情況,第二天日誌切割完日誌變小,我在重啟flume發現能很好的執行,定位問題是機器記憶體太小重啟是tail 是從頭開始,導致資料載入記憶體後,把記憶體撐滿,因此flume處於假死狀態,不能好好工作
二是transactionCapacity ,batchSize,capacity設定合理的值。