3

我目前正在尝试从我的日志文件中过滤特定的行。我在日志文件中的行具有以下模式。

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

其中第一个是日期、时间、应用程序名称和日志级别(警告、错误、跟踪等),然后是错误消息或警告消息或任何其他消息。

所以我想要得到的只是日志级别错误,而不是其他日志级别。我有以下我正在玩的东西,但我根本没有得到控制台输出。我想我在 grep 的某个地方犯了一个错误来检查它是否 E(Error)

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 回答