【问题标题】:Logstash JSON input with escaped double quote带有转义双引号的 Logstash JSON 输入
【发布时间】:2017-10-20 11:49:33
【问题描述】:

我正在尝试将 json 字符串发送到 logstash,然后是 kafka,但由于我的 json 文件中的转义双引号,我一直遇到 json 解析失败。

我尝试了很多不同的替换组合,但都不起作用。我不确定是否

  1. 错误已经出现在配置的输入端,所以它没有继续过滤部分
  2. 我只是没有正确替换字符串

我得到一个 json 为:

{"message": "This is a \"string with quote"}

我的logstash conf是:

input {
  tcp {
    codec => json { charset => "UTF-8" }
    port => 10000
  }
}

filter {
  json {
    source => "message"
  }
  mutate {
    remove_field => ["@version", "@timestamp", "host", "port"]
    gsub => [
      # replace all backslashes + double quote with space
     'body', '\\"', ' '
    ]
  }
} 

output {
  kafka {
    bootstrap_servers => "localhost:9092"
    codec => json {charset => "UTF-8"}
    topic_id => 'logstash_logs'
  }

file {
    path => "/usr/share/logstash/test.log"
    codec => rubydebug
  }
}

我的 ruby​​debug 日志是:

{
    "message" => "{\"message\": \"This is a \"string with quote\"}",
       "tags" => [
        [0] "_jsonparsefailure"
    ]
} 

【问题讨论】:

  • 完整的源消息是什么?
  • 我收到的实际消息是来自高级新闻来源的新闻文章。摘录如下: {"an":"AFNWS00020150624eb6o0006h","body":"展会旨在展示可再生能源的潜力,... \n\n\"我们正在为长期存在的农村地区供电远离国家电网”,她说。“我们一直在优先使用太阳能电池板,为学校和医院等社会基础设施提供电力。}

标签: json apache-kafka logstash


【解决方案1】:

_jsonparsefailure 在这里是诊断性的,它告诉我是 json {} 过滤器失败了。由于logstash is using their own parsing gem 使用the jrjackson gem,如果你有jruby,你可以测试其中的一些解析。

  JrJackson::Ruby.parse(data, options)

rescue JrJackson::ParseError => e
  raise LogStash::Json::ParserError.new(e.message)
end

那是您无法解析的代码段,因此这可能是 jrjackson 解析器中的错误。如果你能得到一个干净的复制品,consider reporting it as an issue on the gem。如果没有,这是在the logstash-filter-json project's issue-tracker 上报告的候选人。

解决此问题需要您在解析之前“修复”日志行。那是一些粗糙的正则表达式。

【讨论】:

    猜你喜欢
    • 2017-01-14
    • 1970-01-01
    • 2020-11-29
    • 2016-06-06
    • 2013-02-28
    • 2021-02-28
    • 1970-01-01
    • 2015-10-27
    • 2020-11-26
    相关资源
    最近更新 更多