Мы видели, как загружать данные из logstash вasticsearch. Мы будем загружать данные, используя logstash иasticsearch здесь. Но о данных, которые имеют поля даты, долготы и широты, которые нам нужно использовать, мы узнаем в следующих главах. Мы также увидим, как загружать данные непосредственно в Kibana, если у нас нет файла CSV.
В этой главе мы рассмотрим следующие темы:
- Использование Logstash для загрузки данных с полями даты, долготы и широты в Elasticsearch
- Использование инструментов Dev для загрузки больших объемов данных
Использование загрузки 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 рассматривает все, что будет загружено в эластичный поиск, как строку. Если в вашем CSV-файле есть поле даты, вам необходимо выполнить следующее, чтобы получить формат даты.
Для поля даты —
date { match => ["Visiting_Date","dd-MM-YYYY HH:mm"] target => "Visiting_Date" }
В случае географического местоположения эластичный поиск понимает так же, как —
"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"]}
После того, как с полями позаботятся, выполните следующую команду для загрузки данных вasticsearch —
- Зайдите в каталог Logstash bin и выполните следующую команду.
logstash -f logstash_homevisists.conf
- Когда вы закончите, вы должны увидеть индекс, упомянутый в файле conf logstash вasticsearch, как показано ниже —
Теперь мы можем создать шаблон индекса для загруженного выше индекса и использовать его для создания визуализации.
Использование Dev Tools для загрузки групповых данных
Мы собираемся использовать Dev Tools из Kibana UI. Dev Tools полезен для загрузки данных в Elasticsearch без использования Logstash. Мы можем публиковать, размещать, удалять, искать нужные нам данные в Kibana, используя Dev Tools.
В этом разделе мы попытаемся загрузить примеры данных в самой Kibana. Мы можем использовать его, чтобы попрактиковаться с образцами данных и поиграть с функциями Kibana, чтобы получить хорошее представление о Kibana.
Давайте возьмем данные json из следующего URL и загрузим их в Kibana. Точно так же вы можете попробовать любые образцы данных JSON, которые будут загружены в Kibana.
Перед тем, как мы начнем загружать пример данных, нам нужно иметь данные json с индексами, которые будут использоваться вasticsearch. Когда мы загружаем его с помощью logstash, logstash заботится о добавлении индексов, и пользователю не нужно беспокоиться об индексах, которые требуются эластичным поиском.
Нормальные данные 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-файла, совместимого сasticsearch, здесь у нас есть небольшой код в php, который выведет json-файл, предоставленный в формате, который требуетсявести-поиск —
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++; } ?>
Мы взяли jdo-файл todo с https://jsonplaceholder.typicode.com/todos и используем php-код для преобразования в формат, который нам нужен для загрузки в Kibana.
Чтобы загрузить пример данных, откройте вкладку dev tools, как показано ниже —
Теперь мы будем использовать консоль, как показано выше. Мы возьмем данные json, которые мы получили после запуска через php-код.
Команда, которая будет использоваться в инструментах разработки для загрузки данных JSON, —
POST _bulk
Обратите внимание, что имя индекса, который мы создаем, — todo .
После того, как вы нажмете зеленую кнопку, данные загружены, вы можете проверить, создан ли индекс или нет вasticsearch следующим образом:
Вы можете проверить то же самое в инструментах разработчика, как показано ниже:
Команда —
GET /_cat/indices
Если вы хотите найти что-то в своем индексе: todo, вы можете сделать это, как показано ниже —
Команда в инструменте разработки
GET /todo/_search
Результат поиска выше как показано ниже —
Это дает все записи, присутствующие в todoindex. Всего записей мы получаем 200.
Поиск записи в индексе todo
Мы можем сделать это с помощью следующей команды —
GET /todo/_search { "query":{ "match":{ "title":"delectusautautem" } } }
Мы можем получить записи, которые соответствуют названию, которое мы дали.