flume: найти ip/имя хоста отправителя события?

Я пытаюсь настроить конвейер данных, где серверы приложений отправляют (используя ведение журнала log4j) logevents в поток (используя приложение Flume log4j) по сети, в avrosource, который использует агент Flume.

Я пробовал с приведенной ниже конфигурацией, но добавляет только 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


person rpwr021    schedule 10.03.2015    source источник


Ответы (2)


На самом деле это довольно просто, если вы используете AvroSource, который на самом деле является реализацией Avro RPC. Когда вы создаете события Flume на клиенте, просто убедитесь, что вы добавили к своим событиям пользовательские заголовки, которые содержат значения, которые вы хотите использовать, например. IP-адрес отправителя. Не используйте перехватчики, потому что они перезаписывают адрес хоста в заголовках адресом агента Flume, выполняющего перехватчик. Вы можете получить доступ к значениям вашего заголовка в конфигурации Flume, используя следующий синтаксис %{header_key}

person Erik Schmiegelow    schedule 19.03.2015
comment
к сожалению, я использую приложение log4j-flume для отправки событий, у которого нет возможности отправлять имя хоста в заголовках. - person rpwr021; 20.03.2015

Для всех, у кого есть аналогичная проблема, я удалил приложение log4j-flume на стороне приложения и заменил его приложением log4j-syslog. на стороне канала я настроил источник 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, источник 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 ИНФОРМАЦИЯ org.apache.flume.sink.LoggerSink: событие: { заголовки: {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}

person rpwr021    schedule 20.03.2015