Kibana - ładowanie przykładowych danych

Widzieliśmy, jak przesyłać dane z logstash do elastycznego wyszukiwania. W tym miejscu prześlemy dane za pomocą logstash i flexsearch. Ale o danych, które mają pola daty, długości i szerokości geograficznej, których potrzebujemy, dowiemy się w kolejnych rozdziałach. Zobaczymy również, jak przesłać dane bezpośrednio w Kibanie, jeśli nie mamy pliku CSV.

W tym rozdziale zajmiemy się następującymi tematami -

  • Korzystanie z Logstash do przesyłania danych z polami daty, długości i szerokości geograficznej w Elasticsearch
  • Korzystanie z narzędzi programistycznych do przesyłania danych zbiorczych

Używanie przesyłania Logstash do danych zawierających pola w Elasticsearch

Zamierzamy używać danych w formacie CSV i to samo pochodzi z Kaggle.com, który zajmuje się danymi, które można wykorzystać do analizy.

Dane dotyczące domowych wizyt lekarskich, które mają być tutaj wykorzystane, pochodzą z witryny Kaggle.com.

Poniżej znajdują się pola dostępne dla pliku 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"]

Strona Home_visits.csv wygląda następująco -

Poniżej znajduje się plik conf, który ma być używany z 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 }
}

Domyślnie logstash traktuje wszystko, co ma zostać przesłane w elasticsearch, jako ciąg. Dodaj, że plik CSV zawiera pole daty, które musisz wykonać, aby uzyskać format daty.

For date field −

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

W przypadku lokalizacji geograficznej, Flexiblesearch rozumie to samo, co -

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

Musimy więc upewnić się, że mamy długość i szerokość geograficzną w formacie, którego potrzebuje Elasticsearch. Więc najpierw musimy przekonwertować długość i szerokość geograficzną na zmiennoprzecinkowe, a później zmienić ich nazwę, aby była dostępna jako częśćlocation json z lat i lon. Kod tego samego jest pokazany tutaj -

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

Aby przekonwertować pola na liczby całkowite, użyj następującego kodu -

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

Po zadbaniu o pola uruchom następujące polecenie, aby przesłać dane w elastyfikatorze -

  • Przejdź do katalogu bin Logstash i uruchom następujące polecenie.
logstash -f logstash_homevisists.conf
  • Po zakończeniu powinieneś zobaczyć indeks wymieniony w pliku konfiguracyjnym logstash w elasticsearch, jak pokazano poniżej -

Możemy teraz utworzyć wzorzec indeksu na przesłanym powyżej indeksie i użyć go dalej do tworzenia wizualizacji.

Korzystanie z narzędzi programistycznych do przesyłania danych zbiorczych

Będziemy używać narzędzi deweloperskich z interfejsu użytkownika Kibana. Narzędzia deweloperskie są przydatne do przesyłania danych w Elasticsearch bez korzystania z Logstash. Możemy publikować, umieszczać, usuwać, wyszukiwać dane, które chcemy w Kibana za pomocą narzędzi deweloperskich.

W tej sekcji spróbujemy załadować przykładowe dane w samym Kibanie. Możemy go użyć do ćwiczenia z przykładowymi danymi i zabawy z funkcjami Kibana, aby dobrze zrozumieć Kibana.

Weźmy dane json z następującego adresu URL i prześlijmy to samo do Kibana. Podobnie możesz spróbować załadować dowolne przykładowe dane json do programu Kibana.

Zanim zaczniemy przesyłać przykładowe dane, musimy mieć dane json z indeksami do wykorzystania w elastyfikatorze. Kiedy przesyłamy go za pomocą logstash, logstash dba o dodanie indeksów, a użytkownik nie musi przejmować się indeksami, które są wymagane przez elastyczne wyszukiwanie.

Normalne dane Json

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

Kod json używany z Kibana musi być zindeksowany w następujący sposób -

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

Zauważ, że istnieją dodatkowe dane, które znajdują się w pliku json -{"index":{"_index":"nameofindex","_id":key}}.

Aby przekonwertować dowolny przykładowy plik json zgodny z elastsearch, mamy tutaj mały kod w php, który wyprowadzi podany plik json do formatu, którego chce Elasticsearch -

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

Pobraliśmy plik json todo z https://jsonplaceholder.typicode.com/todos i użyj kodu php, aby przekonwertować do formatu, który musimy przesłać w Kibanie.

Aby załadować przykładowe dane, otwórz kartę narzędzi programistycznych, jak pokazano poniżej -

Będziemy teraz używać konsoli, jak pokazano powyżej. Weźmiemy dane json, które otrzymaliśmy po uruchomieniu go przez kod php.

Polecenie używane w narzędziach deweloperskich do przesyłania danych json to -

POST _bulk

Zauważ, że nazwa indeksu, który tworzymy, to todo .

Po kliknięciu zielonego przycisku dane zostaną przesłane, możesz sprawdzić, czy indeks został utworzony, czy nie, w elasticsearch w następujący sposób -

Możesz sprawdzić to samo w samych narzędziach deweloperskich w następujący sposób -

Command −

GET /_cat/indices

Jeśli chcesz przeszukać coś w swoim indeksie: todo, możesz to zrobić, jak pokazano poniżej -

Command in dev tool

GET /todo/_search

Wyniki powyższego wyszukiwania są pokazane poniżej -

Podaje wszystkie rekordy obecne w todoindex. Łączna liczba rekordów, które otrzymujemy, to 200.

Wyszukaj rekord w liście zadań do wykonania

Możemy to zrobić za pomocą następującego polecenia -

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

Jesteśmy w stanie pobrać rekordy zgodne z podanym przez nas tytułem.