【问题标题】:Grok parse error while trying to parse kafka logs尝试解析 kafka 日志时出现 Grok 解析错误
【发布时间】:2017-03-30 13:07:30
【问题描述】:

我遇到了一个我似乎无法弄清楚的 logstash grok 解析失败...

输入看起来像这样:

"@timestamp" => 2017-03-30T13:03:41.899Z,
 "tst_field" => "test123avc",
  "@version" => "1",
   "message" => "[group-consumer-master,message-qa,8]::[OffsetMetadata[2,NO_METADATA],CommitTime 1490878047368,ExpirationTime 1490964447368]",
      "tags" => [
    [0] "_grokparsefailure"
]

我已经尝试过这样的过滤器部分:

filter{
        grok {
                match => {"meessage" => [
                                "\[%{DATA:kafka_consumer_group},%{DATA:kafka_topic},%{NUMBER:kafka_topic_parition}\]::\[OffsetMetadata\[%{NUMBER:kafka_offset_group},%{DATA:message_metadata}\],CommitTime %{NUMBER:commit_time},ExpirationTime %{NUMBER:expiration_time}\]"
                                ]
                         }
        }
}

但我不断收到一个 grok 解析错误。我已经在http://grokdebug.herokuapp.com/ 中尝试过,它似乎有效...

这是我在日志文件中得到的错误

Error parsing json {:source=>"message", :raw=>"[group-consumer-master,message-qa,8]::[OffsetMetadata[2,NO_METADATA],CommitTime 1490878047368,ExpirationTime 1490964447368]", :exception=>#<LogStash::Json::ParserError: Unrecognized token 'group': was expecting ('true', 'false' or 'null')

----编辑-------

这是完整的配置:

input {
        kafka {
                topics => ["kafka-offsets"]
                bootstrap_servers => "kafka1.domain.com:9092"
                group_id => "logstash_offsets_parser3"
        }

}
filter{
        grok {
                match => {"meessage" => "\[%{DATA:kafka_consumer_group},%{DATA:kafka_topic},%{NUMBER:kafka_topic_parition}\]\:\:\[OffsetMetadata\[%{NUMBER:kafka_offset_group},%{DATA:message_metadata}\],CommitTime\ %{NUMBER:commit_time},ExpirationTime\ %{NUMBER:expiration_time}\]"
                         }
        }
}
output {
  stdout { codec => "rubydebug" }
}

--编辑--

我拼错了消息...我拼写为meessage....将其更改为message,现在它可以正常工作....

【问题讨论】:

  • 总是那些小错别字。

标签: logstash logstash-grok


【解决方案1】:

错误信息是这样说的:

解析 json 时出错 {:source=>"message" ...

这强烈表明在您的过滤管道的某个地方,您有一个看起来像这样的块。

json {
  source => "message"
}

您在顶部引用的 message 字段不是 JSON 格式的。我建议您检查 json {} 块周围的条件,无论它在哪里,并确保这个特定事件永远不会命中它。

grokparsefailure 消息可以由您拥有的任何 grok 块生成。还要检查其他条件句,以确保此事件不会不恰当地击中这些条件句。如果您想确保 this grok-block 是解析失败的那个,我建议将 tag_on_failure 设置为该块独有的东西,以确保这是生成它的那个。

【讨论】:

  • 我不太明白为什么我需要 json 块 (json { source =&gt; "message" }) 虽然 message 只是一个字符串?我试图在 grok 过滤器之前包含那个 json 块,但它仍然不起作用......
  • @user2061886 我的意思是json {}这里不需要,并且无论如何都会被应用。或者是早期测试运行的产物,它被放在 grok 过滤器之前。
  • 哦,好吧...我不知道为什么会这样...我进行了编辑以显示完整的配置文件,并且我没有在其中的任何地方指定 json 块.. .
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
  • 2013-06-24
  • 2022-01-16
  • 1970-01-01
  • 2012-05-02
相关资源
最近更新 更多