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"
}
}
}
เราสามารถดึงบันทึกที่ตรงกับชื่อที่เราให้ไว้ได้