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中的数据


posted @ 2021-10-14 11:27  jason47  阅读(151)  评论(0编辑  收藏  举报