Kibana的Map无法渲染经纬度坐标数据的解决办法

2021-04-07 15:02:11 浏览数 (1)

最近有客户反馈使用kibana的Maps功能无法展示经纬度坐标数据。

排查思路:

基于客户配置的索引,在Maps中进行地图的配置,在配置视图后,发现异常报错

异常错误显示获取geo_point类型字段“geoip_location”字段。初步推断是由于字段类型不匹配导致在地图渲染时无法根据声明为geo_point类型字段进行经纬度坐标的渲染。

排查客户侧索引字段配置:

在模板中客户侧配置做了将对应的location字段声明为geo_point类型(这一步是正确的)

在具体的字段中客户对location字段重新进行了类型的指定

将经度和纬度都指定为了float类型。

援引官方文档对于经纬坐标的解释:

https://www.elastic.co/guide/cn/elasticsearch/guide/current/lat-lon-formats.html

location字段被声明为geo_point后,我们就可以索引包含了经纬度信息的文档了。经纬度信息的形式可以是字符串、数组或者对象;

官方文档关于location字段配置如下:

代码语言:javascript复制
PUT /attractions
{
  "mappings": {
      "properties": {
        "name": {
          "type": "keyword"
        },
        "location": {
          "type": "geo_point"
        }
      }
  }
}

将字段类型直接设置为geo_point类型。

基于官网描述 三种不同的方式进行数据的put;

代码语言:javascript复制
PUT /attractions/_doc/1?pretty {"name":"Chipotle Mexican Grill","location":"40.715, -74.011"}   
PUT /attractions/_doc/2?pretty {"name":"Pala Pizza","location":{"lat":40.722,"lon":-73.989}}   
PUT /attractions/_doc/3?pretty {"name":"Mini Munchies Pizza","location":[-73.983,40.719]}

然后进行地图的创建测试;是可以进行经纬度渲染的。

然后基于客户侧索引 进行字段的调整(只保留关键字段,其他字段省略)

代码语言:javascript复制
PUT /test-ip-map
{
    "aliases" : { },
    "mappings" : {
      "dynamic_templates" : [
        {
          "geoip.location" : {
            "match" : "geoip.location",
            "mapping" : {
              "type" : "geo_point"
            }
          }
        }
        }
      ],
      "properties" : {
        "geoip" : {
          "properties" : {
            "location" : {
              "type" : "geo_point"
            }
            
        }
      }
    }

}

然后将客户索引的经纬度数据reindex进新索引之后

location字段会被自动解析为经度和纬度

然后在进行地图的创建与测试

原因分析:

由于客户索引中为location字段专门指定了float类型,虽然在模板中进行了geo_point的声明,但是数据在写入索引后,Maps不能够正确识别。所以在经纬度字段直接使用geo_point类型即可。

配置地图的步骤

1.创建包含location字段的索引;并正确写入数据。

2.基于需要展示经纬度数据的索引,在 index pattern中创建相应的视图。

3.在Kibana Maps中 create new map ;

4.点击add layer,为地图添加数据源;

5.选择Documents,添加数据源;

6.选择之前已经创建完成的视图

7.然后Maps会自动根据配置的视图,去扫描索引中包含的location字段,同时可以设置不同的结果集返回选项。

8.然后点击add layer;添加地图名称,设置相关图层参数(如果使用默认可以不用修改图层参数);点击保存,即可在地图中渲染出对应视图下包含的索引的经纬度坐标;

Maps加载数据的原理与discover功能较为类似。

在地图生效后,即可在顶部的搜索框添加filter,或者编写KQL语句,进行数据的过滤与查询

Kibana Maps功能官方文档链接;目前只有6.8版本参考;7.x版本暂未更新

https://www.elastic.co/guide/en/kibana/6.8/maps-getting-started.html

0 人点赞