# Structure JSON, Mapping et traitement Kibana

**URL:** https://discuss.elastic.co/t/structure-json-mapping-et-traitement-kibana/103520
**Category:** Discussions en français
**Created:** [October 11, 2017, 9:31am UTC](https://discuss.elastic.co/t/structure-json-mapping-et-traitement-kibana/103520 "2017-10-11T09:31:00Z")
**Posts on this page:** 15
**Page:** 1

<div class="post-metadata">

### Author: ![mat.bst](https://avatars.discourse-cdn.com/v4/letter/m/9e8a1a/32.png) [@mat.bst](https://discuss.elastic.co/u/mat.bst)
#### Post date: [October 11, 2017, 9:31am UTC](https://discuss.elastic.co/t/structure-json-mapping-et-traitement-kibana/103520/1 "2017-10-11T09:31:01Z")

</div>

Bonjour à toutes et à tous !

Voila voila je suis nouveau sur ES et je rencontre quelques problèmes !

je vous explique ma problématique:

J'ai un fichier JSON de 3000 lignes qui contient tout un lot d'informations sur l'utilisation d'un programme à travers le monde.

La structure du fichier est la suivante:

```
  {
   "date":"2017-10-05T08:15:03.079+0000",
   "Espagne":[
      {
         "serverName":"AZERTYUIKJHD",
         "satus":"UP",
         "users":[
            {
              "projectName":"cccccccccc",
              "immat":"aaaaaaaaa",
              "machineName":"xxxxxxx-xxxxxxx"
            },
            {
              "projectName":"cccccccccc",
              "immat":"aaaaaaaaa",
              "machineName":"xxxxxxx-xxxxxxx"
            },
            {
              "projectName":"cccccccccc",
              "immat":"aaaaaaaaa",
              "machineName":"xxxxxxx-xxxxxxx"
            },
            {
               "projectName":"cccccccccc",
               "immat":"aaaaaaaaa",
               "machineName":"xxxxxxx-xxxxxxx"
            }
         ]
      }
   ],

   "France":[
      {
         "serverName":"AZERTYUIKJHD",
         "status":"UP",
         "users":[
            {
               "projectName":"cccccccccc",
               "immat":"aaaaaaaaa",
               "machineName":"xxxxxxx-xxxxxxx"
            },
            {
               "projectName":"cccccccccc",
               "immat":"aaaaaaaaa",
               "machineName":"xxxxxxx-xxxxxxx"
            },
            {
               "projectName":"cccccccccc",
               "immat":"aaaaaaaaa",
               "machineName":"xxxxxxx-xxxxxxx"
            },
            {
               "projectName":"cccccccccc",
               "immat":"aaaaaaaaa",
               "machineName":"xxxxxxx-xxxxxxx"
            }
         ]
            
      }
   ]
}

```

L'importation dans ES se passe correctement, j'ai crée mon Index, mon type qui est scan puis j'importe mon document.

Mon but est de pouvoir ajouter un fichier de ce type (4000 lignes) toutes les 3 heures et pouvoir sortir des graphes statistiques d'utilisation du programme.

Or, lorsque que j'accède a Kibana je ne peux pas vizualiser correctement mes données..  
Les champs champs qui me sont proposé pour faire mes charts sont par exemple : Espagne.users.projectName. Je ne peux donc que vizualiser par pays individuellement. De plus, mon graph ne compte pas les occurences de même non (si deux users ont le meme projectName, mon graph des projectName ne m'en comptera qu'un seul)  
Question 1 : Puis-je réaliser un chart qui va me dire le nombre d'users par pays avec la structure de donnée que je possède ?

En faisant quelques recherches, je me suis dit que cela venait du mapping car la structure de mon fichier JSON est composé de plusieurs objet / tableau imbriqué. Je me suis donc dis qu'il fallait que j'utilise un mapping personnalisé en déclarant mes champs "PAYS" et mes champs "users" en "type":"nested" mais lorsque que jai testé cette solution je ne pouvais plus réaliser de graph, Kibana me renvoyé une erreur disant que tout mes champs était null.  
Question 2 : Quelle champs dois-je mettre en nested ou object pour que je puisse traiter toutes mes données ?  
Question 3 : Dois-je changer la structure de mon fichier JSON pour pouvoir analyser mes données?

Je vous remercie par avance pour toute aide que vous pourriez m'apporter !

Mathieu

---

<div class="post-metadata">

### Author: ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)
#### Post date: [October 11, 2017, 10:05am UTC](https://discuss.elastic.co/t/structure-json-mapping-et-traitement-kibana/103520/2 "2017-10-11T10:05:55Z")

</div>

> Dois-je changer la structure de mon fichier JSON pour pouvoir analyser mes données?

Oui. Indexe ce que tu cherches ou que tu veux analyser.  
Ici, tu ne veux pas analyser un paquet d'applications mondial mais analyser des applications. L'objet que tu gères n'est donc pas "le monde" mais "une application".

Donc pense à ton modèle en ce sens et indexe des applications.

En gros des objets du genre:

```auto
{
  "date":"2017-10-05T08:15:03.079+0000",
  "country":"France",
  "projectName":"cccccccccc",
  "immat":"aaaaaaaaa",
  "machineName":"xxxxxxx-xxxxxxx"
}

```

Indexe tes 3000 documents individuellement et tu verras que d'un coup, tout devient beaucoup plus facile et sans prise de tête.

---

<div class="post-metadata">

### Author: ![mat.bst](https://avatars.discourse-cdn.com/v4/letter/m/9e8a1a/32.png) [@mat.bst](https://discuss.elastic.co/u/mat.bst)
#### Post date: [October 11, 2017, 11:32am UTC](https://discuss.elastic.co/t/structure-json-mapping-et-traitement-kibana/103520/3 "2017-10-11T11:32:33Z")

</div>

Dans ma démarche de recherche, j'avais effectivement essayé ce modèle !

Pouvez-vous me dire si l'organisation que je compte faire dans ES fait parti des bonnes pratiques ?

index : mon\_index

type : users

avec des fichiers organisé comme ci-dessous  
{  
"date":"2017-10-05T08:15:03.079+0000",  
"pays":"France",  
"projectName":"cccccccccc",  
"immat":"aaaaaaaaa",  
"machineName":"xxxxxxx-xxxxxxx"  
}

et un autre type : server  
avec des fichiers organisé comme ci-dessous:

```
   {
  "date" : "2017-10-04T08:15:03.079+0000",
  "serverName": "name1",
  "pays": "france",
  "status": "UP",
  }
```

---

<div class="post-metadata">

### Author: ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)
#### Post date: [October 11, 2017, 3:11pm UTC](https://discuss.elastic.co/t/structure-json-mapping-et-traitement-kibana/103520/4 "2017-10-11T15:11:16Z")

</div>

Avoir plusieurs types dans le même index n'est plus supporté en version 6.  
Donc un index par "type" fonctionnel.

Comme tu sembles collecter des données avec timestamp, je te recommande d'utiliser des index temporels.

Quelques slides ici:

> **[Polycon.io BCN: Managing your Black Friday Logs](https://speakerdeck.com/elastic/polycon-dot-io-bcn-managing-your-black-friday-logs)**
>
> Monitoring an entire application is not a simple task, but with the right tools, it is not a hard task either. However, events like Black Friday can push your application to the limit, and even cause crashes. As the system is stressed, it generates a...

Et une vidéo (en anglais):

---

<div class="post-metadata">

### Author: ![mat.bst](https://avatars.discourse-cdn.com/v4/letter/m/9e8a1a/32.png) [@mat.bst](https://discuss.elastic.co/u/mat.bst)
#### Post date: [October 12, 2017, 8:08am UTC](https://discuss.elastic.co/t/structure-json-mapping-et-traitement-kibana/103520/5 "2017-10-12T08:08:29Z")

</div>

Salut Dadoonet !

Tout d'abord merci pour l'aide que tu m'apportes dans cet océan qui m'est encore inconnu.  
Je ne suis pas sur de comprendre lorsque tu dis utiliser des index temporels.

Je n'utilise pas de données avec timestamp.

Voici comment se passe ma collecte de données : Toutes les 3 heures, je recois un fichier JSON de 3 à 4 mille lignes contenant toutes les infos que j'ai décrites à mon premier poste.

Une autre question que je me pose : Puis-je changer la structure de mon fichiers JSON pour passer du format que je recois au format suivant en me servant de Logstash

```
{
  "date":"2017-10-05T08:15:03.079+0000",
  "country":"France",
  "projectName":"cccccccccc",
  "immat":"aaaaaaaaa",
  "machineName":"xxxxxxx-xxxxxxx"
}

```

qui me permet de traiter mes données comme je le souhaite

Math

---

<div class="post-metadata">

### Author: ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)
#### Post date: [October 12, 2017, 12:49pm UTC](https://discuss.elastic.co/t/structure-json-mapping-et-traitement-kibana/103520/6 "2017-10-12T12:49:34Z")

</div>

> Je n'utilise pas de données avec timestamp.

bah si. Regarde:

> ```
> "date":"2017-10-05T08:15:03.079+0000",
> 
> ```

Ca ressemble à un timestamp, ça.

> Toutes les 3 heures, je recois un fichier JSON de 3 à 4 mille lignes contenant toutes les infos que j'ai décrites à mon premier poste.

Est-ce que leur champ "date" change?  
Si oui, ce qui serait sympa peut-être c'est d'avoir un historique sur plusieurs jours, mois, années de tes données. Mais ça c'est à toi de voir.

En tout cas, si tu le fais, je te conseille de faire par exemple un index par mois, genre `project-2017-10` dans lequel tu stockeras tes collectes du mois d'octobre.

Encore une fois, pas obligé.  
Si tu écrases systématiquement les vieilles données toutes les heures, je te conseille d'utiliser des alias:

- Je créé l'index `project-A` avec un alias `project` dessus. J'y indexe mes données.  
Je requête l'alias `project` quand je cherche.
- Je reçois un autre fichier. Je créé l'index `project-B`. J'y indexe mes données.  
Je switche l'alias `project` dessus. Je requête toujours l'alias `project` quand je cherche. Mes utilisateurs n'ont rien vu. Je détruis l'index `project-A`.

Et je recommence ainsi de suite.

> Puis-je changer la structure de mon fichiers JSON pour passer du format que je recois au format suivant en me servant de Logstash

Oui. C'est fait pour ça. Tu peux aussi regarder ingest node qui est plus simple (car pas de Logstash à maintenir) et sans doute applicable dans ton cas.

---

<div class="post-metadata">

### Author: ![mat.bst](https://avatars.discourse-cdn.com/v4/letter/m/9e8a1a/32.png) [@mat.bst](https://discuss.elastic.co/u/mat.bst)
#### Post date: [October 12, 2017, 1:08pm UTC](https://discuss.elastic.co/t/structure-json-mapping-et-traitement-kibana/103520/7 "2017-10-12T13:08:41Z")

</div>

Re,

- Je ne t'avais pas compris lorsque tu parlais de timestamp, pour moi un timestamp est le nombre de secondes écoulées entre une date et le 01/01/1970 !

- Oui le champs date change ! je reçois donc un total de 8 fichiers par jours avec forcément des dates différentes.

- Mon but est de pouvoir faire des statistiques d'utilisation de mon programme à travers le monde, je vais donc garder les infos très longtemps sur le serveur. Est-il mieux de créer un index par mois comme tu le recommande pour mon type de traitement ? ou créer un index pour mes utilisateurs et un autre pour les statistiques sur l'état des serveur est plus souhaitable ?

- Les données ne seront pas écrasés donc je ne vois pas l'utilité d'utiliser des alias pour le moment

- Merci bien pour la piste ingest node que je ne connaissais pas non plus, je vais y jetter un oeil.

- Petite question (probablement bete) supplémentaire, Peut on faire des chart Kibana en croisant les données de différents index ?

---

<div class="post-metadata">

### Author: ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)
#### Post date: [October 12, 2017, 1:46pm UTC](https://discuss.elastic.co/t/structure-json-mapping-et-traitement-kibana/103520/8 "2017-10-12T13:46:59Z")

</div>

> Mon but est de pouvoir faire des statistiques d'utilisation de mon programme à travers le monde, je vais donc garder les infos très longtemps sur le serveur. Est-il mieux de créer un index par mois comme tu le recommande pour mon type de traitement ? ou créer un index pour mes utilisateurs et un autre pour les statistiques sur l'état des serveur est plus souhaitable ?

La vidéo et les slides que j'ai postés précédemment répondent à ça.

> Les données ne seront pas écrasés donc je ne vois pas l'utilité d'utiliser des alias pour le moment

La vidéo et les slides que j'ai postés précédemment répondent à ça également.

> Peut on faire des chart Kibana en croisant les données de différents index ?

Sur le même chart, non pas vraiment. Sauf si fonctionnellement il s'agit des mêmes données (genre, je veux croiser les données de `project-2017-10` avec `project-2017-09`. Mais il ne s'agit pas vraiment de "croiser".

---

<div class="post-metadata">

### Author: ![mat.bst](https://avatars.discourse-cdn.com/v4/letter/m/9e8a1a/32.png) [@mat.bst](https://discuss.elastic.co/u/mat.bst)
#### Post date: [October 16, 2017, 9:41am UTC](https://discuss.elastic.co/t/structure-json-mapping-et-traitement-kibana/103520/9 "2017-10-16T09:41:57Z")

</div>

Bonjour Dadoonet,

J'ai parcouru les ressources que tu as partagé, j'y ai trouvé certaines infos que je cherchais!

Je me suis aussi penché sur ingest node, mais je ne trouve pas de processeur dont je pourrais me servir pour les actions que j'ai a appliqué a mes documents à indexer.

- ingest node peut-il m'aider à découper mon fichier JSON et plusieurs fichiers JSON pour y être indexer?
- ingest node peut-il m'aider à réorganiser la structure de mes documens ?

Math

---

<div class="post-metadata">

### Author: ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)
#### Post date: [October 16, 2017, 10:21am UTC](https://discuss.elastic.co/t/structure-json-mapping-et-traitement-kibana/103520/10 "2017-10-16T10:21:52Z")

</div>

1. Non
2. Oui

---

<div class="post-metadata">

### Author: ![mat.bst](https://avatars.discourse-cdn.com/v4/letter/m/9e8a1a/32.png) [@mat.bst](https://discuss.elastic.co/u/mat.bst)
#### Post date: [October 17, 2017, 8:52am UTC](https://discuss.elastic.co/t/structure-json-mapping-et-traitement-kibana/103520/11 "2017-10-17T08:52:33Z")

</div>

Bonjour Dadoonet,

Tes réponses m'ont déjà beaucoup aidé mais je t'avouerai me sentir vraiment perdu sur la stack ELK, je lis énormément d'informations différentes et je pense que tout se mélange plus ou moins.

Le principal problème que je rencontre pour le moment c'est la transformation de mon fichier JSON de ce format :

```
  {
   "date":"2017-10-05T08:15:03.079+0000",
   "Espagne":[
      {
         "serverName":"AZERTYUIKJHD",
         "satus":"UP",
         "users":[
            {
              "projectName":"cccccccccc",
              "immat":"aaaaaaaaa",
              "machineName":"xxxxxxx-xxxxxxx"
            },
            {
              "projectName":"cccccccccc",
              "immat":"aaaaaaaaa",
              "machineName":"xxxxxxx-xxxxxxx"
            },
            {
              "projectName":"cccccccccc",
              "immat":"aaaaaaaaa",
              "machineName":"xxxxxxx-xxxxxxx"
            },
            {
               "projectName":"cccccccccc",
               "immat":"aaaaaaaaa",
               "machineName":"xxxxxxx-xxxxxxx"
            }
         ]
      }
   ],

   "France":[
      {
         "serverName":"AZERTYUIKJHD",
         "status":"UP",
         "users":[
            {
               "projectName":"cccccccccc",
               "immat":"aaaaaaaaa",
               "machineName":"xxxxxxx-xxxxxxx"
            },
            {
               "projectName":"cccccccccc",
               "immat":"aaaaaaaaa",
               "machineName":"xxxxxxx-xxxxxxx"
            },
            {
               "projectName":"cccccccccc",
               "immat":"aaaaaaaaa",
               "machineName":"xxxxxxx-xxxxxxx"
            },
            {
               "projectName":"cccccccccc",
               "immat":"aaaaaaaaa",
               "machineName":"xxxxxxx-xxxxxxx"
            }
         ]            
      }
   ]
}

```

vers la format qui me permettrait de traiter mes données

```
{
  "date":"2017-10-05T08:15:03.079+0000",
  "country":"France",
  "projectName":"cccccccccc",
  "immat":"aaaaaaaaa",
  "machineName":"xxxxxxx-xxxxxxx"
}

```

J'ai regardé les différents processeurs de l'API ingest mais je n'y trouve pas ou ne vois pas ceux qui y sont adaptés

Pourrais-tu m'éclairer un petit peu a ce sujet ?

(J'en profite pour te remercier également pour les conférences que tu as pu tenir sur ELK, j'y ai beaucoup appris)

Math

---

<div class="post-metadata">

### Author: ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)
#### Post date: [October 17, 2017, 9:10am UTC](https://discuss.elastic.co/t/structure-json-mapping-et-traitement-kibana/103520/12 "2017-10-17T09:10:04Z")

</div>

ELK n'est plus nom utilisé. Sinon Beats se sent un peu seul 🙂  
Alors on dit suite elastic ou elastic stack... 😃

> J'ai regardé les différents processeurs de l'API ingest mais je n'y trouve pas ou ne vois pas ceux qui y sont adaptés

On s'est mal compris. Tu dois faire ce travail en amont.  
La donnée est générée par qui, par quoi ?  
Si tu as accès à l'application qui génère la donnée, alors change le code pour la transformer depuis la source. C'est le plus facile.

Sinon, il faut passer par un ETL type Talend ou Logstash.

Avec Logstash, je ne suis pas certain que ce soit facile. En tout cas je n'ai jamais fait ça. Peut-être que @colinsurprenant a une idée...

> (J'en profite pour te remercier également pour les conférences que tu as pu tenir sur ELK, j'y ai beaucoup appris)

Merci ! Heureux que ce soit utile 😊

---

<div class="post-metadata">

### Author: ![mat.bst](https://avatars.discourse-cdn.com/v4/letter/m/9e8a1a/32.png) [@mat.bst](https://discuss.elastic.co/u/mat.bst)
#### Post date: [October 17, 2017, 9:23am UTC](https://discuss.elastic.co/t/structure-json-mapping-et-traitement-kibana/103520/13 "2017-10-17T09:23:11Z")

</div>

Merci pour l'info !

la donnée est généré par un daemon qui me retourne toute les 3h ce dit fichier de 3000-4000 lignes !

je vais donc le modifier pour qu'il me crée mes fichiers séparément déjà pret à etre traiter.

Je suppose que l'on peut configurer l'elastic stack pour qu'il index tout document présent dans un dossier (confirmation ?)

---

<div class="post-metadata">

### Author: ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)
#### Post date: [October 17, 2017, 1:01pm UTC](https://discuss.elastic.co/t/structure-json-mapping-et-traitement-kibana/103520/14 "2017-10-17T13:01:11Z")

</div>

> Je suppose que l'on peut configurer l'elastic stack pour qu'il index tout document présent dans un dossier

Pas vraiment. Enfin je ne crois pas. Mais regarde mon projet [https://github.com/dadoonet/fscrawler/blob/master/README.md#indexing-json-docs](https://github.com/dadoonet/fscrawler/blob/master/README.md#indexing-json-docs)

Ca devrait aider.

---

<div class="post-metadata">

### Author: ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)
#### Post date: [November 14, 2017, 1:01pm UTC](https://discuss.elastic.co/t/structure-json-mapping-et-traitement-kibana/103520/15 "2017-11-14T13:01:24Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
