📅  最后修改于: 2020-11-30 05:14:48             🧑  作者: Mango
我们已经看到了如何从logstash上传数据到elasticsearch。我们将在此处使用logstash和elasticsearch上传数据。但是,关于需要使用的具有日期,经度和纬度字段的数据,我们将在接下来的章节中学习。如果没有CSV文件,我们还将了解如何直接在Kibana中上传数据。
在本章中,我们将涵盖以下主题-
我们将使用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
}
因此,我们需要确保弹性搜索需要的格式具有经度和纬度。因此,首先我们需要将经度和纬度转换为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 -f logstash_homevisists.conf
现在,我们可以在上传的上述索引上创建索引模式,并将其进一步用于创建可视化。
我们将使用Kibana UI中的开发工具。开发工具有助于在不使用Logstash的情况下在Elasticsearch中上传数据。我们可以使用开发工具在Kibana中发布,放置,删除,搜索所需的数据。
在本节中,我们将尝试在Kibana本身中加载示例数据。我们可以使用它来练习样本数据,并尝试使用Kibana功能,以更好地了解Kibana。
让我们从以下URL中获取json数据,并将其上传到Kibana中。同样,您可以尝试将任何样本json数据加载到Kibana中。
在开始上传示例数据之前,我们需要具有可在Elasticsearch中使用的带有索引的json数据。当我们使用logstash上传它时,logstash会小心地添加索引,并且用户不必费心elasticsearch所需的索引。
[
{"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文件-
$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。
我们可以使用以下命令来做到这一点-
GET /todo/_search
{
"query":{
"match":{
"title":"delectusautautem"
}
}
}
我们能够获取与给定标题匹配的记录。