4 Flume的配置
4.1在配置文件中使用环境变量
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 |
注意:只适用于value,不适用于key。也就是说如果使用变量,变量只能出现在配置文件中每个属性行的“=”的右侧。
在启动agent的时候,可以通过设置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中设置。
1、可以在配置文件中使用变量,变量只能出现在配置的value中。 2、配置文件中的变量有多种配置方式:可以在agent启动的时候传入变量的值,并使用propertiesImplementation = org.apache.flume.node.EnvVarResolverProperties属性来调用。也可以直接在conf/flume-env.sh中设置。 |
4.2记录原始数据
记录原始数据流(通过ingest pipeline)在许多生产环境中不是理想的行为,因为这可能会导致将敏感数据或安全相关配置(如密钥)泄露到Flume日志文件。默认情况下,Flume不会记录这些信息。另一方面,如果数据管道(data pipeline)被破坏,Flume将尝试提供调试问题的线索。
调试事件channel问题的一种方法是设置一个连接到Logger Sink的Memory Channel,它将输出所有事件数据到Flume日志。但是在某些情况下,这种方法是不够的。
为了启用事件和配置相关数据的日志记录,除了log4j属性之外,还必须设置一些Java系统属性。要启用与配置相关的日志记录,请设置Java系统属性 -Dorg.apache.flume.log.printconfig = true。这可以通过命令行传递,也可以通过在flume-env.sh中的JAVA_OPTS变量中设置。
要启用数据记录,请按照上述相同的方式设置Java系统属性-Dorg.apache.flume.log.rawdata = true。对于大多数组件,log4j日志记录级别还必须设置为DEBUG或TRACE,以使特定于事件的日志记录显示在Flume日志中。
以下是启用配置日志记录和原始数据日志记录的示例,同时还将Log4j loglevel设置为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 |
1、flume允许记录原始数据,允许启用与配置相关的日志记录。 2、要记录原始数据,一种方法是配置一个Logger sink,让它连接到memory channel。另一种方法是配置Java的系统属性-Dorg.apache.flume.log.rawdata = true。 3、要记录与配置相关的信息,一种是配置一个Logger sink,和记录原始数据的第一种方法相同,另一种是配置Java的系统属性-Dorg.apache.flume.log.printconfig = true。 4、通过配置参数的方式记录数据,可以在agent启动的时候传入,也可以直接在flume-env.sh中设置JAVA_OPTS变量。 5、日志输出的级别是可以调的。比如设置log4j的日志记录级别为DEBUG或TRACE。 |
4.3基于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的连接地址,使用hostname:port的方式,逗号分割。 |
p | /flume | 在ZooKeeper上面存储agent配置的根路径 |
使用ZooKeeper来存储Flume的配置文件是一个实验功能。 |
4.4安装第三方插件
Flume拥有完全基于插件的架构。虽然Flume带有许多开箱即用的source,channel,sink,serializer等,但仍然存在许多与Flume分开发布的实现。这些实现需要你自己来实现。
尽管通过在Flume-env.sh文件中将它们的jar添加到FLUME_CLASSPATH变量中可以包含自定义的Flume组件,但Flume现在支持一个名为plugins.d的特殊目录,它可以自动获取以特定格式打包的插件。这样可以更轻松地管理插件打包问题,以及简化几类问题的调试和故障排除,特别是库依赖性冲突。
该plugins.d目录位于$ FLUME_HOME / plugins.d。启动时,flume-ng start脚本在plugins.d目录中查找符合以下格式的插件,并在启动java时将它们包含在适当的路径中。
plugins.d中的每个插件(子目录)最多可以有三个子目录:
lib - 插件的 jar(s)文件
libext - 插件的依赖 jar(s)文件
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 |
1、当Flume提供的source、channel和sink不能满足你的要求时,你可以自己实现相应的组件。 2、使用自定义组件,有两种方式,一种是将jar文件添加到FLUME_CLASSPATH变量中。另一种是将jar文件放入名称为plugins.d的目录中。最好使用第二种方式。 3、plugins.d目录有特定的结构。它的子文件夹是组件的名称。在组件的这个文件夹下面,最多有三个文件夹,一个名称为lib,存放组件的jar,一个名称为libext,存放jar的依赖,一个为native,存放任何需要的本地库文件。 |
4.5数据输入
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源。
执行命令:
有一个exec source执行给定的命令并消费输出。一个单一的“输出线”,即。文本后跟回车符('\ r')或换行符('\ n')或者两者一起。
网络流:
Flume支持以下机制从常见日志流类型中读取数据,例如Avro,Thrift,Syslog,NetCat。
设置多级agent流
为了使数据在多个agent或hop之间流动,前一个agent的sink和当前hop的source必须是avro类型,其中sink指向source的主机名(或IP地址)和端口。
1Flume支持多种机制获得数据。比如RPC、exec、Avro、Thrift、Syslog、NetCat等等。 2如果有多个agent,那么前一个agent的sink和后一个agent的source必须是avro类型。 |