我试图将json字符串发送到logstash然后发送kafka,但由于我的json文件中的双引号转义,我一直遇到json解析失败。
我尝试了一系列不同的替换组合,但没有一个可行。我不确定是否
我得到一个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)
此处_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的候选人。
解决此问题需要您在解析之前“修复”日志行。这是一些粗糙的正则表达式。