2016-04-08 1 views
1

grokの解析に問題があります。 ElasticSearch/Kibanaでは、一致する行は_grokparsefailureというタグで始まります。以下、このようなLogstash _grokparsefailureに問題がありますか?

input { 
snmptrap { 
yamlmibdir => "/opt/logstash/vendor/bundle/jruby/1.9/gems/snmp- 1.2.0/data/ruby/snmp/mibs" 
codec => plain { 
charset => "BINARY" 
     } 
type => "snmptrap" 
     } 
     } 

filter { 

    if [type] == "snmptrap" 
      { 
       grok { 
       match => { "message" => "%{IP:@source_ip=\\""}" } 
       add_field => { "source_ip" =>"%{@source_ip=\"}" } 
      } 
     } 

    } 

    output {elasticsearch { hosts => localhost } 


     } 

私の入力ルック:

は、ここに私のlogstashの設定です。

"メッセージ" =>「#1 @企業= [1.3.6.1.3.92.1.1.7]、@timestamp =#@値= 802993822>、@varbind_list = [#1 @名= [1.3.6.1 @値= 1 >>]、@ specific_trap = 2、@source_ip = \ "10.10.10.12 \"、@agent_addr =#@ value = 1 >>、 "\ XC0 xA8 \ \ A \ F \">、@ generic_trap = 6>」、

方法@source_ipを取得し、値のための新しいフィールドを追加するには?

誰かが私に問題の解決方法を教えてもらえますか?

答えて

0

あなたの設定がコンパイルされても驚いています。あなたはgrokの仕組みについてもう少し詳しく知りたい。たとえば、通常はgrokでadd_fieldを使用する必要はありません。

grokパターンには、キャプチャするデータの前後にあるものが含まれます。これらの項目は、あなたの正規表現を「アンカー」します。あなたの場合、 '@ source_ip = "は開始し、" "は終了します。真ん中のものは、あなたが本当に新しい分野に取り込もうとしているものです。

あなたのパターンはより次のようになります。

match => { "message" => "@source_ip=\\\"%{IP:source_ip}\\\"" } 

これはあなたに値を含む新しい「source_ip」フィールドを与える必要があります。

\\\ "はスラッシュと引用符をエスケープし、\"と一致します。

+0

私は\\ "デバッグ出力にのみ表示され、IPを囲む(エスケープされた)引用符と一致する必要があります。 –