- Kibana 教程
- Kibana - 主页
- Kibana - 概述
- Kibana - 环境设置
- Kibana - Elk Stack 简介
- Kibana - 加载示例数据
- Kibana - 管理
- Kibana - 发现
- Kibana - 聚合和指标
- Kibana - 创建可视化
- Kibana - 使用图表
- Kibana - 使用图表
- Kibana - 使用热图
- 使用坐标图
- Kibana - 使用区域地图
- 使用规范和目标
- Kibana - 使用画布
- Kibana - 创建仪表板
- Kibana - 泰美狮
- Kibana - 开发工具
- Kibana - 监控
- 使用 Kibana 创建报告
- Kibana 有用资源
- Kibana - 快速指南
- Kibana - 有用的资源
- Kibana - 讨论
Kibana - 加载示例数据
我们已经了解了如何将数据从logstash上传到elasticsearch。我们将在这里使用logstash和elasticsearch上传数据。但是关于我们需要使用的具有日期、经度和纬度字段的数据,我们将在接下来的章节中学习。如果我们没有 CSV 文件,我们还将了解如何直接在 Kibana 中上传数据。
在本章中,我们将讨论以下主题 -
- 使用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 如下 -
以下是与logstash一起使用的conf文件 -
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 文件有日期字段,您需要执行以下操作来获取日期格式。
对于日期字段 -
date { match => ["Visiting_Date","dd-MM-YYYY HH:mm"] target => "Visiting_Date" }
对于地理位置,elasticsearch 的理解与 -
"location": { "lat":41.565505000000044, "lon": 2.2349995750000695 }
所以我们需要确保我们的经度和纬度采用elasticsearch 需要的格式。因此,首先我们需要将经度和纬度转换为 float,然后将其重命名,以便它可以作为带有lat和lon的位置json 对象的一部分。相同的代码如下所示 -
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
- 完成后,您应该会看到 Elasticsearch 中的 Logstashconf 文件中提到的索引,如下所示 -
我们现在可以在上面上传的索引上创建索引模式,并进一步使用它来创建可视化。
使用开发工具上传批量数据
我们将使用 Kibana UI 中的开发工具。开发工具有助于在 Elasticsearch 中上传数据,而无需使用 Logstash。我们可以使用 Dev Tools 在 Kibana 中发布、放置、删除、搜索我们想要的数据。
在本节中,我们将尝试在 Kibana 本身中加载示例数据。我们可以使用它来练习示例数据并尝试 Kibana 功能,以更好地理解 Kibana。
让我们从以下 url 中获取 json 数据并将其上传到 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"} ]
与 Kibana 一起使用的 json 代码必须具有索引,如下所示 -
{"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}}。
要转换与elasticsearch兼容的任何示例json文件,这里我们在php中有一个小代码,它将输出elasticsearch想要的格式的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++; } ?>
我们从https://jsonplaceholder.typicode.com/todos获取了 todo json 文件,并使用 php 代码转换为我们需要在 Kibana 中上传的格式。
要加载示例数据,请打开开发工具选项卡,如下所示 -
我们现在将使用如上所示的控制台。我们将通过 php 代码运行后获取 json 数据。
开发工具中用于上传 json 数据的命令是 -
POST _bulk
请注意,我们创建的索引的名称是todo。
单击绿色按钮后,数据就会上传,您可以检查 Elasticsearch 中是否创建了索引,如下所示 -
您可以在开发工具本身中检查相同内容,如下所示 -
命令 -
GET /_cat/indices
如果你想在你的index:todo中搜索一些东西,你可以这样做,如下所示 -
开发工具中的命令
GET /todo/_search
上述搜索的输出如下所示 -
它给出了 todoindex 中存在的所有记录。我们得到的总记录是 200 条。
在 todo 索引中搜索记录
我们可以使用以下命令来做到这一点 -
GET /todo/_search { "query":{ "match":{ "title":"delectusautautem" } } }
我们能够获取与我们给定的标题匹配的记录。