原文地址:http://www.1-blog.com/?p=38
flume-ng是时下比较流行的日志收集方案,log4j也是java领域内常用的日志组件。那有什么简单的办法把他们结合起来呢?
- 背景:
通常,我们的应用程序已经在使用log4j来记录日志了,有一天我们的日志需要导入到其他地方(同时文本日志暂时也不想丢),用来分析(hdfs)或者检索(elasticsearch),我们就想到通过一个数据管道来做这件事情,flume似乎是一个不错的选择。
- 解决方案:
- 写log4j日志的同时,集成flume-ng的SDK,同时把日志写到flume中。好处是:日志的内容和格式都可以随便定义
- 使用log4j-flume-appender,日志输出到文本的同时,也输出到flume中。好处是:基本不需要更改代码,方便快捷
结合实际考虑,决定采用第二种方式,最快捷
- 实施步骤:
1. 引入需要的lib包
最简单的方式,当然是使用maven来引入了,同时就把依赖的jar包自动包含了
<dependency>
<groupId>org.apache.flume.flume-ng-clients</groupId>
<artifactId>flume-ng-log4jappender</artifactId>
<version>1.6.0</version>
</dependency>
2. 配置log4j.xml
需要注意,为了避免记录日志对于应用程序的阻塞,最好添加AsyncAppender(所以好像就不能通过property文件来配置log4j了)。
<appender name="flumeAppender" class="org.apache.flume.clients.log4jappender.LoadBalancingLog4jAppender">
<param name="hosts" value="172.16.113.225:4141 172.16.113.219:4141" />
<param name="UnsafeMode" value="true" />
<param name="maxBackoff" value="5000" />
<param name="timeout" value="3000" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] (%F:%L) %-5p %c - %m%n" />
</layout>
</appender>
<appender name="async" class="org.apache.log4j.AsyncAppender">
<param name="Blocking" value="false" />
<param name="BufferSize" value="500"/>
<appender-ref ref="flumeAppender" />
</appender>
我这里采用了负载均衡的log4jappender,如果是单节点的flume的话,appender修改如下即可:
<appender name="flumeAppender" class="org.apache.flume.clients.log4jappender.Log4jAppender">
<param name="hostname" value="203.195.236.154" />
<param name="port" value="8082" />
<param name="UnsafeMode" value="true" />
<param name="timeout" value="3000" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] (%F:%L) %-5p %c - %m%n" />
</layout>
</appender>
另外需注意:flume-ng-log4jappender对异常部分是忽略掉的,如果想要记录这部分异常信息,需要在log4j.error的时候,把exception信息附加到message中。
详细的参数定义参考下一篇:flume-ng-log4jappender运行机制(源码)分析
相关推荐
Flume-ng-1.6.0-cdh.zip 内压缩了 3 个项目,分别为:flume-ng-1.6.0-cdh5.5.0.tar.gz、flume-ng-1.6.0-cdh5.7.0.tar.gz 和 flume-ng-1.6.0-cdh5.10.1.tar.gz,选择你需要的版本。
flume-ng安装
flume-ng-sql-source-1.5.2.jar从数据库中增量读取数据到hdfs中的jar包
flume-ng-1.6.0-cdh5.5.0.tar.gz
flume-ng-sql-source-release-1.5.2.jar 用flume-ng-sql-source 从数据库抽取数据到kafka,支持sql
Flume-ng在windows环境搭建并测试+log4j日志通过Flume输出到HDFS 11111
flume-ng-sql-source-1.5.3.jar,flume采集mysql数据jar包,将此文件拖入FLUME_HOME/lib目录下,如果是CM下CDH版本的flume,则放到/opt/cloudera/parcels/CDH-xxxx/lib/flume-ng/lib下,同样需要的包还有mysql-...
flume-ng-sql-source-1.5.2源码
flume-ng-1.5.0-cdh5.3.6.rarflume-ng-1.5.0-cdh5.3.6.rar flume-ng-1.5.0-cdh5.3.6.rar flume-ng-1.5.0-cdh5.3.6.rar flume-ng-1.5.0-cdh5.3.6.rar flume-ng-1.5.0-cdh5.3.6.rar flume-ng-1.5.0-cdh5.3.6.rar flume...
flume-ng-sql-source-1.5.1 flume连接数据库 很好用的工具
Apache Log4j Flume Appender org.apache.logging.log4j/log4j-flume-ng/2.0-rc2/log4j-flume-ng-2.0-rc2.jar
Apache Log4j Flume Appender org.apache.logging.log4j/log4j-flume-ng/2.9.1/log4j-flume-ng-2.9.1.jar
Apache Log4j Flume Appender org.apache.logging.log4j/log4j-flume-ng/2.0-beta9/log4j-flume-ng-2.0-beta9.jar
flume-ng-1.6.0 cdh5.7.0安装包,稳定版本。大家可以自由下载
Apache Log4j Flume Appender org.apache.logging.log4j/log4j-flume-ng/2.0-rc1/log4j-flume-ng-2.0-rc1.jar
包含flume-ng-sql-source-1.5.1&flume;-ng-sql-source-1.4.1 此内容均为网上下载
flume-ng-sql-source-1.4.3.jar
flume-ng-sdk-1.6.0.ja,如果想要通过log4j将日志直接导入到flume需要导入这个jar包
flume1.9采集数据入存入elasticsearch6.2.4,flume1.9本身只支持低版本的elasticsearch,基于apache-flume-1.9.0-src的flume-ng-sinks/flume-ng-elasticsearch-sink源码修改,支持es6.2.4,打的包,直接替换flume/...