【问题标题】:Logstash 1.4.2 grok filter: _grokparsefailureLogstash 1.4.2 grok 过滤器:_grokparsefailure
【发布时间】:2015-02-02 11:36:40
【问题描述】:
  1. 我正在尝试解析此日志行: - 2014-04-29 13:04:23,733 [main] INFO (api.batch.ThreadPoolWorker) 此运行的命令行选项: 这是我使用的logstash配置文件:

input {
        stdin {}
}

filter {
 grok {
    match => [ "message", " - %{TIMESTAMP_ISO8601:time} \[%{WORD:main}\] %{LOGLEVEL:loglevel} %{JAVACLASS:class} %{DATA:mydata} "]
  }

    date {
    match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
  }

output {
  elasticsearch {
    host => "localhost"
  }
  stdout { codec => rubydebug }
}
这是我得到的输出:

{
       "message" => " - 2014-04-29 13:04:23,733 [main] INFO (api.batch.ThreadPoolWorker) Commans run:",
      "@version" => "1",
    "@timestamp" => "2015-02-02T10:53:58.282Z",
          "host" => "NAME_001.corp.com",
          "tags" => [
        [0] "_grokparsefailure"
    ]
}

如果有人能帮我找出 gork 模式的问题所在,请帮忙。 我试图解析http://grokdebug.herokuapp.com/ 中的那一行,但它只解析时间戳、%{WORD} 和 %{LOGLEVEL},其余的被忽略!

【问题讨论】:

    标签: logstash-grok


    【解决方案1】:

    您的配置中有两个错误。

    第一

    GROK 中的错误是JAVACLASS,您必须在模式中包含( ),例如:\(%{JAVACLASS:class}\。

    第二

    date 过滤器match 有两个值,第一个是您要解析的field,所以在您的示例中它是time,而不是timestamp。第二个值是日期模式。可以参考here

    这里是配置

    input {
            stdin {
    
            }
    }
    
    filter {
            grok {
                    match => [ "message", " - %{TIMESTAMP_ISO8601:time} \[%{WORD:main}\] %{LOGLEVEL:loglevel} \(%{JAVACLASS:class}\) %{GREEDYDATA:mydata}"
                    ]
            }
            date {
                    match => [ "time" , "YYYY-MM-dd HH:mm:ss,SSS" ]
            }
    }
    
    output
    {
            stdout {
                    codec => rubydebug
            }
    }
    

    仅供参考。希望这可以帮到你。

    【讨论】:

    • 感谢 Ben 的反馈。我已经尝试过添加您的解决方案 (%{JAVACLASS:class}\ 不能解决问题。当我在匹配模式中单独使用它提取 java 类时,模式 JAVACLASS 实际上工作正常:{... "class" = > "api.batch.ThreadPoolWorker" } 但是当我将其余模式与 JAVACLASS 一起添加时,它给了我 grokparsefailure 错误标签。我测试了其他模式,它们也能正常工作,它只是将所有模式与 JAVACLASS 结合在一起,创建了一个错误。请问有什么建议吗?
    • 您的日志示例适用于我的配置。 JAVACLASS 模式是:\(%{JAVACLASS:class}\),包括`\`。请试试我的配置。
    • 我从elasticsearch中删除了所有失败的日志后再次尝试,它现在可以工作了。非常感谢您的帮助。
    • 实际上我需要解析一个包含数千行日志的日志文件,这些日志的格式与我之前显示的行相同,有时还带有 java 堆栈跟踪。但是当我将此行添加到我的文件条目时** - 2014-04-29 13:04:23,700 [main] INFO (api.batch.ThreadPoolWorker) 从类路径资源文件加载属性:/prop/env3/logiciels/jkl/ nnh/devprint/splapp/standalone/config/threadpoolworker.properties** 它只解析了我正在测试的第一行,而不是上面的那一行。这种模式应该解析我的整个日志文件吗?还是一旦找到匹配项就会中断?
    • 你必须使用多行模式。请看一看。 logstash.net/docs/1.4.2/filters/multiline。如果您有其他问题,请提出其他问题。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    相关资源
    最近更新 更多