Kibana - Загрузка образцов данных
Мы видели, как загружать данные из logstash в elasticsearch. Мы будем загружать данные с помощью logstash и elasticsearch здесь. Но о данных, которые имеют поля даты, долготы и широты, которые нам нужно использовать, мы узнаем в следующих главах. Мы также увидим, как загружать данные прямо в Kibana, если у нас нет файла CSV.
В этой главе мы рассмотрим следующие темы -
- Использование данных для загрузки данных Logstash с полями даты, долготы и широты в Elasticsearch
- Использование инструментов разработчика для загрузки массовых данных
Использование загрузки Logstash для данных с полями в 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
}
Итак, нам нужно убедиться, что у нас есть долгота и широта в формате, который нужен эластичному поиску. Итак, сначала нам нужно преобразовать долготу и широту в float, а затем переименовать их, чтобы они были доступны как частьlocation json объект с 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 -
- Войдите в каталог bin Logstash и выполните следующую команду.
logstash -f logstash_homevisists.conf
- После этого вы должны увидеть индекс, указанный в файле конфигурации logstash в elasticsearch, как показано ниже -
Теперь мы можем создать шаблон индекса для загруженного выше индекса и использовать его в дальнейшем для создания визуализации.
Использование инструментов разработчика для загрузки массовых данных
Мы собираемся использовать Dev Tools из Kibana UI. Dev Tools полезны для загрузки данных в Elasticsearch без использования Logstash. Мы можем публиковать, размещать, удалять и искать нужные данные в Kibana с помощью Dev Tools.
В этом разделе мы попытаемся загрузить образцы данных в самом Kibana. Мы можем использовать его, чтобы попрактиковаться с примерами данных и поиграться с функциями Kibana, чтобы получить хорошее представление о Kibana.
Давайте возьмем данные json со следующего URL-адреса и загрузим их в Kibana. Точно так же вы можете попробовать загрузить в Kibana любой образец данных json.
Прежде чем мы начнем загружать образцы данных, нам нужно иметь данные 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.
Чтобы загрузить образцы данных, откройте вкладку инструментов разработчика, как показано ниже -
Теперь мы будем использовать консоль, как показано выше. Мы возьмем json-данные, которые мы получили после запуска через php-код.
Команда, которая будет использоваться в инструментах разработки для загрузки данных json:
POST _bulk
Обратите внимание, что имя создаваемого индекса - todo .
После того, как вы нажмете зеленую кнопку, данные будут загружены, вы можете проверить, создан ли индекс в elasticsearch, следующим образом:
Вы можете проверить то же самое в самих инструментах разработчика следующим образом:
Command −
GET /_cat/indices
Если вы хотите найти что-то в своем index: todo, вы можете сделать это, как показано ниже -
Command in dev tool
GET /todo/_search
Результат вышеуказанного поиска показан ниже -
Он дает все записи, присутствующие в todoindex. Всего мы получаем 200 записей.
Поиск записи в указателе задач
Мы можем сделать это с помощью следующей команды -
GET /todo/_search
{
"query":{
"match":{
"title":"delectusautautem"
}
}
}
Мы можем получить записи, которые соответствуют заданному нами заголовку.