在配置文件中使用环境变量
Flume能够替换配置文件中的环境变量。例如:
a1.sources = r1
a1.sources.r1.type = netcat
a1.sources.r1.bind = 0.0.0.0
a1.sources.r1.port = ${NC_PORT}
a1.sources.r1.channels = c1
注意:目前仅适用于值,不适用于健。(仅在配置行=号的右侧)
这可以通过设置java系统属性propertiesImplementation = org.apache.flume.node.EnvVarResolverProperties来启用这个功能。
例如:
$ NC_PORT=44444 bin/flume-ng agent –conf conf –conf-file example.conf –name a1 -Dflume.root.logger=INFO,console -DpropertiesImplementation=org.apache.flume.node.EnvVarResolverProperties
上面只是一个例子,环境变量可以通过其他方式配置,包括配置在conf/flume-env.sh中。
记录原始数据
在许多生产环境中,记录流过管道的原始数据流是不被希望的行为,因为这可能会造成敏感数据的泄露或安全相关配置的泄漏(例如密钥),泄漏到Flume的日志文件中。通常,Flume不会记录这些信息。另一方面,如果数据管道被破坏,Flume将会尝试提供调试问题的线索。
调试事件管道的问题的一种方法是设置一个额外的内存channel连接到日志sink,这将会输出所有的日志数据到Flume日志。然而,在某些情况下,这是不够的。
为了能够记录事件和配置相关的数据,一些java系统属性必须添加在log4j的属性文件中。
为了启动配置相关的日志记录,设置java系统属性-Dorg.apache.flume.log.printconfig=true
,可以通过在命令行或者在flume-env.sh文件的JAVA_OPTS
变量中设置。
为了启动数据记录,通过上面描述的方法设置java系统属性-Dorg.apache.flume.log.rawdata=true
。对于大多数的组件,还必须把log4j的日志记录级别设置为DEBUG或TRACE来使特定事件的日志出现在Flume日志中。
这有一个例子启动了所有配置记录和原始数据记录,同时还设置了log4j的日志记录级别为DEBUG用于控制台输出:
$ bin/flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=DEBUG,console -Dorg.apache.flume.log.printconfig=true -Dorg.apache.flume.log.rawdata=true
Zookeeper的基础配置
Flume通过Zookeeper支持代理配置。这是一个实验性的功能。配置文件需要在可配置前缀下的zookeeper中上传。配置文件存储在zookeeper节点数据中。下面是代理a1和a2在zookeeper节点树中的表现:
- /flume
|- /a1 [Agent config file]
|- /a2 [Agent config file]
配置文件上传后,可以通过如下选项启动代理:
$ bin/flume-ng agent –conf conf -z zkhost:2181,zkhost1:2181 -p /flume –name a1 -Dflume.root.logger=INFO,console
z – Zookeeper connection string. Comma separated list of hostname:port
p /flume Base Path in Zookeeper to store Agent configurations
安装第三方插件
Flume有完成基于插件的架构。虽然Flume携带了许多开箱即用的sources、channels、sinks、serializers,但是许多的实现都Flume分开运行。
虽然通过将jars添加到flume-env.sh的FLUME_CLASSPATH变量中,可以始终包含自定义Flume组件,但Flume现在支持一个名为plugins.d的特殊目录,该目录会自动获取以特定格式打包的插件。这样可以更轻松地管理插件打包问题,以及更简单的调试和几类问题的故障排除,尤其是库依赖性冲突。
plugins.d目录
plugins.d目录位于$FLUME_HOME/plugins.d中。在启动时,flume-ng脚本从plugins.d目录中查找符合下列格式的插件,在启动java时将它们包含着正确的路径中。
插件的目录布局
plugins.d中的每个插件(子目录)最多可以有三个子目录:
- lib - 插件的jars
- libext - 插件的依赖jars
- native - 任何必需的本机库,例如.so文件
plugins.d目录中的两个插件示例:
plugins.d/
plugins.d/custom-source-1/
plugins.d/custom-source-1/lib/my-source.jar
plugins.d/custom-source-1/libext/spring-core-2.5.6.jar
plugins.d/custom-source-2/
plugins.d/custom-source-2/lib/custom.jar
plugins.d/custom-source-2/native/gettext.so
数据摄取
Flume支持许多从外部源获取数据的机制。
RPC
Flume发行版中包含的Avro客户端可以使用avro RPC机制将给定文件发送到Flume Avro source:
$ bin / flume-ng avro-client -H localhost -p 41414 -F /usr/logs/log.10
上面的命令会将/usr/logs/log.10的内容发送到监听该端口的Flume source。
执行命令
exec source执行给定的命令并消耗输出。输出的单个“线”,即文本后跟回车符(’\ r’)或换行符(’\ n’)或两者一起。
网络流
Flume支持以下机制从常用日志流类型中读取数据,例如:
- Avro
- Thrift
- Syslog
- Netcat