使用转义双引号的Logstash JSON输入

时间:2017-10-20 11:49:34

标签: json apache-kafka logstash

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

我尝试了一系列不同的替换组合,但没有一个可行。我不确定是否

  1. 错误发生在配置的输入端,因此它没有继续到过滤器部分
  2. 我没有正确更换字符串
  3. 我得到一个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"
        ]
    } 
    

1 个答案:

答案 0 :(得分:0)

此处_jsonparsefailure是诊断性的,它告诉我json {}过滤器失败了。自使用is using their own parsing gem的logstash the jrjackson gem以来,如果您有方便的话,可以测试一些解析。

  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的候选人。

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