Kibana - กำลังโหลดข้อมูลตัวอย่าง

เราได้เห็นวิธีอัปโหลดข้อมูลจาก logstash ไปยัง elasticsearch เราจะอัปโหลดข้อมูลโดยใช้ logstash และ elasticsearch ที่นี่ แต่เกี่ยวกับข้อมูลที่มีวันที่ลองจิจูดและละติจูดฟิลด์ที่เราจำเป็นต้องใช้เราจะเรียนรู้ในบทต่อ ๆ ไป นอกจากนี้เราจะดูวิธีอัปโหลดข้อมูลโดยตรงใน Kibana หากเราไม่มีไฟล์ CSV

ในบทนี้เราจะกล่าวถึงหัวข้อต่อไปนี้ -

  • การใช้ข้อมูลการอัปโหลด Logstash ที่มีช่องวันที่ลองจิจูดและละติจูดใน Elasticsearch
  • การใช้เครื่องมือ Dev เพื่ออัปโหลดข้อมูลจำนวนมาก

ใช้ Logstash upload สำหรับข้อมูลที่มีช่องใน Elasticsearch

เราจะใช้ข้อมูลในรูปแบบ CSV และข้อมูลเดียวกันนี้นำมาจาก Kaggle.com ซึ่งเกี่ยวข้องกับข้อมูลที่คุณสามารถใช้ในการวิเคราะห์ได้

ข้อมูลการพบแพทย์ที่บ้านที่จะใช้ที่นี่มาจากเว็บไซต์ Kaggle.com

ต่อไปนี้เป็นฟิลด์ที่ใช้ได้สำหรับไฟล์ 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 มีดังนี้ -

ต่อไปนี้เป็นไฟล์ conf ที่จะใช้กับ 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 }
}

ตามค่าเริ่มต้น logstash จะถือว่าทุกสิ่งที่จะอัปโหลดใน elasticsearch เป็นสตริง ในกรณีที่ไฟล์ CSV ของคุณมีช่องวันที่ที่คุณต้องทำต่อไปนี้เพื่อรับรูปแบบวันที่

For date field −

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

ในกรณีของตำแหน่งทางภูมิศาสตร์ elasticsearch เข้าใจเช่นเดียวกับ -

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

ดังนั้นเราต้องแน่ใจว่าเรามีลองจิจูดและละติจูดในรูปแบบ elasticsearch ต้องการ ก่อนอื่นเราต้องแปลงลองจิจูดและละติจูดให้ลอยและเปลี่ยนชื่อในภายหลังเพื่อให้พร้อมใช้งานเป็นส่วนหนึ่งของlocation json object ด้วย lat และ lon. รหัสเดียวกันแสดงอยู่ที่นี่ -

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

สำหรับการแปลงเขตข้อมูลเป็นจำนวนเต็มให้ใช้รหัสต่อไปนี้ -

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

เมื่อช่องได้รับการดูแลให้รันคำสั่งต่อไปนี้เพื่ออัปโหลดข้อมูลใน elasticsearch -

  • เข้าไปในไดเร็กทอรี Logstash bin และรันคำสั่งต่อไปนี้
logstash -f logstash_homevisists.conf
  • เมื่อเสร็จแล้วคุณจะเห็นดัชนีที่กล่าวถึงในไฟล์ logstash conf ใน elasticsearch ดังที่แสดงด้านล่าง -

ตอนนี้เราสามารถสร้างรูปแบบดัชนีบนดัชนีด้านบนที่อัปโหลดและใช้ต่อไปเพื่อสร้างภาพ

การใช้เครื่องมือ Dev เพื่ออัปโหลดข้อมูลจำนวนมาก

เราจะใช้ Dev Tools จาก Kibana UI Dev Tools มีประโยชน์ในการอัปโหลดข้อมูลใน Elasticsearch โดยไม่ต้องใช้ Logstash เราสามารถโพสต์ใส่ลบค้นหาข้อมูลที่เราต้องการใน Kibana โดยใช้ Dev Tools

ในส่วนนี้เราจะพยายามโหลดข้อมูลตัวอย่างใน Kibana เอง เราสามารถใช้เพื่อฝึกฝนกับข้อมูลตัวอย่างและเล่นกับคุณสมบัติของ Kibana เพื่อทำความเข้าใจ Kibana ได้เป็นอย่างดี

ให้เรานำข้อมูล json จาก url ต่อไปนี้มาอัพโหลดใน Kibana ในทำนองเดียวกันคุณสามารถลองใช้ข้อมูล json ตัวอย่างเพื่อโหลดภายใน Kibana

ก่อนที่เราจะเริ่มอัปโหลดข้อมูลตัวอย่างเราจำเป็นต้องมีข้อมูล json พร้อมดัชนีเพื่อใช้ใน elasticsearch เมื่อเราอัปโหลดโดยใช้ logstash logstash จะดูแลเพิ่มดัชนีและผู้ใช้ไม่ต้องกังวลเกี่ยวกับดัชนีที่ elasticsearch ต้องการ

ข้อมูล 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"}
]

รหัส json ที่จะใช้กับ Kibana จะต้องมีการจัดทำดัชนีดังนี้ -

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

โปรดทราบว่ามีข้อมูลเพิ่มเติมที่อยู่ใน jsonfile -{"index":{"_index":"nameofindex","_id":key}}.

ในการแปลงไฟล์ json ตัวอย่างใด ๆ ที่เข้ากันได้กับ elasticsearch ที่นี่เรามีโค้ดขนาดเล็กใน php ซึ่งจะส่งออกไฟล์ json ที่กำหนดให้เป็นรูปแบบที่ elasticsearch ต้องการ -

รหัส 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++;
   }
?>

เราได้นำไฟล์ todo json จากไฟล์ https://jsonplaceholder.typicode.com/todos และใช้โค้ด php เพื่อแปลงเป็นรูปแบบที่เราต้องการอัปโหลดใน Kibana

ในการโหลดข้อมูลตัวอย่างให้เปิดแท็บ dev tools ดังที่แสดงด้านล่าง -

ตอนนี้เราจะใช้คอนโซลตามที่แสดงด้านบน เราจะใช้ข้อมูล json ที่เราได้รับหลังจากเรียกใช้ผ่านโค้ด php

คำสั่งที่จะใช้ในเครื่องมือ dev เพื่ออัพโหลดข้อมูล json คือ -

POST _bulk

โปรดสังเกตว่าชื่อของดัชนีที่เรากำลังสร้างเป็นสิ่งที่ต้องทำ

เมื่อคุณคลิกปุ่มสีเขียวข้อมูลจะถูกอัปโหลดคุณสามารถตรวจสอบได้ว่ามีการสร้างดัชนีหรือไม่ใน Elasticsearch ดังนี้ -

คุณสามารถตรวจสอบสิ่งเดียวกันในเครื่องมือ dev ได้ดังนี้ -

Command −

GET /_cat/indices

หากคุณต้องการค้นหาบางสิ่งในดัชนีของคุณ: สิ่งที่ต้องทำคุณสามารถทำได้ดังที่แสดงด้านล่าง -

Command in dev tool

GET /todo/_search

ผลลัพธ์ของการค้นหาข้างต้นเป็นดังที่แสดงด้านล่าง -

จะให้บันทึกทั้งหมดที่มีอยู่ใน todoindex บันทึกทั้งหมดที่เราได้รับคือ 200

ค้นหาบันทึกในดัชนีสิ่งที่ต้องทำ

เราสามารถทำได้โดยใช้คำสั่งต่อไปนี้ -

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

เราสามารถดึงบันทึกที่ตรงกับชื่อที่เราให้ไว้ได้