过滤特定行

时间:2013-08-13 11:52:56

标签: logstash

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

[2013年8月14日14:24:55.468] RuntimeErrorI E LaError [2013年8月14日14:24:55.468] AbcdEfg W SomeWarning

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

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

如何帮助我实现我想要做的事情,我们非常感谢。 提前谢谢。

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}"
  }     
}  

3 个答案:

答案 0 :(得分: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/进行调试后,一切正常。一个非常有用的工具。

答案 1 :(得分:0)

我认为您需要链接两个过滤器,否则它们将独立应用于原始行。您可以通过在grok过滤器中添加标签并在grep过滤器中对此做出反应来完成此操作:

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

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

希望有所帮助! :)

答案 2 :(得分:0)

在grok部分

if [levelType] != "ERROR" {
        drop { }
}