2016-12-02 4 views
1

У нас есть поток журналов, где наше приложение Java заполняет MDC, который передается через log4j2 в syslog на центральную установку rsyslog. Здесь мы широко используем MDC. Наша установка следующим образом:Как перенести MDC через gelf в graylog?

<Syslog name="syslog" format="RFC5424" host="localhost" port="514" protocol="UDP" 
     appName="messaging_platform.${application}" mdcId="mdc" includeMDC="true" facility="LOCAL5" connectTimeoutMillis="100" ignoreExceptions="false"> 
    <LoggerFields> 
     <KeyValuePair key="class" value="%c"/> 
     <KeyValuePair key="classname" value="%c{1}"/> 
     <KeyValuePair key="exception" value="%ex{full}"/> 
     <KeyValuePair key="method" value="%method"/> 
     <KeyValuePair key="line" value="%line"/> 
     <KeyValuePair key="application_name" value="${application}"/> 
     <KeyValuePair key="sequenceNumber" value="%sequenceNumber"/> 
     <KeyValuePair key="application_version" value="${application.version}"/> 
     <KeyValuePair key="marker" value="%marker"/> 
     <KeyValuePair key="thread" value="%thread"/> 
     <KeyValuePair key="system_nano_time" value="%nano"/> 
     <KeyValuePair key="app_uptime" value="%relative"/> 
    </LoggerFields> 
</Syslog> 

Я пытаюсь преобразовать это использовать Graylog и, кажется, GELF рекомендуемый транспортный протокол для этого. Я нашел несколько библиотек для этого и начал с встроенного GelfLayout log4j2. Но это не поддерживает LoggerFields.

Итак, какой рекомендуемый способ получить эти поля в Graylog? Если я сделаю

<Socket name="Graylog" protocol="udp" host="localhost" port="12201"> 
     <GelfLayout host="localhost" compressionType="GZIP" compressionThreshold="1024"> 
      <KeyValuePair key="class" value="%c"/> 
      <KeyValuePair key="classname" value="%c{1}"/> 
      <KeyValuePair key="exception" value="%ex{full}"/> 
      <KeyValuePair key="method" value="%method"/> 
      <KeyValuePair key="line" value="%line"/> 
      <KeyValuePair key="application_name" value="${application}"/> 
      <KeyValuePair key="sequenceNumber" value="%sequenceNumber"/> 
      <KeyValuePair key="application_version" value="${application.version}"/> 
      <KeyValuePair key="marker" value="%marker"/> 
      <KeyValuePair key="thread" value="%thread"/> 
      <KeyValuePair key="system_nano_time" value="%nano"/> 
      <KeyValuePair key="app_uptime" value="%relative"/> 
     </GelfLayout> 
    </Socket> 

Я получаю кучу полей в Graylog, но значения не расширены.

ответ

1

Я нашел решение с logstash-gelf:

<Gelf name="gelf" host="udp:localhost" port="12201" version="1.1" extractStackTrace="true" 
      filterStackTrace="true" mdcProfiling="true" includeFullMdc="true" maximumMessageSize="8192" 
      originHost="%host{fqdn}"> 
     <Field name="class" pattern="%c"/> 
     <Field name="classname" pattern="%c{1}"/> 
     <Field name="exception" pattern="%ex{full}"/> 
     <Field name="method" pattern="%method"/> 
     <Field name="line" pattern="%line"/> 
     <Field name="application_name" pattern="${application}"/> 
     <Field name="sequenceNumber" pattern="%sequenceNumber"/> 
     <Field name="application_version" pattern="${application.version}"/> 
     <Field name="marker" pattern="%marker"/> 
     <Field name="thread" pattern="%thread"/> 
     <Field name="system_nano_time" pattern="%nano"/> 
     <Field name="app_uptime" pattern="%relative"/> 
     <Field name="severity" pattern="%level{WARN=Warning, DEBUG=Debug, ERROR=Error, TRACE=Trace, INFO=Info}"/> 
    </Gelf> 
Смежные вопросы