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

我是一个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上的可用文档等)。
感谢您的帮助首先,您的日志格式是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},这意味着它将接受除空格以外的字符。如果我的回答对您有帮助,请将其标记为已接受。非常感谢。