2017-10-20 795 views
1

我试图发送json字符串到logstash,然后kafka,但由于我的json文件中的双引号溢出,我一直遇到json解析失败。Logstash 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 
    } 
} 

我rubydebug日志:

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

什么是完整的来源讯息? –

+0

我收到的实际消息是来自优质新闻源的新闻文章。摘录如下:{“an”:“AFNWS00020150624eb6o0006h”,“body”:“该展览旨在展示可再生能源的潜力,... \ n \ n”我们正在让农村地区她说,“我们一直在优先考虑太阳能电池板,为学校和医院等社会基础设施提供电力”。} – Merelda

回答

0

_jsonparsefailure是诊断这里,告诉我,这是json {}过滤器失败。由于使用the jrjackson gem的logstash is using their own parsing 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的候选人。

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