拦截器可以在source之后或者sink之前加入。
往source上添加拦截器:
agent.sources.s1.interceptors=i1 i2 i3
定义三个拦截器,i1,i2和i3.i2将接收i1的输出,i3将接收i2的输出,channel选择器接收i3的输出。
Timestamp拦截器
在header中不存在timestamp时添加该属性:
agent.sources.s1.interceptors=i1
agent.sources.s1.interceptors.i1.type=timestamp
agent.sources.s1.interceptors.i1.preserveExisting=true
Host拦截器
想在header中添加一个relayHost的key,通过DNS反向查找得到的hostname的value值:
agent.sources.s1.interceptors=i1
agent.sources.s1.interceptors.i1.type=host
agent.sources.s1.interceptors.i1.hostHeader=relayHost
agent.sources.s1.interceptors.i1.useIP=false
static拦截器
用来往经过的所有Flumeevent的header中插入单个任何形式的key/value的。
假设在先前不存在这两个值的情况下插入两个新的header值得例子:
agent.sources.s1.interceptors=pos env
agent.sources.s1.interceptors.pos.type=static
agent.sources.s1.interceptors.pos.key=pointOfSale
agent.sources.s1.interceptors.pos.value=US
agent.sources.s1.interceptors.env.type=static
agent.sources.s1.interceptors.env.key=environment
agent.sources.s1.interceptors.value=staging
正则表达式过滤拦截器
任何包含“NullPointerException”字符串的event都会被丢弃掉
agent.sources.s1.interceptors=npe
agent.sources.s1.interceptors.npe.type=regex_filter
agent.sources.s1.interceptors.npe.regex=NullPointerException
agent.sources.s1.interceptors.excludeEvents=true
正则表达式提取拦截器
自定义拦截器
最常见的串联Flumeagent的方式是配对使用Avro Source和Sink
要使用AvroSource,需要设置type为avro,指定坚挺的额地址和端口号:
collector.sources=av1
collector.sources.av1.type=avro
collector.sources.av1.bind=0.0.0.0
collector.sources.av1.port=42424
collector.sources.av1.channels=ch1
collector.channels=ch1
collector.channels.ch1.type=memory
collector.sinks=k1
collector.sinks.k1.type=hdfs
collector.sinks.k1.channel=ch1
collector.sinks.hdfs.path=/path/in/hdfs
agent将监听42424端口,使用内存channel,然后写数据到HDFS中。
综合案例:捕获所有HDFS的异常,event来自于Avro Source s1监听的端口42424,Event被检测是否内容中包含“Exception”。如果包含了,就在event的header中创建一个名为“exception”的key,将这些event选择进入channel c1中,最后写入HDFS中。如果没有匹配这个正则表达式,传输到默认的channel c2中。将通过Avro序列化传输到服务器foo.example.com的端口12345中去。
agent.sources=s1
agent.sources.s1.type=avro
agent.sources.s1.bind=0.0.0.0
agent.sources.s1.port=42424
agent.sources.s1.interceptors=i1
agent.sources.s1.interceptors.i1.type=regex_extractor
agent.sources.s1.interceptors.i1.regex=(Exception)
agent.sources.s1.interceptors.i1.serializers=ex
agent.sources.s1.interceptors.i1.serializers.ex.name=exception
agent.sources.s1.selector.type=multiplexing
agent.sources.s1.selector.header=exception
agent.sources.s1.selector.mapping.Exception=c1
agent.sources.s1.selector.default=c2
agent.channels=c1 c2
agent.channels.c1.type=memory
agent.channels.c2.type=memory
agent.sinks=k1 k2
agent.sinks.k1.type=hdfs
agent.sinks.k1.channel=c1
agent.sinks.k1.hdfs.path=/logs/exceptions/%Y%/%M%/%d%/%H%
agent.sinks.k2.type=avro
agent.sinks.k2.channel=c2
agent.sinks.k2.hostname=foo.example.com
agent.sinks.k2.port=12345