2016-12-02 15 views
1

私たちのJavaアプリケーションがlog4j2経由でsyslogに転送されたMDCをいっぱいにするログフローが、中央の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は、そのための推奨トランスポートプロトコルであるようです。私はこれを行うために複数のライブラリを見つけて、log4j2のビルドインGelfLayoutで開始しました。しかし、それは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> 
関連する問題