logstash的新功能。我正在尝试解析应用程序日志行,例如:
2014-11-05 16:59:36,779 ERROR DOMAINNAME \ bob [这是一个错误。 ]
我的配置文件如下所示:
input {
file {
path => "C:/tmp/*.log"
}
}
filter {
grok {
match => [
"message", "%{TIMESTAMP_ISO8601:timestamp}\s*%{LOGLEVEL:level}\s*%{DATA:userAlias}\s*%{GREEDYDATA:message}"
]
overwrite => [ "message" ]
}
if [level] =~ "INFO" {
drop {
}
}
}
output {
elasticsearch {
host => "localhost"
protocol => "http"
}
}
时间戳和级别被解析得很好,但消息显示在Kibana中:
消息: DOMAINNAME \ bob [这是一个错误。 ]
DATA的grok模式是。*? 所以我认为它应该处理反斜杠\并正确设置 userAlias到DOMAINNAME \ bob和 消息到[这是一个错误。 ] 但事实并非如此。我在这做错了什么?感谢。
答案 0 :(得分:0)
你的grok模式的问题是.*?
是非贪婪的(即可选)而.*
是贪婪的,所以后者&#34;接管&#34; 可能已被<{1}}模式匹配的字符串。
我建议你避免使用DATA和GREEDYDATA模式,除了匹配字符串的其余部分(比如你在这里使用GREEDYDATA)。在这种情况下你可以例如使用NOTSPACE模式匹配用户名。您可以使用更具体的模式,例如排除用户名中无效的字符,但我不明白这一点。这有效:
.*?
(我也冒昧用\ s +替换\ s *,因为字段之间的空格不是可选的。)