0

我正在尝试设置数据管道,其中应用程序服务器通过网络发送(使用 log4j 日志记录)日志事件到水槽(使用水槽 log4j 附加程序)到水槽代理正在使用的 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

4

2 回答 2

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

在水槽代理, syslogudp 源

  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 } 主体:54 4F 46 4C 55 4D 45 20 5B 6D 61 69 6E 2C 5D 20 TOFLUME [主,]}

我现在终于可以使用%{host}访问标头中的主机密钥

于 2015-03-20T10:20:37.683 回答
0

如果您使用 AvroSource,这实际上非常容易,它实际上是一个 Avro RPC 实现。当您在客户端上创建 Flume 事件时,只需确保向您的事件添加自定义标头,其中包含您要使用的值,例如发送者 IP。不要使用拦截器,因为它们会用执行拦截器的水槽代理覆盖标头中的主机地址。您可以使用以下语法 %{header_key} 在水槽配置中访问标头的值

于 2015-03-19T16:56:24.890 回答