flume采集日志到hdfs遇到采集一会不采集

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haoxiaoyan/article/details/85162790

环境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设置合理的值。

猜你喜欢

转载自blog.csdn.net/haoxiaoyan/article/details/85162790