flume学习(三):Flume Interceptors的使用
来源:互联网 发布:软件测试 招聘 编辑:程序博客网 时间:2024/06/05 15:30
1、如何理解flume拦截器?
2、如何使用regex_filter和 timestamp这两个拦截器来实现一个较强的功能?
3、怎样为source1添加了两个拦截器?
对于flume拦截器,我的理解是:在app(应用程序日志)和 source 之间的,对app日志进行拦截处理的。也即在日志进入到source之前,对日志进行一些包装、清新过滤等等动作。
官方上提供的已有的拦截器有:
像很多java的开源项目如springmvc中的拦截器一样,flume的拦截器也是chain形式的,可以对一个source指定多个拦截器,按先后顺序依次处理。
Timestamp Interceptor :在event的header中添加一个key叫:timestamp,value为当前的时间戳。这个拦截器在sink为hdfs 时很有用,后面会举例说到
Host Interceptor:在event的header中添加一个key叫:host,value为当前机器的hostname或者ip。
Static Interceptor:可以在event的header中添加自定义的key和value。
Regex Filtering Interceptor:通过正则来清洗或包含匹配的events。
Regex Extractor Interceptor:通过正则表达式来在header中添加指定的key,value则为正则匹配的部分
下面举例说明这些拦截器的用法,首先我们调整一下第一篇文章中的那个WriteLog类:
又多输出了一行日志信息,现在每次循环都会输出两行日志信息,第一行是一个时间戳信息,第二行是一行JSON格式的字符串信息。
接下来我们用regex_filter和 timestamp这两个拦截器来实现这样一个功能:
1 过滤掉LOG4J输出的第一行那个时间戳日志信息,只收集JSON格式的日志信息
2 将收集的日志信息保存到HDFS上,每天的日志保存到以该天命名的目录下面,如2014-7-25号的日志,保存到/flume/events/14-07-25目录下面。
修改后的flume.conf如下:
我们对source1添加了两个拦截器i1和i2,i1为regex_filter,过滤的正则为\\{.*\\},注意正则的写法用到了转义字符,不然source1无法启动,会报错。
i2为timestamp,在header中添加了一个timestamp的key,然后我们修改了sink1.hdfs.path在后面加上了/%y-%m-%d这一串字符,这一串字符要求event的header中必须有timestamp这个key,这就是为什么我们需要添加一个timestamp拦截器的原因,如果不添加这个拦截器,无法使用这样的占位符,会报错。还有很多占位符,请参考官方文档。
flume学习(一):log4j直接输出日志到flume
flume学习(二):如何找到cm安装的flume的配置文件
flume学习(四):Flume Channel Selectors使用
2、如何使用regex_filter和 timestamp这两个拦截器来实现一个较强的功能?
3、怎样为source1添加了两个拦截器?
对于flume拦截器,我的理解是:在app(应用程序日志)和 source 之间的,对app日志进行拦截处理的。也即在日志进入到source之前,对日志进行一些包装、清新过滤等等动作。
官方上提供的已有的拦截器有:
像很多java的开源项目如springmvc中的拦截器一样,flume的拦截器也是chain形式的,可以对一个source指定多个拦截器,按先后顺序依次处理。
Timestamp Interceptor :在event的header中添加一个key叫:timestamp,value为当前的时间戳。这个拦截器在sink为hdfs 时很有用,后面会举例说到
Host Interceptor:在event的header中添加一个key叫:host,value为当前机器的hostname或者ip。
Static Interceptor:可以在event的header中添加自定义的key和value。
Regex Filtering Interceptor:通过正则来清洗或包含匹配的events。
Regex Extractor Interceptor:通过正则表达式来在header中添加指定的key,value则为正则匹配的部分
下面举例说明这些拦截器的用法,首先我们调整一下第一篇文章中的那个WriteLog类:
又多输出了一行日志信息,现在每次循环都会输出两行日志信息,第一行是一个时间戳信息,第二行是一行JSON格式的字符串信息。
接下来我们用regex_filter和 timestamp这两个拦截器来实现这样一个功能:
1 过滤掉LOG4J输出的第一行那个时间戳日志信息,只收集JSON格式的日志信息
2 将收集的日志信息保存到HDFS上,每天的日志保存到以该天命名的目录下面,如2014-7-25号的日志,保存到/flume/events/14-07-25目录下面。
修改后的flume.conf如下:
我们对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字符串的日志,与我们的功能描述一致。
转自:
http://www.aboutyun.com/thread-9503-1-1.html
原文来自:
http://blog.csdn.net/xiao_jun_0820/article/details/38110323
flume学习(一):log4j直接输出日志到flume
flume学习(二):如何找到cm安装的flume的配置文件
flume学习(四):Flume Channel Selectors使用
0 0
- flume学习(三):Flume Interceptors的使用
- flume学习(三):Flume Interceptors的使用
- flume学习(三):Flume Interceptors的使用
- flume学习:Flume Interceptors的使用
- flume学习(四):Flume Interceptors的使用
- Flume学习(四):Flume Interceptors的使用
- flume学习(四):Flume Interceptors的使用
- flume学习(四):Flume Interceptors的使用
- Flume Interceptors的使用
- Flume Interceptors的使用
- Flume Interceptors
- flume学习(三)
- flume七:Flume Interceptors介绍
- flume-ng interceptors
- 7.Flume Interceptors
- flume学习(五):Flume Channel Selectors使用
- Flume学习(五):Flume Channel Selectors使用
- flume学习(四):Flume Channel Selectors使用
- 自制JAVA容器图
- 做Maximum Subsequence Sum感想
- 使用Three.js + Blender构建在浏览器端显示的3D模型(2)
- c# 文本框限制输入仅为数字,小数点,退格键
- Caffe学习:pycaffe利用caffemodel进行分类=>批处理
- flume学习(三):Flume Interceptors的使用
- [LeetCode]Perfect Squares
- Java抽象类和接口的区别
- 使用Three.js + Blender构建在浏览器端显示的3D模型(3)
- 快速掌握正则表达式
- UGUI实现血条跟随
- 学习笔记 - BufferedReader包装FileReader读取文本文件
- Python函数:装饰器
- openmeetings3.0.x 源码编译+改造