flume:找到事件发送器的ip/主机名吗?

2nc8po8w  于 2021-06-04  发布在  Flume
关注(0)|答案(2)|浏览(470)

我正在尝试设置数据管道,应用程序服务器通过网络向flume(使用flume log4j appender)发送(使用log4j日志)logevents到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

mpbci0fu

mpbci0fu1#

对于任何有类似问题的人,我最终删除了应用程序端的log4j flume appender,用log4j syslog appender替换了它。在flume端,我配置了syslogudp源。
所以最后看起来像,
在应用程序端log4j配置

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代理,syslogudp源

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

所以现在我的Flume事件看起来像,
2015-03-17 08:43:02658 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[main,]}
现在我终于可以用%{host}访问头中的主机键了

cgvd09ve

cgvd09ve2#

如果您使用avrosource,这实际上是一个avro-rpc实现,那么这是非常容易的。在客户机上创建flume事件时,只需确保向包含要使用的值的事件添加自定义头,例如发送方ip。不要使用拦截器,因为这些拦截器会用执行拦截器的flume代理的主机地址覆盖头中的主机地址。您可以使用以下语法%{header\u key}在flume config中访问头的值

相关问题