Logstash 日志事件的grok模式
我是一个Logstash新手,我已经看过很多grok模式的例子,我仍然在努力实现我的目标,那就是解析下面的Logstash 日志事件的grok模式,logstash,logstash-grok,Logstash,Logstash Grok,我是一个Logstash新手,我已经看过很多grok模式的例子,我仍然在努力实现我的目标,那就是解析下面的JSON格式化日志事件 { "@fields": { "level": "DEBUG", "mdc": {}, "file": "SearchServiceImpl.java", "class": "com.blah.blah.service.impl.SearchServiceImpl", "line_number": "767", "m
JSON
格式化日志事件
{
"@fields": {
"level": "DEBUG",
"mdc": {},
"file": "SearchServiceImpl.java",
"class": "com.blah.blah.service.impl.SearchServiceImpl",
"line_number": "767",
"method": "getUserSavedSearches"
},
"@timestamp": "2015-04-24T12:30:37.953+01:00",
"@message": "username: admin sessionid: 56cR73aBpuIBzRgIElzLUtJJ method_name: getUserSavedSearches",
"@source_host": "Kens-MacBook.local"
}
我特别想提取会话id和用户名。
我也希望我能得到详细的文档来解释如何使用Grok。(我已经阅读了logstash上的可用文档等)。
感谢您的帮助首先,您的日志格式是JSON。因此,在您的配置中,您可以使用
json
codec来读取日志。然后,使用GROK
解析用户名和会话id
input {
stdin{
codec => json
}
}
filter {
grok {
match => [
"@message", "username: %{USERNAME:username} sessionid: %{NOTSPACE:sessionId} method_name: %{WORD:method_name}"
]
}
}
output {
stdout { codec => rubydebug }
}
对于更详细的文档,您可以使用来帮助您尝试grok模式以及可以使用的grok模式
以下是示例输出:
{
"@fields" => {
"level" => "DEBUG",
"mdc" => {},
"file" => "SearchServiceImpl.java",
"class" => "com.blah.blah.service.impl.SearchServiceImpl",
"line_number" => "767",
"method" => "getUserSavedSearches"
},
"@timestamp" => "2015-04-24T19:30:37.953+08:00",
"@message" => "username: admin sessionid: 56cR73aBpuIBzRgIElzLUtJJ method_name: getUserSavedSearches",
"@source_host" => "Kens-MacBook.local",
"@version" => "1",
"host" => "BEN_LIM",
"username" => "admin",
"sessionId" => "56cR73aBpuIBzRgIElzLUtJJ",
"method_name" => "getUserSavedSearches"
}
谢谢你的回复,不幸的是这没有起作用。我在grok调试器中尝试了它,但得到了“不匹配”的响应。附上输出的摘录以供参考。“@timestamp”=>“2015-04-27T08:43:43.839Z”,“@message”=>“用户名:admin sessionid:-egqj0zsjk-Zgqz4i-utppH方法”\u名称:getSavedSearch“,“@source\u主机”=>“Kays MacBook.local”,“@version”=>“1”,“键入”=>“log4j”,“主机”=>“Kenss MacBook.local”,“path”=>“/opt/jboss-eap-6.3/standalone/log/Service.log”,“tags”=>[[0]“\u grokparsefailure”]}我已经更新了我的答案。这是因为sessionId有其他符号,您必须使用空格模式而不是单词。这不起作用,但感谢您的帮助,您已经成功了。。我已经设法用用户名得到了一个有效的响应:%%{username:username}sessionid:%%{username:sessionid}method_name:%%{WORD:method}正如我的sessionid是-eGqqj0ZsJK-Zgqz4i-utppH一样,你能为sessionid使用用户名提出一个替代方案吗?我答案中的sessionid已经更改为%{NOTSPACE:sessionid},这意味着它将接受除空格以外的字符。如果我的回答对您有帮助,请将其标记为已接受。非常感谢。