日志收集是互联网公司的一个重要服务,Flume NG是Apache的顶级项目,是分布式日志收集服务的一个开源实现,具有良好的扩展性,与其他很多开源组件可以无缝集成。搜了一圈发现介绍Flume NG的文章有不少,但是深入分析Flume NG源代码的却没有。准备写一个系列分析一下Flume NG的源码。先从基础的配置模块说起。
Flume NG支持两种配置模式,一种是基于properties文件的静态配置,并且只加载一次。另一种是基于Guava EventBus发布订阅模式的动态配置,可运行时加载修改的配置。这篇先说说基于properties文件的静态配置。
下面这个是flume-conf.properties的一个常见配置
1. producers是agent的名字,一个agent表示一个Flume-NG的进程
2. producer.sources指定了这个agent监控的几个日志源,可以配置多个source
3. producer.channels, sinks指定了channel和sink,这些概念后面会说
4. producer.sources.sX.XXX指定了日志源获取的方式,对于从本地日志文件收集的方式来说,实际使用的是tail -F的命令来监控日志文件的尾部
producer.sources = s1 s2 s3
producer.channels = c
producer.sinks = r
producer.sources.s1.type = exec
producer.sources.s1.channels = c
producer.sources.s1.command = tail -F /data/logs/s1.log
producer.sources.s2.type = exec
producer.sources.s2.channels = c
producer.sources.s2.command = tail -F /data/logs/s2.log
producer.sources.s3.type = exec
producer.sources.s3.channels = c
producer.sources.s3.command = tail -F /data/logs/s3.log
producer.sinks.r.type = org.apache.flume.plugins.KafkaSink
producer.sinks.r.metadata.broker.list=server1:9092,server2:9092,server3:9092
producer.sinks.r.zk.connect=server1:2181,server2:2181,server3:2181,server4:2181,server5:2181
producer.sinks.r.partition.key=0
producer.sinks.r.partitioner.class=org.apache.flume.plugins.SinglePartition
producer.sinks.r.serializer.class=kafka.serializer.StringEncoder
producer.sinks.r.request.required.acks=0
producer.sinks.r.max.message.size=1000000
producer.sinks.r.producer.type=sync
producer.sinks.r.custom.encoding=UTF-8
producer.sinks.r.custom.topic.name=topic.xxx
#Specify the channel the sink should use
producer.sinks.r.channel = c
# Each channel's type is defined.
producer.channels.c.type = memory
producer.channels.c.capacity = 1000
再看看如何指定的producer这个agent名字以及指定采用哪个配置文件,下面是Flume NG的启动命令,-f指定了配置文件的路径,-n指定了agent的名字,也就是flume-conf.properties里面每项配置的前缀名