log4j输出日志到flume

Log4JAppender和LoadBalancingLog4jAppender可以将应用服务器的日志通过AvroSource实时的把日志传输到日志服务器,然后在传输到监控系统或者是HDFS中存储,FLume的Log4JAppender和LoadBalancingLog4jAppender必须使用Log4j的异步加载器,否则日志服务器down机,将会导致应用服务器异常,影响线上环境的使用。 应用程序如果要用Log4JAppender就要依赖相关的jar,在应用服务器可以通过如下Maven配置获取到Log4JAppender的jar和log4j的相关jar:

<!-- flume log4j appender start -->  
<dependency>  
    <groupId>org.apache.flume.flume-ng-clients</groupId>  
    <artifactId>flume-ng-log4jappender</artifactId>  
    <version>1.6.0</version>  
</dependency>  
<!-- flume log4j appender end -->  
  
<!-- log4j start -->  
<dependency>    
    <groupId>log4j</groupId>    
    <artifactId>log4j</artifactId>    
    <version>1.2.17</version>    
</dependency>    
<dependency>    
    <groupId>org.slf4j</groupId>    
    <artifactId>slf4j-api</artifactId>    
    <version>1.7.5</version>    
</dependency>    
<dependency>    
    <groupId>org.slf4j</groupId>    
    <artifactId>slf4j-log4j12</artifactId>    
    <version>1.7.5</version>    
</dependency>  
<!-- log4j end -->  


Log4jAppender和LoadBalancingLog4jAppender有如下区别:

1,LoadBalancingLog4jAppender支持一组AvroSource。
2,LoadBalancingLog4jAppender支持round-robin,random或自定义的负载均衡方式。
3,当Event发送失败的情况下,LoadBalancingLog4jAppender支持backoff策略。

Log4JAppender配置文件

属性名 默认 描述
Hostname 运行在远程Flume Agent中Avro Source的Hostname
Port 运行在远程Flume Agent中Avro Source的监听端口
UnsafeMode false 如果设置为true,那么该Appender在发送Event失败不会抛出异常。
AvroReflectionEnabled false 使用Avro反射机制序列化Log4j的Event事件。(如果日志是字符串就不需要了。)
AvroSchemaUrl 一个可以检索Avro schema的URL

LoadBalancingLog4jAppender配置文件

属性名 默认 描述
Hosts 通过AvroSource监听Event的host:port列表,用空格分隔
Selector ROUND_ROBIN      
选择机制。选择机制包含:ROUND_ROBIN,RANDOM或者是自定义
MaxBackoff MaxBackoff是一个long型值,代表一个节点消费一个event失败的情况下,负载均衡客户端最大的backoff时间(单位:毫秒),默认不启动backoff
UnsafeMode false 如果设置为true,那么该Appender在发送Event失败不会抛出异常。
AvroReflectionEnabled false 使用Avro反射机制序列化Log4j的Event事件。(如果日志是字符串就不需要了。)
AvroSchemaUrl 一个可以检索Avro schema的URL

示例

应用程序端log4j配置

一,采用Log4JAppender

1,采用properties方式:

log4j.appender.flume=org.apache.flume.clients.log4jappender.Log4jAppender  
log4j.appender.flume.Hostname=192.68.179.160
log4j.appender.flume.Port=5555  
log4j.appender.flume.UnsafeMode=true  
log4j.appender.flume.layout=org.apache.log4j.PatternLayout  
log4j.appender.flume.layout.ConversionPattern=%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n  


二,采用LoadBalancingLog4jAppender

1,采用properties方式:

log4j.appender.flume=org.apache.flume.clients.log4jappender.LoadBalancingLog4jAppender  
log4j.appender.flume.Hosts=192.168.179.160:5555 192.168.179.161:5555 10.0.1.77:5555  
log4j.appender.flume.UnsafeMode=true  
log4j.appender.flume.MaxBackoff=30000  
log4j.appender.flume.Selector=RANDOM  
log4j.appender.flume.layout=org.apache.log4j.PatternLayout  
log4j.appender.flume.layout.ConversionPattern=%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 


服务端Flume Agent

a1.sources = r1  
a1.sinks = k1  
a1.channels = c1  
  
# Describe/configure the source  
a1.sources.r1.type = avro  
a1.sources.r1.bind = 0.0.0.0  
a1.sources.r1.port = 5555  
  
# Describe the sink  
a1.sinks.k1.type = file_roll  
a1.sinks.k1.sink.directory = /data/  
a1.sinks.k1.sink.rollInterval = 0  
a1.sinks.k1.sink.serializer = TEXT  
a1.sinks.k1.sink.batchSize = 100  
  
# Use a channel which buffers events in memory  
a1.channels.c1.type = memory  
a1.channels.c1.capacity = 1000  
a1.channels.c1.transactionCapacity = 100  
  
# Bind the source and sink to the channel  
a1.sources.r1.channels = c1  
a1.sinks.k1.channel = c1  

如果是采用LoadBalancingLog4jAppender方式,需要部署多台Flume Agent。配置类似。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值