ELK生態:Logstash通過sql導入地理座標到ES,數據格式爲對象

簡介

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數據導入工具

 

總結

實踐是檢驗認識真理性的唯一標準,自己動手,豐衣足食~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章