2016-04-18 15 views
0

私はファイルを入力として読み込み、それをフィルタリングするために渡します。したがって、[type]に基づいて、出力のためのif/else(stdout)が続きます。ここlogstash-filterが正規表現を尊重しない

はconfに一部です:

filter { 
    if [path] =~ "error" { 
     mutate { 
      replace => { "type" => "ERROR_LOGS"} 
     } 
     grok { 
      match => {"error_examiner" => "%{GREEDYDATA:err}"} 
     } 
     if [err] =~ "9999" { 
      if [err] =~ "invalid offset" { 
       mutate { 
        replace => {"type" => "DISCARDED_ERROR_LOGS"} 
       } 
       grok { 
        match => {"message" => "\[%{DATA:date}\] \[%{WORD:logtype} \] \[%{IPORHOST:ip}\]->\[http://search:9999/%{WORD:searchORsuggest}/%{DATA:askme_tag}\?%{DATA:paramstr}\] \[%{DATA:reason}\]"} 
       } 
       date { 
        match => [ "date", "YYYY-MM-DD aaa HH:mm:ss" ] 
        locale => en 
       } 
       geoip { 
        source => "ip" 
        target => "geo_ip" 
       } 
       kv { 
        source => "paramstr" 
        trimkey => "&\?\[\]," 
        value_split => "=" 
        target => "params" 
       } 
      } 
      else { 
       mutate { 
        replace => {"type" => "ACCEPTED_ERROR_LOGS"} 
       } 
       grok { 
        match => { 
         "message" => "\[%{DATA:date}\] \[%{WORD:logtype} \] \[%{WORD:uptime}\/%{NUMBER:downtime}\] \[%{IPORHOST:ip}\]->\[http://search:9999/%{WORD:searchORsuggest}\/%{DATA:askme_tag}\?%{DATA:paramstr}\]" 
        } 
       } 
       date { 
        match => [ "date" , "YYYY-MM-DD aaa HH:mm:ss" ] 
        locale => en 
       } 
       geoip { 
        source => "ip" 
        target => "geo_ip" 
       } 
       kv { 
        source => "paramstr" 
        trimkey => "&\?\[\]," 
        value_split => "=" 
        target => "params" 
       } 
      } 
     } 
     else if [err] =~ "Exception" { 
      mutate { 
        replace => {"type" => "EXCEPTIONS_IN_ERROR_LOGS"} 
      } 
      grok { 
       match => { "message" => "%{GREEDYDATA}"} 
      } 
     } 
    } 
    else if [path] =~ "info" { 
     mutate { 
      replace => {"type" => "INFO_LOGS"} 
     } 
     grok { 
      match => { 
       "info_examiner" => "%{GREEDYDATA:info}" 
      } 
     } 
     if [info] =~ "9999" { 
      mutate { 
       replace => {"type" => "ACCEPTED_INFO_LOGS"} 
      } 
      grok { 
        match => { 
         "message" => "\[%{DATA:date}\] \[%{WORD:logtype} \] \[%{WORD:uptime}\/%{NUMBER:downtime}\](\[%{WORD:qtype}\])?(\[%{NUMBER:outsearch}/%{NUMBER:insearch}\])? \[%{IPORHOST:ip}\]->\[http://search:9999/%{WORD:searchORsuggest}/%{DATA:askme_tag}\?%{DATA:paramstr}\]" 
        } 
      } 
      date { 
       match => [ "date" , "YYYY-MM-DD aaa HH:mm:ss" ] 
       locale => en 
      } 
      geoip { 
       source => "ip" 
       target => "geo_ip" 
      } 
      kv { 
       source => "paramstr" 
       trimkey => "&\?\[\]," 
       value_split => "=" 
       target => "params" 
      } 
     } 
     else { 
      mutate {replace => {"type" => "DISCARDED_INFO_LOGS"}} 
      grok { 
       match => {"message" => "%{GREEDYDATA}"} 
      } 
     } 
    } 
} 

私はhttp://grokdebug.herokuapp.com/

を作業するためにテストしているGROKの正規表現が、どのような作業ではないですが、この部分である:

grok { 
      match => {"error_examiner" => "%{GREEDYDATA:err}"} 
     } 
     if [err] =~ "9999" { 

私が思っていました何がそこに間違っているのですか?

+0

は、私はそう完全にログの別々のタイプの他にfundaeた場合、それが作成された別々のconfigsを削除することで回避することができますが、それは他にあればそこに...私が欲しいものではありませんあまりにも動作しなければならない –

答えて

0

実際、私はそれを修正しました。ここで「error_examiner」または「info_examiner

  1. ...私はドキュメントや他のリソースのためのlogstashとの最初の実験は、とても語っていないしている間、私が学んだことを、他の仲間と共有したいものです"動作しません。"メッセージのインスタンス/イベント行を解析してください。
  2. geipは内部ipsのために機能しません。
  3. 彼らは、B = 2 = 1を好きですが、言っていない場合は、field_splitとvalue_splitを指定する必要があり、このためにKV、:1 & B:
  4. STDOUT、によって:2を、その後field_Splitがvalue_splitは、&です選択されたコーデックがjsonの場合、デフォルトはひどく前にあります。rubydebugを選択してください。

おかげで、