我是Logstash的新手,我已经看过许多grok模式的例子,我仍在努力实现我的目标,即解析以下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上的可用文档等)。 任何帮助将不胜感激
答案 0 :(得分:2)
首先,您的日志格式是JSON格式。因此,在您的配置中,您可以使用json
编解码器来读取日志。然后,使用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 }
}
有关更详细的文档,您可以使用this site帮助您尝试grok模式,并使用this site获取可以使用的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"
}