logstash 将数据库中的经纬度 转化成 geo

xiaoxiao2025-07-07  8

最近在使用ELK工具,主要是使用kibana进行数据可视化,该工具非常方便,墙裂推荐!!!

要使用coordinate map时,需要将数据转换成它需要的geo_point类型,网上有很多使用geoip插件将ip转换成经纬度的教程,这里没有ip,只有经纬度数据。

下图为geo_point的几种形式,这里我采用的是最后一种,数组的格式

由于我不太懂这里面的语法,只是简单的使用,所以这里只能给出我的解决方案,以及踩过的坑,没有原理解释。

主要在filter中,“rdc_lon”和“rdc_lat”为我数据库中的字段名称,首先将经纬度的值赋给新的变量 geoip.location,然后将其转化为float类型,要注意的是【经度,纬度】,数组格式经度在前

将其转换为float后,第二步是将location变成 geo_point的类型,我没有自己写模板,logstash自带的用来处理日志的logstash-*模板就能完成此种转换,因此在输出到elasticsearch中,将index的命名设为 logstash-XXXX 就能使用默认的模板。

这里踩的坑是,获取数据库里的字段rdc_lon,rdc_lat时,由于数据库里设置了大小写,在数据库中实际字段名称为“RDC_lon”,“RDC_lat”,没想到在logstash不考虑大小写,因此一直没有获取到值。

1 input { 2 jdbc { 3 jdbc_driver_library => "/opt/logstash/lib/sqlserverdriver/mssql-jdbc-6.4.0.jre8.jar" 4 jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver" 5 jdbc_connection_string => "jdbc:sqlserver://0.0.0.0:1433;databaseName=databaseName;" 6 jdbc_user => "user" 7 jdbc_password => "password" 8 #schedule => "* * * * *" 9 jdbc_default_timezone => "Asia/Shanghai" 10 statement => "SELECT * FROM [table_name]" 11 } 12 } 13 filter { 14 mutate { 15 add_field => ["[geoip][location]", "%{rdc_lon}"] 16 add_field => ["[geoip][location]", "%{rdc_lat}"] 17 } 18 mutate { 19 convert => ["[geoip][location]", "float"] 20 } 21 } 22 23 output { 24 elasticsearch { 25 index => "logstash-geo_demo" 26 hosts => ["0.0.0.0:9200"] 27 }

最后的效果图如下

转载请注明原文地址: https://www.6miu.com/read-5032683.html

最新回复(0)