2016-06-20 16 views
4

Log4jログファイル(今のところSocket呼び出しを使用しない)を、ElasticsearchにフィードするLogstash JSONファイルに統合するように求められました。私たちのコードはRollingFileAppenderを使用しています。次に、ログエントリの例を示します。このlog4jログのlogstash grokフィルタは何ですか?

2016-04-22 16:43:25,172 ERROR :SomeUser : 2 [com.mycompany.SomeClass] AttributeSchema 'Customer |Customer |Individual|Individual|Quarter|Date' : 17.203 The Log Message. 

ここに私たちのlog4j.propertiesでConversionPattern値は

<param name="ConversionPattern" value="%d{ISO8601} %p %x %X{username}:%t [%c] %m %n" /> 

をファイルの誰かが私に行を解析しますLogstash GROKフィルタを書く助けてくださいことはできますか?私はこれまでに以下のことを持っています。

filter { 
    if [type] == "log4j" { 
    grok { 
     match => ["message", "%{TIMESTAMP_ISO8601:logdate} %{LOGLEVEL:loglevel} %{GREEDYDATA:messsage}"] 
    } 
    date { 
     match => ["logdate", "yyyy-MM-dd HH:mm:ss,SSS", "ISO8601"] 
    } 
    } 
} 

もちろん、メッセージとして優先順位の後にすべてを取ります。私はさらに分離する、少なくとも以下の(Log4j Pattern Layoutで定義された)フィールド

  • ユーザ(%のX {ユーザー名})
  • クラスパス([%のC])
  • スレッド率(%T)
  • ネストされた診断コンテンツ(%x)が
  • メッセージ自体(%のM)

答えて

8

Iは、以下のフィルタを動作させることができました。

filter { 
    mutate { 
     strip => "message" 
    } 
    grok { 
     match => { 
     "message" => "%{TIMESTAMP_ISO8601:logdate} %{LOGLEVEL:loglevel} :%{DATA:thread} : %{NUMBER:thread_pool} \[(?<classname>[^\]]+)\] %{SPACE} %{GREEDYDATA:msgbody}" 
     } 
    } 
    date { 
     match => ["logdate", "yyyy-MM-dd HH:mm:ss,SSS", "ISO8601"] 
    } 
} 

ただし、これは上記のログに固有のものです。

私はフォローアップの質問があります。どのようにパターンを「パッド」して、各パターンの「スペース」を管理することができますか。たとえば、ERRORログレベルは5スペースを占めますが、INFOログレベルは4になります。これをどのように管理すればERRORとINFOログの両方で機能しますか?

+0

私の次の質問に答えるには、%{スペース}または\ + sを入力してください。 –

関連する問題