flume:找到事件发送者的ip / hostname?

时间:2015-03-10 17:19:59

标签: flume flume-ng

我正在尝试设置数据管道,其中应用程序服务器通过网络发送(使用log4j日志记录)logevents(使用flume log4j appender)到flume代理正在使用的avrosource

我尝试过下面的配置,但它只附加运行代理的主机的IP

A1.sources.logE.interceptors = hostint A1.sources.logE.interceptors.hostint.type = org.apache.flume.interceptor.HostInterceptor$Builder A1.sources.logE.interceptors.hostint.preserveExisting = true A11.sources.logE.interceptors.hostint.useIP = false

2 个答案:

答案 0 :(得分:0)

如果您使用的是AvroSource,实际上是Avro RPC实现,这实际上非常简单。当您在客户端上创建Flume Events时,只需确保向您添加自定义标头包含您要使用的值的事件,例如发件人IP。不要使用拦截器,因为那些拦截器会使用执行拦截器的flume代理程序覆盖标头中的主机地址。您可以使用以下语法%{header_key}

访问flume配置中标头的值

答案 1 :(得分:0)

对于有类似问题的人,我最终在应用程序端删除了log4j-flume appender,将其替换为log4j-syslog appender。 在水槽方面我配置了syslogudp源。

所以最后它看起来像,

在应用程序端log4j-config

log4j.appender.syslog=org.apache.log4j.net.SyslogAppender
log4j.appender.syslog.Facility=LOCAL7
log4j.appender.syslog.FacilityPrinting=false
log4j.appender.syslog.Header=true
log4j.appender.syslog.SyslogHost=flume1.host.net:41473
log4j.appender.syslog.layout=org.apache.log4j.PatternLayout
log4j.appender.syslog.layout.ConversionPattern= DUMMY %p: (%F:%L) %x %m %n

在flume agent,syslogudp source

  A1.sources.logMR.type = syslogudp
  A1.sources.logMR.bind = 0.0.0.0
  A1.sources.logMR.port = 41473

所以现在我的水槽事件看起来像,

  

2015-03-17 08:43:02,658 INFO org.apache.flume.sink.LoggerSink:事件:{headers:{timestamp = 1426682579754,Severity = 7,host = apphost1.host.net,Facility = 23, log_type = maplogs} body:54 4F 46 4C    55 4D 45 20 5B 6D 61 69 6E 2C 5D 20 TOFLUME [main,]}

现在我终于可以使用%{host}

访问标题中的主机密钥了