flume+elasticsearch

转自:http://blog.csdn.net/yujimoyouran/article/details/59104131

简单描述一下这个例子:将项目日志实时采集到elasticsearch,便于统一管理。

1. 收集日志格式为:

log4j.properties : org.apache.log4j.Logger:   %d{ISO8601} [%l-%M]-[%p] %t %m%n

logback.xml :org.slf4j.Logger:     %date [%logger:%L]-[%level] %thread %msg%n

2. flume 1.7.0 (flume搭建只需解压配置jdk即可,官网教程都有案例,http://flume.apache.org/FlumeUserGuide.html) 

     source:Taildir Source 

     channel: File Channel

     sinks:ElasticSearchSink 

3. elasticsearch1.7.5

Flume搭建:

1. 下载flume安装包并解压apache-flume-1.7.0-bin.tar.gz, http://flume.apache.org/download.html

2. 创建软连接 ln -s apache-flume-1.7.0-bin flume

3. 进入conf目录,cp flume-env.sh.template flume-env.sh

4. 修改jdk,vi  flume-env.sh

   

5. 将elasticsearch lib中的elasticsearch-1.7.5.jar和lucene相关jar包拷贝到flume lib中

6. 创建一些下面需要的目录(不同的source,channel,sink需要的目录不一样,用时看官网即可)

     mkdir flume/conf/es (用来存放flume配置文件,并新建文件data-es.conf )

     mkdir flume/tmp (Taildir Source生成的positionFile文件目录)

     mkdir -p flume/file-channel/checkpoint (File Channel检查点写入间隔)

     mkdir -p flume/file-channel/data (File Channel数据存放目录)

     mkdir flume/test (存放测试数据)

Taildir Source配置,直接上data-es.conf截图:

flume+elasticsearch_第1张图片

File Channel配置:

ElasticSearchSink 配置:

flume+elasticsearch_第2张图片

接下来主要讲解一下上图标红的地方,就是flume自定义Serializer

首先大体说一下为什么需要自定义Seralizer,一是也许项目中的log4j日志我们只关心程序员自己输出的日志信息,而不需要log4j其他信息;二是项目日志一般都会统一格式,自定义的格式也许flume不能很精准的拆分。

这里定义日志格式为:

2017-02-27 13:57:19,218 [com.data.test]-[INFO] main {sysName###测试项目@@@status###正在初始化@@@info###开始执行了}
使用正则拆分日志:([\d- :,]{23}) (\[.+?\])-(\[[A-Z]+?\]) (.*) ([{].+}$)

 

拆分结构:

下载源码,只需导入flume-ng-elasticsearch-sink模块即可:

源码不做详细讲解 (因为我还没来的及仔细研究,只是了解大概照猫画虎)
一. 修改的地方是:通过ElasticSearchSink 传入的数据会按照 “prefix-yyyy-MM-dd” 每天创建index,如果数据量不大的话有点浪费,现在只想按照“prefix-yyyy-MM”每月创建index,修改org.apache.flume.sink.elasticsearch.TimeBasedIndexNameBuilder

flume+elasticsearch_第3张图片

二. 仿照org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder.ElasticSearchDynamicSerializer创建自己的Search,其中flume也是封装了es的api操作, Event对象就是你获取到的每条日志,然后按照你自己的逻辑将日志拆分即可,简单的几个截图吧:

flume+elasticsearch_第4张图片

flume+elasticsearch_第5张图片

 

三. 因为只要程序员自己输出日志,所以要将正则不匹配的日志过滤掉。修改org.apache.flume.sink.elasticsearch.ElasticSearchSink, 标红为自己修改的地方

flume+elasticsearch_第6张图片

flume+elasticsearch_第7张图片

最后maven打包替换到flume lib下面相应jar包即可

flume+elasticsearch_第8张图片


算是写完了吧。。。

你可能感兴趣的:(大数据)