Получение _jsonparsefailure с действительным json в logstash - PullRequest
0 голосов
/ 14 июня 2019

Я сейчас пытаюсь отправить json через logstash вasticsearch.Тем не менее, я получаю сообщение об ошибке jsonparsefailure, хотя я подтвердил, что мой json находится в правильном формате.В чем может быть моя проблема?Ниже мой файл конфигурации и мой JSON

input{
 file{
        path => "/Users/CFP668/Downloads/gs-accessing-data-mysql-master/complete/example.json"
        codec => json
        start_position => "beginning"
 }
}

filter{
    json{
        source => "message"
    }
}

output{
    elasticsearch{
        hosts => "localhost:9200"
        index => "test123" 
    }
    stdout { codec => rubydebug }
}
"{\"request_id\":1,\"requestDetail_id\":0,\"enrichedContent\":\"enrich cont example\",\"statusCode\":\"P\",\"reasonDesc\":\"This is a test\",\"createdBy\":\"Sarah\",\"createdDate\":\"Sep 24, 2010\"}"

1 Ответ

1 голос
/ 16 июня 2019

Ваш json действительно не подходит для Logstash, у вас есть обратный слеш перед двойными кавычками на ваших ключах, и ваш объект json также находится между двойными кавычками.

Ваши строки json в исходном файле должны быть примерно такими:

{"request_id":1,"requestDetail_id":0,"enrichedContent":"enrich cont example","statusCode":"P","reasonDesc":"This is a test","createdBy":"Sarah","createdDate":"Sep 24, 2010"}

Способ работы с текущей строкой json без изменения способа ее генерации состоит в том, чтобы использовать сообщение gsub в вашем сообщении, чтобы изменить "{ на {, }" на } и удалить обратную косую черту. \

Это делает следующий конвейер фильтра:

filter {
    mutate {
        gsub => ["message","^\"{","{"]
        gsub => ["message","}\"$","}"]
        gsub => ["message","[\\]",""]
    }
    json {
        source => "message"
    }
}

И вы можете удалить codec => "json" из вашего блока ввода.

...