【问题标题】:grok pattern for log event日志事件的 grok 模式
【发布时间】:2015-04-27 07:40:09
【问题描述】:

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

【问题讨论】:

    标签: logstash logstash-grok


    【解决方案1】:

    首先,您的日志格式为 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"
    }
    

    【讨论】:

    • 感谢您的回复,很遗憾这没有奏效。我在 grok 调试器中尝试使用“不匹配”响应。附上输出的摘录以供参考。
    • "@timestamp" => "2015-04-27T08:43:43.839Z", "@message" => "用户名: admin sessionid: -eGqqj0ZsJK-Zgqz4i-utppH method_name: getSavedSearch", "@source_host" => "Kays-MacBook.local", "@version" => "1", "type" => "log4j", "host" => "Kenss-MacBook.local", "path" = > "/opt/jboss-eap-6.3/standalone/log/Service.log", "tags" => [ [0] "_grokparsefailure" ] }
    • 我已经更新了我的答案。这是因为 sessionId 有其他符号,你必须使用 NOTSPACE 模式而不是 WORD。
    • 那没用,但感谢您的帮助,您已经成功了.. 我已经设法得到一个有效的回复,用户名:%{USERNAME:username} sessionid:%{ USERNAME:sessionId} method_name: %{WORD:method} as my sessionid was -eGqqj0ZsJK-Zgqz4i-utppH 你能建议一个替代方法来使用 USERNAME 作为 sessionid 吗?
    • 我的答案中的 sessionId 已更改为 %{NOTSPACE:sessionId},这意味着它将接受除 SPACE 之外的字符。如果我的回答对您有帮助,请将其标记为已接受。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    相关资源
    最近更新 更多