3

現在、ログ ファイルから特定の行をフィルタリングしようとしています。ログファイルの私の行は次のパターンです。

[8/05/13 14:24:55.468] RuntimeErrorI E LaError
[8/05/13 14:24:55.468] AbcdEfg W SomeWarning

最初は日付、時刻、アプリケーション名、およびログ レベル (警告、エラー、トレースなど) で、その後にエラー メッセージ、警告メッセージ、またはその他のメッセージが続きます。

したがって、取得しようとしているのは、ログ レベル エラーのみであり、他のログ レベルではありません。私は遊んでいる次のものを持っていますが、コンソール出力がまったく得られません。E(エラー)かどうかを確認するために、grepのどこかで間違いを犯していると思います

input {

  file {
  type => "database"
  path => "/home/nakampe/Desktop/file.log"
  }

}

filter {

 grok {

    pattern =>  "[%{MONTHDAY:date} / %{MONTH:month} / %{YEAR:year}  %{TIME:time}] %WORD:application} %{WORD:levelType}  %{WORD:message}"

  }


#Here I want to only consider log levels of E (ERROR) and not others
  grep{

  match => ["levelType", "E"]

  }

}

output {

   elasticsearch { 

   embedded => true 
   }

stdout { 
  message => "%{@message}"
  }     
}  
4

3 に答える 3

1
 grok { 

pattern =>  "%{MONTHDAY:date}/%{MONTHNUM:month}/%{YEAR:year} %{TIME:time} %{WORD:sast}]      

    %{INT:threadId} %{WORD:applicationName}%{SPACE:space}%{WORD:logLevel} %     {WORD:errorMessage}"

}

http://grokdebug.herokuapp.com/を使用してデバッグした後、私の間違いはパターンにありました。非常に便利なツールです。

于 2013-08-16T10:11:53.137 に答える
0

両方のフィルターをチェーンする必要があると思います。そうしないと、元の行に個別に適用されます。これを行うには、grok フィルターにタグを追加し、grep フィルターでこれに反応します。

grok {
  pattern => ...
  add_tag => [ "groked_input" ]
}

grep {
  match => ...
  tags => [ "groked_input"]
}

それが役立つことを願っています! :)

于 2013-08-16T08:59:15.297 に答える
0

grok セクションの下

if [levelType] != "ERROR" {
        drop { }
}
于 2014-07-30T13:07:22.197 に答える