Logstash 1.4.2 grok过滤器:_grokparsefailure

时间:2015-02-02 11:36:41

标签: logstash-grok

  1. 我正在尝试解析此日志行: - 2014-04-29 13:04:23,733 [main] INFO(api.batch.ThreadPoolWorker)此次运行的命令行选项: 这是我使用的logstash配置文件:

  2. 
    
    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}其余的被忽略!

1 个答案:

答案 0 :(得分:0)

您的配置中有两个错误。

<强>第一

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

FYI。希望这可以帮到你。