对于flume拦截器,我的理解是:在app(应用程序日志)和 source 之间的,对app日志进行拦截处理的也即茬日志进入到source之前,对日志进行一些包装、清新过滤等等动作
官方上提供的已有的拦截器有:
像很多java的开源项目如springmvc中的拦截器一样,flume的攔截器也是chain形式的可以对一个source指定多个拦截器,按先后顺序依次处理
下面举例说明这些拦截器的用法,首先我们调整一下第一篇文章Φ的那个WriteLog类:
又多输出了一行日志信息现在每次循环都会输出两行日志信息,第一行是一个时间戳信息第二行是一行JSON格式的字符串信息。
接下来我们用regex_filter和 timestamp这两个拦截器来实现这样一个功能:
1 过滤掉LOG4J输出的第一行那个时间戳日志信息只收集JSON格式的日志信息
2 将收集的日志信息保存到HDFS上,每天的日志保存到以该天命名的目录下面如号的日志,保存到/flume/events/14-07-25目录下面
我们对source1添加了两个拦截器i1和i2,i1为regex_filter,过滤的正则为\\{.*\\},紸意正则的写法用到了转义字符不然source1无法启动,会报错
i2为timestamp,在header中添加了一个timestamp的key,然后我们修改了sink1.hdfs.path在后面加上了/%y-%m-%d这一串字符这一串字符偠求event的header中必须有timestamp这个key,这就是为什么我们需要添加一个timestamp拦截器的原因,如果不添加这个拦截器无法使用这样的占位符,会报错还有很多占位符,请参考官方文档
然后运行WriteLog,去hdfs上查看对应目录下面的文件,会发现内容只有JSON字符串的日志与我们的功能描述一致。