Kibana - Örnek Verileri Yükleme

Logstash'tan elasticsearch'e nasıl veri yükleyeceğimizi gördük. Logstash ve elasticsearch kullanarak verileri buraya yükleyeceğiz. Ancak kullanmamız gereken tarih, boylam ve enlem alanlarına sahip veriler hakkında ilerleyen bölümlerde öğreneceğiz. Bir CSV dosyamız yoksa, verileri doğrudan Kibana'ya nasıl yükleyeceğimizi de göreceğiz.

Bu bölümde aşağıdaki konuları ele alacağız -

  • Elasticsearch'te tarih, boylam ve enlem alanlarına sahip Logstash yükleme verilerini kullanma
  • Toplu verileri yüklemek için Geliştirme araçlarını kullanma

Elasticsearch'te alanlara sahip veriler için Logstash yüklemesini kullanma

Verileri CSV biçiminde kullanacağız ve aynısı, analiz için kullanabileceğiniz verilerle ilgilenen Kaggle.com'dan alınır.

Burada kullanılacak ev tıbbi ziyaretleri verileri Kaggle.com sitesinden alınır.

Aşağıdakiler, CSV dosyası için kullanılabilen alanlardır -

["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 aşağıdaki gibidir -

Aşağıdaki, logstash ile kullanılacak conf dosyasıdır -

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

Varsayılan olarak, logstash, elasticsearch'e yüklenecek her şeyi dizge olarak kabul eder. CSV dosyanızda tarih alanı varsa, tarih formatını almak için aşağıdakileri yapmanız gerekir.

For date field −

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

Coğrafi konum söz konusu olduğunda, elasticsearch aynı şeyi anlar -

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

Bu nedenle, elasticsearch'ün ihtiyaç duyduğu biçimde Boylam ve Enlem'e sahip olduğumuzdan emin olmalıyız. Bu nedenle, önce enlem ve boylamı float'a dönüştürmeli ve daha sonra yeniden adlandırmalıyız, böylece bir parçası olarak kullanılabilirlocation json nesnesi lat ve lon. Aynı kod burada gösterilmektedir -

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

Alanları tam sayıya dönüştürmek için aşağıdaki kodu kullanın -

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

Alanlar tamamlandıktan sonra, verileri elasticsearch'e yüklemek için aşağıdaki komutu çalıştırın -

  • Logstash bin dizinine gidin ve aşağıdaki komutu çalıştırın.
logstash -f logstash_homevisists.conf
  • Tamamlandıktan sonra, logstash conf dosyasında belirtilen dizini elasticsearch'te aşağıda gösterildiği gibi görmelisiniz -

Artık yüklenen yukarıdaki dizinde dizin deseni oluşturabilir ve bunu görselleştirme oluşturmak için daha fazla kullanabiliriz.

Toplu Verileri Yüklemek için Geliştirme Araçlarını Kullanma

Kibana UI'den Dev Tools kullanacağız. Dev Tools, Logstash kullanmadan Elasticsearch'e veri yüklemek için yararlıdır. Dev Tools kullanarak Kibana'da istediğimiz verileri gönderebilir, koyabilir, silebilir, arayabiliriz.

Bu bölümde, örnek verileri Kibana'nın kendisine yüklemeye çalışacağız. Kibana'yı iyi anlamak için örnek verilerle pratik yapmak ve Kibana özellikleriyle oynamak için kullanabiliriz.

Aşağıdaki url'den json verisini alalım ve aynısını Kibana'ya yükleyelim. Benzer şekilde, herhangi bir örnek json verisinin Kibana içine yüklenmesini deneyebilirsiniz.

Örnek verileri yüklemeye başlamadan önce, elasticsearch'te kullanılacak indeksli json verilerine sahip olmamız gerekir. Logstash kullanarak yüklediğimizde, logstash endeksleri eklemeye özen gösterir ve kullanıcının elasticsearch'ün gerektirdiği endeksler konusunda endişelenmesine gerek kalmaz.

Normal Json Verileri

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

Kibana ile kullanılacak json kodu aşağıdaki gibi dizine eklenmelidir -

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

Json dosyasına giden ek bir veri olduğunu unutmayın -{"index":{"_index":"nameofindex","_id":key}}.

Elasticsearch ile uyumlu herhangi bir örnek json dosyasını dönüştürmek için, burada php'de verilen json dosyasını elasticsearch'ün istediği formata çıkaracak küçük bir kodumuz var -

PHP Kodu

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

Todo json dosyasını şuradan aldık: https://jsonplaceholder.typicode.com/todos ve Kibana'da yüklememiz gereken biçime dönüştürmek için php kodunu kullanın.

Örnek verileri yüklemek için aşağıda gösterildiği gibi geliştirme araçları sekmesini açın -

Şimdi konsolu yukarıda gösterildiği gibi kullanacağız. Php kodu üzerinden çalıştırdıktan sonra elde ettiğimiz json verilerini alacağız.

Json verilerini yüklemek için dev araçlarında kullanılacak komut -

POST _bulk

Oluşturduğumuz dizinin adının todo olduğuna dikkat edin .

Yeşil düğmeye tıkladığınızda veriler yüklenir, dizinin elasticsearch'te oluşturulup oluşturulmadığını aşağıdaki gibi kontrol edebilirsiniz -

Aynı şeyi geliştirme araçlarının kendisinde aşağıdaki gibi kontrol edebilirsiniz -

Command −

GET /_cat/indices

Dizininizde bir şey aramak istiyorsanız: yapılacaklar, bunu aşağıda gösterildiği gibi yapabilirsiniz -

Command in dev tool

GET /todo/_search

Yukarıdaki aramanın çıktısı aşağıda gösterildiği gibidir -

Todoindex'te bulunan tüm kayıtları verir. Aldığımız toplam rekor 200'dür.

Yapılacak İş Dizininde bir Kayıt arayın

Bunu aşağıdaki komutu kullanarak yapabiliriz -

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

Verdiğimiz başlık ile eşleşen kayıtları getirebiliyoruz.