我目前正在尝试从日志文件中过滤特定行。 我在日志文件中的行具有以下模式。
[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}"
}
}
答案 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 { }
}