Kibana - Caricamento dati campione

Abbiamo visto come caricare i dati da logstash a elasticsearch. Caricheremo i dati utilizzando logstash ed elasticsearch qui. Ma sui dati che hanno campi di data, longitudine e latitudine che dobbiamo utilizzare, impareremo nei prossimi capitoli. Vedremo anche come caricare i dati direttamente in Kibana, se non abbiamo un file CSV.

In questo capitolo tratteremo i seguenti argomenti:

  • Utilizzando Logstash, carica i dati con i campi di data, longitudine e latitudine in Elasticsearch
  • Utilizzo degli strumenti di sviluppo per caricare dati in blocco

Utilizzo del caricamento Logstash per i dati con campi in Elasticsearch

Useremo i dati sotto forma di formato CSV e lo stesso è tratto da Kaggle.com che tratta i dati che puoi utilizzare per un'analisi.

I dati delle visite mediche domiciliari da utilizzare qui sono raccolti dal sito Kaggle.com.

Di seguito sono riportati i campi disponibili per il file 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"]

Home_visits.csv è il seguente:

Quello che segue è il file di configurazione da utilizzare con 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 }
}

Per impostazione predefinita, logstash considera tutto da caricare in elasticsearch come stringa. Nel caso in cui il tuo file CSV abbia il campo della data, devi eseguire le seguenti operazioni per ottenere il formato della data.

For date field −

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

In caso di geolocalizzazione, elasticsearch comprende lo stesso di:

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

Quindi dobbiamo assicurarci di avere Longitudine e Latitudine nel formato richiesto da elasticsearch. Quindi prima dobbiamo convertire longitudine e latitudine in float e successivamente rinominarlo in modo che sia disponibile come parte dilocation json oggetto con lat e lon. Il codice per lo stesso è mostrato qui -

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

Per convertire i campi in numeri interi, utilizzare il codice seguente:

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"]}

Una volta che i campi sono stati curati, esegui il seguente comando per caricare i dati in elasticsearch -

  • Entra nella directory bin di Logstash ed esegui il seguente comando.
logstash -f logstash_homevisists.conf
  • Una volta terminato, dovresti vedere l'indice menzionato nel file conf logstash in elasticsearch come mostrato di seguito -

Ora possiamo creare un modello di indice sull'indice sopra caricato e utilizzarlo ulteriormente per la creazione della visualizzazione.

Utilizzo degli strumenti di sviluppo per caricare dati in blocco

Utilizzeremo Dev Tools dall'interfaccia utente di Kibana. Dev Tools è utile per caricare i dati in Elasticsearch, senza utilizzare Logstash. Possiamo pubblicare, inserire, eliminare, cercare i dati che vogliamo in Kibana utilizzando Dev Tools.

In questa sezione, proveremo a caricare dati di esempio nello stesso Kibana. Possiamo usarlo per esercitarci con i dati di esempio e giocare con le funzionalità di Kibana per ottenere una buona comprensione di Kibana.

Prendiamo i dati json dal seguente URL e carichiamo lo stesso in Kibana. Allo stesso modo, puoi provare qualsiasi dato json di esempio da caricare all'interno di Kibana.

Prima di iniziare a caricare i dati di esempio, è necessario disporre dei dati json con indici da utilizzare in elasticsearch. Quando lo carichiamo utilizzando logstash, logstash si occupa di aggiungere gli indici e l'utente non deve preoccuparsi degli indici richiesti da elasticsearch.

Dati Json normali

[
   {"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"}
]

Il codice json da utilizzare con Kibana deve essere indicizzato come segue:

{"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"}

Nota che ci sono dati aggiuntivi che vanno nel jsonfile -{"index":{"_index":"nameofindex","_id":key}}.

Per convertire qualsiasi file json di esempio compatibile con elasticsearch, qui abbiamo un piccolo codice in php che produrrà il file json dato nel formato che elasticsearch vuole -

Codice 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++;
   }
?>

Abbiamo preso il file json di todo da https://jsonplaceholder.typicode.com/todos e usa il codice php per convertirlo nel formato che dobbiamo caricare in Kibana.

Per caricare i dati di esempio, apri la scheda Strumenti di sviluppo come mostrato di seguito:

Ora useremo la console come mostrato sopra. Prenderemo i dati json che abbiamo ottenuto dopo averli eseguiti tramite codice php.

Il comando da utilizzare negli strumenti di sviluppo per caricare i dati json è:

POST _bulk

Nota che il nome dell'indice che stiamo creando è todo .

Dopo aver fatto clic sul pulsante verde i dati sono stati caricati, puoi controllare se l'indice è stato creato o meno in elasticsearch come segue:

Puoi controllare lo stesso negli strumenti di sviluppo stesso come segue:

Command −

GET /_cat/indices

Se vuoi cercare qualcosa nel tuo index: todo, puoi farlo come mostrato di seguito -

Command in dev tool

GET /todo/_search

L'output della ricerca precedente è come mostrato di seguito:

Fornisce tutti i record presenti nell'indice todo. Il totale dei record che stiamo ottenendo è 200.

Cerca un record nell'indice delle cose da fare

Possiamo farlo usando il seguente comando:

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

Siamo in grado di recuperare i record che corrispondono al titolo che abbiamo assegnato.