2017-01-18 2 views
1

Je cherche un fractionnement/filtre pour le tableau JSON suivant. Nous avons besoin de chaque valeur du tableau sous forme de valeur unique dans Elastice.Analyser un tableau JSON unique imbriqué dans Logstash

{ "Mot_Temp_Test": { "INT": [ "0", "0", "0", "0", "0", "0", "0", "0", " 0" , "0", "0", "0"]}}

+0

Vous souhaitez un document différent pour chaque élément de tableau ou un champ différent pour chaque élément de tableau dans un document? –

+0

Je veux un champ différent pour chaque élément de tableau –

+0

[This] (https://discuss.elastic.co/t/how-to-split-array-without-a-target/1590/2) pourrait être utile et toujours semble être un problème! – Kulasangar

Répondre

0

(Ce sont les résultats des tests que je courais à l'aide logstash 2.4, sortie codec rubydebug)

en utilisant codec => "json" dans votre entrée logstash verra votre tableau sous forme de tableau. J'ai numéroté tes ints pour les différencier. Logstash n'est pas génial pour la gestion des tableaux, mais il peut y accéder. Ainsi, nous pouvons utiliser un mutate filter pour renommer un élément de tableau en champ.

filter { 
    mutate { rename => { "[Mot_Temp_Test][INT][0]" => "int0" } } 
} 

nous donne des:

{ 
    "Mot_Temp_Test" => { 
     "INT" => [ 
      [ 0] "0", 
      [ 1] "0", 
      [ 2] "0", 
      [ 3] "0", 
      [ 4] "0", 
      [ 5] "0", 
      [ 6] "0", 
      [ 7] "0", 
      [ 8] "0", 
      [ 9] "0", 
      [10] "0" 
     ] 
    }, 
     "@version" => "1", 
     "@timestamp" => "2017-01-20T17:08:00.728Z", 
      "host" => "5780e869e09f", 
      "int0" => "0" 
} 

D'accord, ce qui devrait être simple. . .

filter { 
    mutate { 
     rename => { "[Mot_Temp_Test][INT][0]" => "int0" } 
     rename => { "[Mot_Temp_Test][INT][1]" => "int1" } 
     rename => { "[Mot_Temp_Test][INT][2]" => "int2" } 
     rename => { "[Mot_Temp_Test][INT][3]" => "int3" } 
     rename => { "[Mot_Temp_Test][INT][4]" => "int4" } 
     rename => { "[Mot_Temp_Test][INT][5]" => "int5" } 
     rename => { "[Mot_Temp_Test][INT][6]" => "int6" } 
    } 
} 

Mais attendez, ces opérations sont traitées une par une et après quelque chose est supprimé, les remplissages du tableau et nous obtenons:

{ 
    "Mot_Temp_Test" => { 
     "INT" => [ 
      [0] "1", 
      [1] "3", 
      [2] "5", 
      [3] "7", 
      [4] "9", 
      [5] "11" 
     ] 
    }, 
     "@version" => "1", 
     "@timestamp" => "2017-01-20T18:48:31.875Z", 
      "host" => "a802749c44fe", 
      "int0" => "0", 
      "int1" => "2", 
      "int2" => "4", 
      "int3" => "6", 
      "int4" => "8", 
      "int5" => "10" 
} 

Essayer de tenir compte:

filter { 
    mutate { 
     rename => { "[Mot_Temp_Test][INT][0]" => "int0" } 
     rename => { "[Mot_Temp_Test][INT][0]" => "int1" } 
     rename => { "[Mot_Temp_Test][INT][0]" => "int2" } 
     rename => { "[Mot_Temp_Test][INT][0]" => "int3" } 
     rename => { "[Mot_Temp_Test][INT][0]" => "int4" } 
     rename => { "[Mot_Temp_Test][INT][0]" => "int5" } 
     rename => { "[Mot_Temp_Test][INT][0]" => "int6" } 
    } 
} 

Ne fonctionne pas exactement:

{ 
                  "Mot_Temp_Test" => { 
     "INT" => [ 
      [ 0] "1", 
      [ 1] "2", 
      [ 2] "3", 
      [ 3] "4", 
      [ 4] "5", 
      [ 5] "6", 
      [ 6] "7", 
      [ 7] "8", 
      [ 8] "9", 
      [ 9] "10", 
      [10] "11" 
     ] 
    }, 
                   "@version" => "1", 
                   "@timestamp" => "2017-01-20T18:56:32.608Z", 
                    "host" => "d5b81003f43b", 
    "\"int0\", \"int1\", \"int2\", \"int3\", \"int4\", \"int5\", \"int6\"" => "0" 
} 

Pour que cela fonctionne, nous devons utiliser un tas de différents filtres de muter:

filter { 
    mutate { rename => { "[Mot_Temp_Test][INT][0]" => "int0" } } 
    mutate { rename => { "[Mot_Temp_Test][INT][0]" => "int1" } } 
    mutate { rename => { "[Mot_Temp_Test][INT][0]" => "int2" } } 
    mutate { rename => { "[Mot_Temp_Test][INT][0]" => "int3" } } 
    mutate { rename => { "[Mot_Temp_Test][INT][0]" => "int4" } } 
    mutate { rename => { "[Mot_Temp_Test][INT][0]" => "int5" } } 
    mutate { rename => { "[Mot_Temp_Test][INT][0]" => "int6" } } 
} 

Et le succès:

{ 
    "Mot_Temp_Test" => { 
     "INT" => [ 
      [0] "7", 
      [1] "8", 
      [2] "9", 
      [3] "10", 
      [4] "11" 
     ] 
    }, 
     "@version" => "1", 
     "@timestamp" => "2017-01-20T18:21:06.488Z", 
      "host" => "882832d1dd43", 
      "int0" => "0", 
      "int1" => "1", 
      "int2" => "2", 
      "int3" => "3", 
      "int4" => "4", 
      "int5" => "5", 
      "int6" => "6" 
} 

Dans l'ensemble, les tableaux sont quelque chose qui logstash est pas bon.