簡介
1. ELK生態之Logstash通過sql導入地理座標GeoPoint數據到Elasticserch;
2. 數據源:mysql數據表,數據表含地理座標——lon(經度),lat(緯度);
3. Elasticsearch和Logstash版本:5.6.1;
4. GeoPoint地理位置信息可以使用三種數據格式表示:
(1) 以半角逗號分割的字符串形式表示——"lat,lon",緯度在前,經度在後;
(2) 明確以 lat 和 lon 作爲屬性的對象,自定義前後;
(3) 以數組形式表示——[lon,lat],經度在前,緯度在後;
5. 這裏logstash導入es地理座標的數據格式爲:對象格式;
6. 其餘格式參考:
數組格式:ELK生態:Logstash通過sql導入地理座標到ES,數據格式爲數組;
字符串格式:ELK生態:Logstash通過sql導入地理座標到ES,數據格式爲字符串;
實踐
- location.sql文件內容:
SELECT
id,
addr,
lat,
lon,
postTime
FROM
location_tab
WHERE
postTime>:sql_last_value
- logstash.conf配置:
#1.連接數據庫,數據輸入階段
input {
stdin {
}
jdbc {
jdbc_driver_library => "../lib/mysql-connector-java-5.1.44.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string=>"jdbc:mysql://127.0.0.1:3306/master"
jdbc_user => "root"
jdbc_password => "root"
jdbc_paging_enabled => "false"
jdbc_page_size => "1000"
lowercase_column_names => "false"
statement_filepath => "/data/es/logstash-5.6.1/config/sql/location.sql"
schedule => "* * * * *"
clean_run => false
record_last_run => false
last_run_metadata_path => "/data/es/logstash-5.6.1/data/location.lastrun"
use_column_value => true
tracking_column => postTime
type=>"location"
}
}
#2.過濾格式化數據階段
filter {
json {
source => "message"
remove_field => ["message"]
}
#將sql裏的兩個座標字段指定數據格式
mutate {
convert => { "lon" => "float" }
convert => { "lat" => "float" }
}
#將兩個座標字段合併成一個字段
mutate {
rename => {
"lon" => "[location][lon]"
"lat" => "[location][lat]"
}
}
}
#3.數據輸出到ES階段
output {
#控制檯輸出
stdout {
codec => json_lines
}
#插入到es
if[type] == "location"{
elasticsearch {
hosts => "127.0.0.1:9200"
index => "location_index"
document_type => "location_index"
#document_id => "%{id}"
#flush_size => 1000
#idle_flush_time => 15
#覆蓋模板,不需要可註釋掉,通用模板下載:https://download.csdn.net/download/alan_liuyue/11241484
#template_overwrite=>true
#template=>"/data/es/logstash-5.6.1/template/logstash.json"
}
}
}
注意事項
1. 導入地理座標數據需要指定字段location數據格式爲geo_point,指定的方法有多種,這裏講兩種,有興趣的程序員可繼續深入挖掘;
(1)利用template模板指定location字段爲地理座標類型(geo_point);
(2)直接在kibana控制檯指定location座標爲地理座標類型(geo_point);
PUT location_index/location_index/_mapping
{
"properties": {
"location":{
"type": "geo_point"
}
}
2. 在java中使用SpringData接入Elasticsearch,創建ElasticsearchRepository操作數據時,需要將實體類的地理座標字段設置成以下格式:
/**
* 座標位置
*/
@GeoPointField
private String location;
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
3. logstash.conf文件配置的數據輸入階段input,連接jdbc數據庫,增量讀取數據表數據的操作詳情,可參考博主另外一篇博客,這裏不再詳述:ELK生態:linux系統安裝和配置logstash數據導入工具
總結
實踐是檢驗認識真理性的唯一標準,自己動手,豐衣足食~