flume source
from:https://www.cnblogs.com/itdyb/p/6266789.html
Source详解
现在介绍几种比较重要的Source
Avro Source
Spooling Directory Source
NetCat Source
HTTP Source
Exec Source
4.1. Avro Source
监听AVRO端口来接受来自外部AVRO客户端的事件流。利用Avro Source可以实现多级流动、扇出流、扇入流等效果。另外也可以接受通过flume提供的Avro客户端发送的日志信息。
4.1.1. Avro Source属性说明
!channels –
!type – 类型名称,"AVRO"
!bind – 需要监听的主机名或IP
!port – 要监听的端口
threads – 工作线程最大线程数
selector.type
selector.*
interceptors – 空格分隔的拦截器列表
interceptors.*
compression-type none 压缩类型,可以是“none”或“default”,这个值必须和AvroSource的压缩格式匹配
sslfalse 是否启用ssl加密,如果启用还需要配置一个“keystore”和一个“keystore-password”。
keystore – 为SSL提供的java密钥文件所在路径。
keystore-password– 为SSL提供的java密钥文件 密码。
keystore-typeJKS密钥库类型可以是“JKS”或“PKCS12”。
exclude-protocolsSSLv3 空格分隔开的列表,用来指定在SSL / TLS协议中排除。SSLv3将总是被排除除了所指定的协议。
ipFilter false 如果需要为netty开启ip过滤,将此项设置为true
ipFilterRules– 定义netty的ip过滤设置表达式规则
案例:
编写配置文件 修改上面给出的配置文件,除了Source部分配置不同,其余部分都一样。不同的地方如下:
1
2
3
4
|
#描述/配置Source a1.sources.r1. type = avro a1.sources.r1.bind = 0.0.0.0 a1.sources.r1.port = 44444 |
启动flume:
./flume-ng agent --conf ../conf --conf-file ../conf/template2.conf --name a1 -Dflume.root.logger=INFO,console
通过flume提供的avro客户端向指定机器指定端口发送日志信息:
./flume-ng avro-client --conf ../conf --host 0.0.0.0 --port 44444 --filename ../mydata/log1.txt
会发现确实收集到日志
4.2. Spooling Directory Source
这个Source允许你将将要收集的数据放置到"自动搜集"目录中,这个Source将监视该目录,并将解析新文件的出现。
事件处理逻辑是可插拔的,当一个文件被完全读入通道,它会被重命名或可选的直接删除。
放置到自动搜集目录下的文件不能修改,如果修改,则flume会报错。另外,也不能产生重名的文件,如果有重名的文件被放置进来,则flume会报错。
如果以追加的方式向已被处理的文件中添加内容,source并不能识别
目录下不可包含相应的子目录,即无法监控子目录的文件夹变动
!channels –
!type – 类型,需要指定为"spooldir"
!spoolDir – 读取文件的路径,即"搜集目录"
fileSuffix.COMPLETED对处理完成的文件追加的后缀
案例:
编写配置文件 修改上面给出的配置文件,除了Source部分配置不同,其余部分都一样。不同的地方如下:
1
2
3
|
#描述/配置Source a1.sources.r1. type = spooldir a1.sources.r1.spoolDir= /home/park/work/apache-flume-1 .6.0-bin /mydata |
启动flume:
./flume-ng agent --conf ../conf --conf-file ../conf/template4.conf --name a1 -Dflume.root.logger=INFO,console
向指定目录中传输文件,发现flume收集到了该文件,将文件中的每一行都作为日志来处理
4.3. NetCat Source
一个NetCat Source用来监听一个指定端口,并将接收到的数据的每一行转换为一个事件。
4.3.1. NetCat Source属性说明
!channels–
!type– 类型名称,需要被设置为"netcat"
!bind– 指定要绑定到的ip或主机名。
!port– 指定要绑定到的端口号
max-line-length 512单行最大字节数
案例:上面完整的例子即是
4.4. HTTP Source
HTTP Source接受HTTP的GET和POST请求作为Flume的事件,其中GET方式应该只用于试验。
该Source需要提供一个可插拔的"处理器"来将请求转换为事件对象,这个处理器必须实现HTTPSourceHandler接口,该处理器接受一个 HttpServletRequest对象,并返回一个Flume Envent对象集合。
从一个HTTP请求中得到的事件将在一个事务中提交到通道中。因此允许像文件通道那样对通道提高效率。
如果处理器抛出一个异常,Source将会返回一个400的HTTP状态码。
如果通道已满,无法再将Event加入Channel,则Source返回503的HTTP状态码,表示暂时不可用。
4.4.1. HTTP Source属性说明
!type 类型,必须为"HTTP"
!port– 监听的端口
bind 0.0.0.0 监听的主机名或ip
handler org.apache.flume.source.http.JSONHandler处理器类,需要实现HTTPSourceHandler接口
handler.* – 处理器的配置参数
selector.type
selector.*
interceptors –
interceptors.*
enableSSL false 是否开启SSL,如果需要设置为true。注意,HTTP不支持SSLv3。
excludeProtocols SSLv3 空格分隔的要排除的SSL/TLS协议。SSLv3总是被排除的。
keystore 密钥库文件所在位置。
keystorePassword Keystore 密钥库密码
案例:
编写配置文件 修改上面给出的配置文件,除了Source部分配置不同,其余部分都一样。不同的地方如下:
1
2
3
|
#描述/配置Source a1.sources.r1. type = http a1.sources.r1.port = 66666 |
启动flume:
./flume-ng agent --conf ../conf --conf-file ../conf/template6.conf --name a1 -Dflume.root.logger=INFO,console
通过命令发送HTTP请求到指定端口:
curl -X POST -d '[{ "headers" :{"a" : "a1","b" : "b1"},"body" : "hello~http~flume~"}]' http://0.0.0.0:6666
4.5 Exec Source (from https://blog.csdn.net/a_drjiaoda/article/details/84954593)
监听一个指定的命令,获取一条命令的结果作为它的数据源,source组件从这个命令的结果中取数据。常用的是tail -F 【file】指令,即只要应用程序向日志(文件)里面写数据,source组件就可以获取到日志(文件)中最新的内容 ,EXEC执行一个给定的命令获得输出的源,如果要使用tail命令,必选使得file足够大才能看到输出内容
1、添加配置文件内容 cd /usr/flume/conf 在conf目录下新建exec.conf ,vi exec.conf
#example.conf: A single-node flume configuration #It is Just for test flume exec Example #Name the components on this agent a1.sources = r1 a1.sinks = k1 a1.channels = c1 #配置source a1.sources.r1.type = exec a1.sources.r1.command = tail -F /var/log/nginx/access.log a1.sources.r1.channels = c1 #Describe the sink a1.sinks.k1.type = logger #use a channel which buffers events in memory a1.channels.c1.type = memory a1.channels.c1.capacity = 1000 a1.channels.c1.transactionCapacity = 100 #Bind the source and sink to the channel a1.sources.r1.channels = c1 a1.sinks.k1.channel = c1
2、启动。使用命令,启动flume agent
[root@master ~]# flume-ng agent -n a1 -c /usr/flume/conf/ -f /usr/flume/conf/exec.conf -Dflume.root.logger=INFO,console
3、 成功启动之后,如下所示,系统程序界面会一直处于监控状态,监控该命令下文件是否出现变动,从上面的日志信息可以看出,相关组件进程均已成功启动。
4、如果要使用tail命令,必选使得file足够大才能看到输出内容,因此为了让agent界面能够监控到tail之后的结果,我们往监控的文件中循环插入100条数据:
5、查看agent中的数据