Logstash 1.4.2 神交过滤器:_grokparsefailure

Logstash 1.4.2 grok filter: _grokparsefailure

  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},其余部分将被忽略!

您的配置有两个错误。

第一

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
        }
}

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