grok过滤器logstash JSON解析错误,原始数据现在在消息字段中

时间:2017-03-06 16:55:48

标签: logstash logstash-grok

我正在使用带有配置输入的logstash {rabbitmq} filter {grok} output {elastic}

从兔子我收到这种格式的nginx日志:

if

我正在使用grok过滤器,如下所示:

- - [06/Mar/2017:15:45:53 +0000] "GET /check HTTP/1.1" 200 0 "-" "ELB-HealthChecker/2.0"

,模式是

filter{
    if [type] == "nginx" {
        grok{
            match => { "message" => "%{NGINXACCESS}" }
        }   
    }
}

我在grok调试器中尝试了模式,它看起来工作得很好但是运行管道我得到了这个错误

NGUSERNAME [a-zA-Z\.\@\-\+_%]+
NGUSER %{NGUSERNAME}
NGINXACCESS %{NGUSER:ident} %{NGUSER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response} (?:%{NUMBER:bytes}|-) (?:"(?:%{URI:referrer}|-)"|%{QS:referrer}) %{QS:agent}

似乎某人(logstash?)正在向结果中添加[2017-03-06T16:46:40,692][ERROR][logstash.codecs.json ] JSON parse error, original data now in message field {:error=>#, :data=>"- - [06/Mar/2017:16:46:40 +0000] \"GET /check HTTP/1.1\" 200 0 \"-\" \"ELB-HealthChecker/2.0\""} ...

希望得到一些帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

这似乎根本不是一个错误。如果grok无法解析,则会在您的活动中添加标记_grokparsefailure。 JSON解析错误可能是由于您的输入尝试在日志格式明显不是JSON时读取codec => json {}。确保处理这些日志类型的输入插件使用codec => plain或适当的类型。

有关详细信息,请参阅logstash codecs