2017-01-09 11 views
0

logstashのgrokプラグインでDATAパターンを理解しようとしています。次のようにDATAマッチのドキュメントを1として :logstash - grokのDATAパターン

DATA .*? - >私はnの長さが1で何かとしてそれを解釈[私の理解が間違っている場合 が私を修正してください]。

私のスクリプトでは、正しく入力を解析できません。
Logstash CONF:私は、タグsomedataはそれとして、[値で満たされることが期待

{ 
    "message": "2017-01-09 02:00:03.887,a,a", 
    "@version": "1", 
    "@timestamp": "2017-01-09T12:28:20.958Z", 
    "path": "/home/osboxes/logstash_conf/mydir/test_logs/data", 
    "host": "osboxes", 
    "timeStamp": "2017-01-09 02:00:03.887", 
    "ID": "a" 
} 

input{ 
file { 
     path => ["/home/osboxes/logstash_conf/mydir/test_logs/*"] 
     start_position => beginning 
     sincedb_path => "/home/osboxes/logstash_conf/mydir/.sincedb" 
    } 
} 
filter{ 
     grok { 
       match => { "message" => "^%{TIMESTAMP_ISO8601:timeStamp},%{DATA:ID},%{DATA:somedata}" } 
     } 
} 
output { 
    stdout { 
     codec => json_lines 
    } 
} 

を入力:

2017-01-09 02:00:03.887,a,a 

出力タグの場合はID]でしたが、出力は省略されています。誰でも私の行動を理解するのを助けてくださいDATAパターン。

答えて

1

.*?必要に応じて、ゼロと無制限の時間を可能な限り数回マッチさせます。 ゼロ回に一致するという事実は、結果が表示されない理由です。アウト書かれ

は、問題の一部は次のようになります。最初の, 1.Take ,a,

とそれにマッチ:

,(.*?),(.*?)

これは一致した(キャプチャグループは、読みやすくするために追加されました)。

(パターンが有効になるまで文字ごとに)できるだけ少ないと.*?と一致するように2.Tryこれは次の,に一致するようにa

3.Tryと一致します。これは成功し、最初の.*?が完了します。

4.お試しください.*?。これはゼロ回と一致することができますので、一致します。


あなたの問題への単純な解決策は、あなたのパターンの最後に$を追加することです。 $は文字列アンカーの末尾なので、2番目の.*?はもう1つのaと一致するように強制されます。

+0

ありがとうございました。この場合、それは信頼できる 'DATA'パターンか、他のパターンを探す必要がありますか?あなたが言及したように、それはゼロ文字にマッチするかもしれませんが、実際に興味のある値をスキップすることもあります。 –

+0

@ G.S '$'でパターンを終了するとよいでしょう。これにより、2番目の 'DATA'が何かにマッチすることが保証されます。 – Fairy

+0

を理解してください。私はちょうど同様の動作が途中で 'DATA'に対して起こるかどうか心配しています。 '$'は最後のフィールドに対してのみ使用できます。 'DATA'が途中のフィールドで失敗するかどうかは不明です。 –

関連する問題