日志事件的grok模式

时间:2015-04-27 07:40:09

标签: logstash logstash-grok

我是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上的可用文档等)。 任何帮助将不胜感激

1 个答案:

答案 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"
}