flume自定义Serializer收集日志入elasticsearch

转自:https://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

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

    source:Taildir Source

    channel: File Channel

    sinks:ElasticSearchSink

  2. 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自定义Serializer收集日志入elasticsearch_第1张图片
File Channel配置:
在这里插入图片描述

ElasticSearchSink 配置:

flume自定义Serializer收集日志入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自定义Serializer收集日志入elasticsearch_第3张图片

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

flume自定义Serializer收集日志入elasticsearch_第4张图片
flume自定义Serializer收集日志入elasticsearch_第5张图片

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

flume自定义Serializer收集日志入elasticsearch_第6张图片
flume自定义Serializer收集日志入elasticsearch_第7张图片

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

flume自定义Serializer收集日志入elasticsearch_第8张图片

在这里插入图片描述

算是写完了吧。。。

作者:一只小码蚁
来源:CSDN
原文:https://blog.csdn.net/yujimoyouran/article/details/59104131
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(日志收集)