Problème pour parser un fichier JSON à l'aide de Logstash

Bonjour à tous !

Étant novice sous ELK, merci d'être gentil avec moi :wink:

Je souhaite parser un fichier JSON sous Logstash pour l'indéxer dans ElasticSearch.
Ce fichier est sous la forme suivante:
https://itunes.apple.com/FR/rss/customerreviews/id=525006323/sortBy=mostRecent/json

Voici mon input et filter:

#######################################
############ INPUT SECTION ############
#######################################

input {
  file {
    type => "MappyGPS"
    path => "/opt/scraping-IOS/Mappy.json"
    codec => "json"
    start_position => "beginning"
    codec => multiline {
           pattern => "^{"
           negate => "true"
           what => "previous"
    }
    sincedb_path => "/dev/null"
  }
}

#######################################
########### FILTER SECTION ############
#######################################

filter
{
    mutate
    {
        replace => [ "message", "%{message}" ]
        gsub => [ 'message','\n','']
    }
    if [message] =~ /^{.*}$/
    {
        json { source => message }
    }

}

mais j'ai le message suivant:

{
       "message" => "{\"attributes\":{\"rel\":\"previous\", \"href\":\"https://itunes.apple.com/fr/rss/customerreviews/page=1/id=525006323/sortby=mostrecent/xml?urlDesc=/customerreviews/id=525006323/sortBy=mostRecent/json\"}}, ",
          "tags" => [
        [0] "_jsonparsefailure"
    ],

Merci d'avance pour votre aide :wink:

Je suis surpris que LS accepte deux codecs.
A mon avis l'un doit écraser l'autre.

En fait, je pense qu'il faut seulement utiliser le codec json.
Il y a le code json_lines aussi mais il est fait pour le cas où tu as un JSON sur une seule ligne, si je comprends bien.

Bonjour David et merci de ta réponse.
En fait, j'ai d'autres fichiers JSON qui sont eux, sur une même ligne.
Du coup, j'utilise ceci:

#######################################
############ INPUT SECTION ############
#######################################

input {
  file {
    type => "CandyCrushSodaSaga"
    path => "/opt/scraping-GPS/apps_info_json/CandyCrushSaga.json"
    codec => "json"
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}

#######################################
########### FILTER SECTION ############
#######################################

filter
{
    mutate
    {
        replace => [ "message", "%{message}" ]
        gsub => [ 'message','\n','']
    }
    if [message] =~ /^{.*}$/
    {
        json { source => message }
    }

}

Je ne sais pas si le code est propre mais ça marche :wink:

Donc du coup ? Ca marche pour ton premier cas ?

Bonjour,

J'ai actuellement le même problème, or quand je met

codec => "json"

J'ai un message d'erreur qui s'affiche lorsque je lance logstash, et dès que je change "codec => "json"" le problème n'est plus là mais j'ai toujours le "_jsonparsefailure"

Comment puis-je faire ?

Ouvre une nouvelle question et poste toutes les informations comme un exemple de fichier en entrée, la configuration...

"Ca marche pas" n'est pas vraiment suffisant pour t'aider.