环境简介
- JDK1.7.0_79
- Flume1.6.0
- Elasticsearch1.7.3
ES的安装和配置
这里不做重点介绍,请参考之前关于ES的文章
Flume整合ES的相关配置
flume_collector_es1.conf配置文件
|
|
然后我们先启动ES,然后再启动Flume来收集command.log日志并且写入到ES。
Flume启动报错
如果启动Flume的时候,报如下的错误,说明缺少ES相关依赖的jar包。需要将${ES_HOME}/lib/lucene-core-4.10.4.jar,${ES_HOME}/lib/elasticsearch-1.7.3.jar这两个包复制到${FLUME_HOME}/lib/下
|
|
日志解析问题
当command.log有日志不断输出时,我们会看到Flume控制台会不断收集到ES,但是在ES端查询command_index的mapping却和我们想象的mapping不太一样,这里我们需要解析command.log日志中的日志格式,将具体的日志字段解析出来并且对应ES mapping中的字段。我之前有用过ELK的方式来做command.log日志的收集,Logstash通过filter的grok表达式的方式来解析日志格式很简单,并且可以对收集的日志字段进行一些特殊处理(如:类型转换,删除字段,重命名字段等等)。在Flume里是通过Interceptors来实现Logstash的filter grok表达式功能的。
Flume的Interceptors配置
下面是我们command.log的日志文件截取,可以看出我们command.log日志的格式比较简单。修改我们的flume_es.conf配置文件,添加interceptors的配置,指定正则表达式解析我们的日志格式。
command.log日志文件
|
|
我擦,我被Flume的interceptors配置给坑了,官网给了一个interceptors的例子非常的简单,根本就不知道怎么支持我上面的日志格式(主要是我正则表达式学的太烂了)。感觉Flume对于日志的处理方面没有Logstash灵活易用。
先来看一下官网给的interceptors例子吧
If the Flume event body contained 1:2:3.4foobar5 and the following configuration was used
|
|
The extracted event will contain the same body but the following headers will have been added one=>1, two=>2, three=>3
上面官网的例子就是从日志1:2:3.4foobar5中按照我们的格式用”:”号分割并且提取后面的1位数字,并且按照提取出来的值顺序对应字段名称为:one,two,three,最后转换出来的结果就是one=>1, two=>2, three=>3
但是我们上面的日志文件格式要稍微复杂一点,我们的日志一个json格式的字符串,所以第一次用Flume提取日志记录中的值还有点费事,我也是一边修改正则表达式,一边测试结果。
mapping不正确没有匹配成功
|
|
mapping正确,数据匹配不正确包含了多余的字段名
|
|
mapping正确,数据也正确(特殊字符需要转义,转义符是\)
最后终于调试正确了,是因为我修改Flume的正则表达式改错了,发现es.log中的错误信息提示的bulk参数,我发现bulk的参数居然解析了两次时间字段{“TIME”:”2016-08-25 16:09:10”},我们定义的aaa字段包含了TIME字段名还有value,但是bbb字段却只有TIME字段的value,而不是预想中第二个字段的值。所以这里我发现了一个很重要的规则,就是正则表达式中”()号”中的是从日志记录中提取出来的value,这个value会对应serializers中定义的field名称,我上一个表达式之所以会解析两边TIME字段就是因为正则表达式中带了两个”()号”,如:(TIME:(.*?)),这样就会把TIME的value提取出来一次,再把TIME:value这样的字符串当成值提取出来一次,所以就会出现上面的情况。
|
|
|
|
flume_collector_es1.conf配置文件
|
|
参考文章:
- http://blog.csdn.net/yangruihong/article/details/17245359
- http://flume.apache.org/FlumeUserGuide.html#zookeeper-based-configuration
- http://blog.csdn.net/xiao_jun_0820/article/details/38333171
- http://www.voidcn.com/blog/lanmo555/article/p-4974586.html
- http://blog.csdn.net/sunflower_cao/article/details/39929931
- http://blog.csdn.net/u010022051/article/details/50515725