Kibana - Đang tải dữ liệu mẫu
Chúng ta đã thấy cách tải dữ liệu từ logstash lênasticsearch. Chúng tôi sẽ tải lên dữ liệu bằng logstash vàasticsearch tại đây. Nhưng về dữ liệu có các trường ngày, kinh độ và vĩ độ mà chúng ta cần sử dụng, chúng ta sẽ tìm hiểu trong các chương sắp tới. Chúng tôi cũng sẽ xem cách tải lên dữ liệu trực tiếp trong Kibana, nếu chúng tôi không có tệp CSV.
Trong chương này, chúng tôi sẽ trình bày các chủ đề sau:
- Sử dụng dữ liệu tải lên Logstash có các trường ngày, kinh độ và vĩ độ trong Elasticsearch
- Sử dụng công cụ Dev để tải lên dữ liệu hàng loạt
Sử dụng tải lên Logstash cho dữ liệu có các trường trong Elasticsearch
Chúng tôi sẽ sử dụng dữ liệu ở dạng định dạng CSV và dữ liệu tương tự được lấy từ Kaggle.com, nơi xử lý dữ liệu mà bạn có thể sử dụng để phân tích.
Dữ liệu về các lần khám bệnh tại nhà sẽ được sử dụng ở đây được lấy từ trang Kaggle.com.
Sau đây là các trường có sẵn cho tệp 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 như sau:
Sau đây là tệp conf được sử dụng với 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 }
}
Theo mặc định, logstash coi mọi thứ được tải lên trongasticsearch dưới dạng chuỗi. Trong trường hợp tệp CSV của bạn có trường ngày, bạn cần phải làm như sau để có định dạng ngày.
For date field −
date {
match => ["Visiting_Date","dd-MM-YYYY HH:mm"]
target => "Visiting_Date"
}
Trong trường hợp vị trí địa lý, tìm kiếm đàn hồi hiểu giống như -
"location": {
"lat":41.565505000000044,
"lon": 2.2349995750000695
}
Vì vậy, chúng tôi cần đảm bảo rằng chúng tôi có Kinh độ và Vĩ độ ở định dạng đàn hồi mà tìm kiếm cần. Vì vậy, trước tiên chúng ta cần chuyển đổi kinh độ và vĩ độ thành float và sau đó đổi tên nó để nó có sẵn như một phần củalocation đối tượng json với lat và lon. Mã cho cùng một được hiển thị ở đây -
mutate {
convert => { "Longitude" => "float" }
convert => { "Latitude" => "float" }
}
mutate {
rename => {
"Longitude" => "[location][lon]"
"Latitude" => "[location][lat]"
}
}
Để chuyển đổi các trường thành số nguyên, hãy sử dụng mã sau:
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"]}
Sau khi các trường được quan tâm, hãy chạy lệnh sau để tải lên dữ liệu trongasticsearch:
- Vào bên trong thư mục bin Logstash và chạy lệnh sau.
logstash -f logstash_homevisists.conf
- Sau khi hoàn tất, bạn sẽ thấy chỉ mục được đề cập trong tệp tin logstash trongasticsearch như hình dưới đây:
Bây giờ chúng ta có thể tạo mẫu chỉ mục trên chỉ mục đã tải lên ở trên và sử dụng nó để tạo hình ảnh trực quan.
Sử dụng Công cụ nhà phát triển để tải lên dữ liệu hàng loạt
Chúng tôi sẽ sử dụng Dev Tools từ Kibana UI. Công cụ Dev rất hữu ích để tải lên dữ liệu trong Elasticsearch mà không cần sử dụng Logstash. Chúng tôi có thể đăng, đặt, xóa, tìm kiếm dữ liệu chúng tôi muốn trong Kibana bằng Dev Tools.
Trong phần này, chúng tôi sẽ cố gắng tải dữ liệu mẫu trong chính Kibana. Chúng ta có thể sử dụng nó để thực hành với dữ liệu mẫu và tìm hiểu các tính năng của Kibana để hiểu rõ về Kibana.
Hãy để chúng tôi lấy dữ liệu json từ url sau và tải lên cùng một trong Kibana. Tương tự, bạn có thể thử bất kỳ dữ liệu json mẫu nào được tải bên trong Kibana.
Trước khi bắt đầu tải lên dữ liệu mẫu, chúng ta cần có dữ liệu json với các chỉ số để sử dụng trongasticsearch. Khi chúng tôi tải nó lên bằng logstash, logstash sẽ quan tâm đến việc thêm các chỉ số và người dùng không phải bận tâm về các chỉ số được đàn hồi yêu cầu.
Dữ liệu Json bình thường
[
{"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"}
]
Mã json được sử dụng với Kibana phải được lập chỉ mục như sau:
{"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"}
Lưu ý rằng có một dữ liệu bổ sung có trong jsonfile -{"index":{"_index":"nameofindex","_id":key}}.
Để chuyển đổi bất kỳ tệp json mẫu nào tương thích vớiasticsearch, ở đây chúng tôi có một đoạn mã nhỏ trong php sẽ xuất ra tệp json được cung cấp cho định dạng màasticsearch muốn -
Mã 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++;
}
?>
Chúng tôi đã lấy tệp todo json từ https://jsonplaceholder.typicode.com/todos và sử dụng mã php để chuyển đổi sang định dạng chúng ta cần tải lên trong Kibana.
Để tải dữ liệu mẫu, hãy mở tab công cụ dành cho nhà phát triển như hình dưới đây -
Bây giờ chúng ta sẽ sử dụng bảng điều khiển như hình trên. Chúng tôi sẽ lấy dữ liệu json mà chúng tôi nhận được sau khi chạy nó thông qua mã php.
Lệnh được sử dụng trong các công cụ dành cho nhà phát triển để tải lên dữ liệu json là:
POST _bulk
Lưu ý rằng tên của chỉ số chúng ta đang tạo là todo .
Khi bạn nhấp vào nút màu xanh lục, dữ liệu được tải lên, bạn có thể kiểm tra xem chỉ mục có được tạo hay không trong mục đàn hồi như sau:
Bạn có thể kiểm tra điều tương tự trong chính các công cụ dành cho nhà phát triển như sau:
Command −
GET /_cat/indices
Nếu bạn muốn tìm kiếm thứ gì đó trong chỉ mục của mình: todo, bạn có thể thực hiện điều đó như hình dưới đây -
Command in dev tool
GET /todo/_search
Kết quả của tìm kiếm trên như hình dưới đây:
Nó cung cấp cho tất cả các bản ghi có trong todoindex. Tổng số hồ sơ chúng tôi nhận được là 200.
Tìm kiếm Bản ghi trong Chỉ mục việc làm
Chúng ta có thể làm điều đó bằng cách sử dụng lệnh sau:
GET /todo/_search
{
"query":{
"match":{
"title":"delectusautautem"
}
}
}
Chúng tôi có thể tìm nạp các bản ghi phù hợp với tiêu đề mà chúng tôi đã đưa ra.