Kibana - Chargement des exemples de données

Nous avons vu comment télécharger des données de logstash vers elasticsearch. Nous téléchargerons les données à l'aide de logstash et elasticsearch ici. Mais à propos des données qui ont des champs de date, de longitude et de latitude que nous devons utiliser, nous en apprendrons dans les prochains chapitres. Nous verrons également comment télécharger des données directement dans Kibana, si nous n'avons pas de fichier CSV.

Dans ce chapitre, nous aborderons les sujets suivants -

  • Utilisation de Logstash télécharger des données avec des champs de date, de longitude et de latitude dans Elasticsearch
  • Utilisation des outils de développement pour télécharger des données en masse

Utilisation du téléchargement Logstash pour les données comportant des champs dans Elasticsearch

Nous allons utiliser des données sous forme de format CSV et la même chose est tirée de Kaggle.com qui traite des données que vous pouvez utiliser pour une analyse.

Les données des visites médicales à domicile à utiliser ici sont extraites du site Kaggle.com.

Voici les champs disponibles pour le fichier CSV -

["Visit_Status","Time_Delay","City","City_id","Patient_Age","Zipcode","Latitude","Longitude",
"Pathology","Visiting_Date","Id_type","Id_personal","Number_Home_Visits","Is_Patient_Minor","Geo_point"]

Le Home_visits.csv est le suivant -

Ce qui suit est le fichier de configuration à utiliser avec logstash -

input {
   file {
      path => "C:/kibanaproject/home_visits.csv"
      start_position => "beginning"
      sincedb_path => "NUL"
   }
}
filter {
   csv {
      separator => ","
      columns =>
      ["Visit_Status","Time_Delay","City","City_id","Patient_Age",
      "Zipcode","Latitude","Longitude","Pathology","Visiting_Date",
      "Id_type","Id_personal","Number_Home_Visits","Is_Patient_Minor","Geo_point"]
   }
   date {
      match => ["Visiting_Date","dd-MM-YYYY HH:mm"]
      target => "Visiting_Date"
   }
   mutate {convert => ["Number_Home_Visits", "integer"]}
   mutate {convert => ["City_id", "integer"]}
   mutate {convert => ["Id_personal", "integer"]}
   mutate {convert => ["Id_type", "integer"]}
   mutate {convert => ["Zipcode", "integer"]}
   mutate {convert => ["Patient_Age", "integer"]}
   mutate {
      convert => { "Longitude" => "float" }
      convert => { "Latitude" => "float" }
   }
   mutate {
      rename => {
         "Longitude" => "[location][lon]"
         "Latitude" => "[location][lat]"
      }
   }
}
output {
   elasticsearch {
      hosts => ["localhost:9200"]
      index => "medicalvisits-%{+dd.MM.YYYY}"
   }
   stdout {codec => json_lines }
}

Par défaut, logstash considère que tout est téléchargé dans elasticsearch comme une chaîne. Incase votre fichier CSV a un champ de date que vous devez faire ci-dessous pour obtenir le format de date.

For date field −

date {
   match => ["Visiting_Date","dd-MM-YYYY HH:mm"]
   target => "Visiting_Date"
}

En cas de géolocalisation, elasticsearch comprend la même chose que -

"location": {
   "lat":41.565505000000044,
   "lon": 2.2349995750000695
}

Nous devons donc nous assurer que nous avons la longitude et la latitude dans le format dont elasticsearch en a besoin. Nous devons donc d'abord convertir la longitude et la latitude en flottant, puis le renommer pour qu'il soit disponible dans le cadre delocation objet json avec lat et lon. Le code pour le même est montré ici -

mutate {
      convert => { "Longitude" => "float" }
      convert => { "Latitude" => "float" }
   }
mutate {
   rename => {
      "Longitude" => "[location][lon]"
      "Latitude" => "[location][lat]"
   }
}

Pour convertir des champs en entiers, utilisez le code suivant -

mutate {convert => ["Number_Home_Visits", "integer"]}
mutate {convert => ["City_id", "integer"]}
mutate {convert => ["Id_personal", "integer"]}
mutate {convert => ["Id_type", "integer"]}
mutate {convert => ["Zipcode", "integer"]}
mutate {convert => ["Patient_Age", "integer"]}

Une fois les champs pris en charge, exécutez la commande suivante pour télécharger les données dans elasticsearch -

  • Accédez au répertoire bin Logstash et exécutez la commande suivante.
logstash -f logstash_homevisists.conf
  • Une fois terminé, vous devriez voir l'index mentionné dans le fichier de configuration logstash dans elasticsearch comme indiqué ci-dessous -

Nous pouvons maintenant créer un modèle d'index sur l'index ci-dessus téléchargé et l'utiliser davantage pour créer une visualisation.

Utilisation des outils de développement pour télécharger des données en masse

Nous allons utiliser les outils de développement de Kibana UI. Les outils de développement sont utiles pour télécharger des données dans Elasticsearch, sans utiliser Logstash. Nous pouvons publier, mettre, supprimer, rechercher les données que nous voulons dans Kibana en utilisant les outils de développement.

Dans cette section, nous allons essayer de charger des exemples de données dans Kibana lui-même. Nous pouvons l'utiliser pour nous entraîner avec les exemples de données et jouer avec les fonctionnalités de Kibana pour bien comprendre Kibana.

Prenons les données json de l'url suivante et importons-les dans Kibana. De même, vous pouvez essayer n'importe quel exemple de données json à charger dans Kibana.

Avant de commencer à télécharger les exemples de données, nous devons disposer des données json avec des index à utiliser dans elasticsearch. Lorsque nous le téléchargeons à l'aide de logstash, logstash prend soin d'ajouter les indices et l'utilisateur n'a pas à se soucier des index requis par elasticsearch.

Données Json normales

[
   {"type":"act","line_id":1,"play_name":"Henry IV", 
   
   "speech_number":"","line_number":"","speaker":"","text_entry":"ACT I"},
   {"type":"scene","line_id":2,"play_name":"Henry IV",
   "speech_number":"","line_number":"","speaker":"","text_entry":"SCENE I.London. The palace."},
   {"type":"line","line_id":3,"play_name":"Henry IV",
   "speech_number":"","line_number":"","speaker":"","text_entry":
   "Enter KING HENRY, LORD JOHN OF LANCASTER, the 
   EARL of WESTMORELAND, SIR WALTER BLUNT, and others"}
]

Le code json à utiliser avec Kibana doit être indexé comme suit -

{"index":{"_index":"shakespeare","_id":0}}
{"type":"act","line_id":1,"play_name":"Henry IV", 
"speech_number":"","line_number":"","speaker":"","text_entry":"ACT I"}
{"index":{"_index":"shakespeare","_id":1}}
{"type":"scene","line_id":2,"play_name":"Henry IV",
"speech_number":"","line_number":"","speaker":"",
"text_entry":"SCENE I. London. The palace."}
{"index":{"_index":"shakespeare","_id":2}}
{"type":"line","line_id":3,"play_name":"Henry IV",
"speech_number":"","line_number":"","speaker":"","text_entry":
"Enter KING HENRY, LORD JOHN OF LANCASTER, the EARL 
of WESTMORELAND, SIR WALTER BLUNT, and others"}

Notez qu'il y a une donnée supplémentaire qui va dans le jsonfile -{"index":{"_index":"nameofindex","_id":key}}.

Pour convertir n'importe quel exemple de fichier json compatible avec elasticsearch, nous avons ici un petit code en php qui affichera le fichier json donné au format souhaité par elasticsearch -

Code PHP

<?php
   $myfile = fopen("todo.json", "r") or die("Unable to open file!"); // your json
   file here
   $alldata = fread($myfile,filesize("todo.json"));
   fclose($myfile);
   $farray = json_decode($alldata);
   $afinalarray = [];
   $index_name = "todo";
   $i=0;
   $myfile1 = fopen("todonewfile.json", "w") or die("Unable to open file!"); //
   writes a new file to be used in kibana dev tool
   foreach ($farray as $a => $value) {
      $_index = json_decode('{"index": {"_index": "'.$index_name.'", "_id": "'.$i.'"}}');
      fwrite($myfile1, json_encode($_index));
      fwrite($myfile1, "\n");
      fwrite($myfile1, json_encode($value));
      fwrite($myfile1, "\n");
      $i++;
   }
?>

Nous avons pris le fichier todo json de https://jsonplaceholder.typicode.com/todos et utilisez le code php pour convertir au format que nous devons télécharger dans Kibana.

Pour charger les exemples de données, ouvrez l'onglet des outils de développement comme indiqué ci-dessous -

Nous allons maintenant utiliser la console comme indiqué ci-dessus. Nous prendrons les données json que nous avons obtenues après les avoir exécutées via du code php.

La commande à utiliser dans les outils de développement pour télécharger les données json est -

POST _bulk

Notez que le nom de l'index que nous créons est todo .

Une fois que vous avez cliqué sur le bouton vert, les données sont téléchargées, vous pouvez vérifier si l'index est créé ou non dans elasticsearch comme suit -

Vous pouvez vérifier la même chose dans les outils de développement comme suit -

Command −

GET /_cat/indices

Si vous souhaitez rechercher quelque chose dans votre index: todo, vous pouvez le faire comme indiqué ci-dessous -

Command in dev tool

GET /todo/_search

Le résultat de la recherche ci-dessus est comme indiqué ci-dessous -

Il donne tous les enregistrements présents dans le todoindex. Le total des enregistrements que nous obtenons est de 200.

Rechercher un enregistrement dans l'index todo

Nous pouvons le faire en utilisant la commande suivante -

GET /todo/_search
{
   "query":{
      "match":{
         "title":"delectusautautem"
      }
   }
}

Nous sommes en mesure de récupérer les enregistrements qui correspondent au titre que nous avons donné.