elk-01d.logstash将mysql经纬度数据转为geo_point

前言

目标:通过logstash同步,将mysql 中的经纬度字符串转为 es 中的 geo_point 类型

这种字段类型有 4 中格式(官方示例):

第一种:

{
  "name":     "Chipotle Mexican Grill",
  "location": "40.715, -74.011" 
}

第二种:

{
  "name":     "Pala Pizza",
  "location": { 
    "lat":     40.722,
    "lon":    -73.989
  }
}

第三种:

{
  "name":     "Mini Munchies Pizza",
  "location": [ -73.983, 40.719 ] 
}

以第一种 geo_point 为例

新建索引

首先创建索引

PUT monitor_point_position
{
  "mappings": {
    "properties": {
      "location": {  
        "type": "geo_point"  
      }
    }
  }
}

logstash 脚本

input {  
  jdbc {  
    jdbc_driver_library => "/usr/share/logstash/output/mysql-connector-java-8.0.21.jar"  
    jdbc_driver_class => "com.mysql.jdbc.Driver"  
    jdbc_connection_string => "jdbc:mysql://localhost:3306/monitor"  
    jdbc_user => "root"  
    jdbc_password => "12345678"  
    statement => "select id,name,group_id,device_id,latitude,longitude,concat_ws(',',`latitude`, `longitude`) as location from monitor_point_position"  
    jdbc_paging_enabled => "true"  
    jdbc_page_size => "50000"  
    schedule => "*/5 * * * *"  
  }  
}  
filter {  
        # 转换经纬度坐标的字段类型  
        convert => ["latitude", "float"]  
        convert => ["longitude", "float"]  
    }  
    mutate {  
        # 这里要注意一下 一定要lat在前 lon在后,因为es geo_point的格式就是[lat, lon]  
        rename => {  
            "lat" => "[location][latitude]"  
            "lon" => "[location][longitude]"  
        }  
    }  
}  
output {  
  stdout {  
    codec => json_lines  
  }  
  elasticsearch {  
    hosts => ["localhost:9200"]  
    index => "monitor_point_position"  
    document_id => "%{id}"  
    user => "elastic"  
    password => "12345678"  
  }  
}

Tips: rename 插件中,一定要lat在前,lon在后, 否则es解析经纬度坐标会报错:faild to parse field gis of type [geo_point]

启动

./logstash -f logstash-sync-mysql.conf
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值