0

私はELKの初心者です、私は複数行を使用して設定ファイルを書いているし、我々が使用した入力データELKマルチライン正規表現を修正しますか?

110000|read|<soapenv:Envelope> 
<head>hello<head> 
<body></body> 
</soapenv:Envelope>|<soapenv:Envelope> 
<body></body> 
</soapenv:Envelope> 
210000|read|<soapenv:Envelope> 
<head>hello<head> 
<body></body> 
</soapenv:Envelope>|<soapenv:Envelope> 
<body></body> 
</soapenv:Envelope> 
370000|read|<soapenv:Envelope> 
<head>hello<head> 
<body></body> 
</soapenv:Envelope>|<soapenv:Envelope> 
<body></body> 
</soapenv:Envelope> 

と設定ファイルのパターンを記述する必要がある:

input { 
    file { 
    path => "/opt/test5/practice_new/xml_input.dat" 
    start_position => "beginning" 
     codec => multiline 
    { 
    pattern => "^%{INT}\|%{WORD}\|<soapenv:Envelope*>\|<soapenv" 
    negate => true 
    what => "previous" 
    } 
    } 
} 
filter { 
    grok { 
    match => [ "message", "%{DATA:method_id}\|%{WORD:method_type}\|%{GREEDYDATA:request}\|%{GREEDYDATA:response}" ] 
    } 
} 

output { 
    elasticsearch { 
    hosts => "http://localhost:9200" 
    index => "xml" 
    } 
stdout {} 
} 

しかし、それに使われているパターンが私の要求に合っていません。

正しいパターンを教えてください。

予想される出力:第一ログの

method_id- 110000 

method type- 

request- 

response- 

第二のログについては

method id- 210000 

    method type- 

    request- 

    response- 

同様に残りのため。

+1

を[これ](https://regex101.com/r/lP5xef/1)試してみてください(しようとする正規表現フィールドから正規表現をコピーします)。 –

+0

@Wiktor Stribizewは、次のログの正規表現を助けることができます – Ritwik

+0

以下の答えが私の正規表現ではうまくいかない場合、それを受け入れるべきではありません。 –

答えて

0

あなたの第一は、あなたの複数行のパターンを修正する必要があります:中3つのログの行の結果に続いて

(?m)^(?<method_id>\d+)\|(?<method_type>\w+)\|(?<request><soapenv:Envelope>.*?</soapenv:Envelope>)\|(?<response><soapenv:Envelope>.*?</soapenv:Envelope>) 

codec => multiline { 
      pattern => "^%{NUMBER:method_id}\|%{DATA:method_type}\|<soapenv:Envelope>" 
      negate => true 
      what => previous 
     } 

その後、あなたはWiktor第コメントで示唆パターンを使用することができますhttp://grokconstructor.appspot.com上のあなたのポスト: results


あなたの全体の設定は次のようになります。

input { 
    file { 
    path => "/opt/test5/practice_new/xml_input.dat" 
    start_position => "beginning" 
    codec => multiline { 
      pattern => "^%{NUMBER:method_id}\|%{DATA:method_type}\|<soapenv:Envelope>" 
      negate => true 
      what => previous 
     } 
    } 
} 
filter { 
    grok { 
    match => [ "message", "(?m)^(?<method_id>\d+)\|(?<method_type>\w+)\|(?<request><soapenv:Envelope>.*?</soapenv:Envelope>)\|(?<response><soapenv:Envelope>.*?</soapenv:Envelope>)" ] 
    } 
} 

output { 
    elasticsearch { 
    hosts => "http://localhost:9200" 
    index => "xml" 
    } 
stdout {} 
} 
+0

Grokでこれを使用しているときにエラーが発生するため、どこでWiktorが提案したパターンを使うべきですか?または、私はそれを複数行のパターンで使うべきですか? – Ritwik

+0

grokのパターン(wiktorによって与えられる)を使用しているときにエラーが発生しています。パターンをどこで使うべきですか? – Ritwik

+0

私の編集を参照してください。私はここでセットアップをしていないので、自分でテストすることはできませんので、grokconstructorの結果に頼らざるを得ません。 – Phonolog

関連する問題