使用GeoServer作为Kibana离线地图

Kibana是一个开源的分析与可视化平台,可以用来搜索、查看、交互存放在Elasticsearch索引里的数据,使用各种不同的图表、表格、地图等,kibana能够很轻易地展示高级数据分析与可视化结果。

Kibana提供了Coordinate Map和Region Map两种基于地图的数据可视化方法,其地图由Elastic Maps Service提供服务。而在实际的使用场景下,有时无法连接外部互联网,因此无法使用该服务,本文介绍一种通过自行搭建GeoServer为Kibana提供地图服务的方法。

GeoServer介绍

GeoServer是一个基于java开发的软件服务器,使用开放地理空间联盟(Open Geospatial Consortium,OGC)提出的标准,可提供WMS兼容的地图服务。允许用户查看和编辑地图数据。利用 GeoServer 可以方便的发布地图数据,允许用户对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间共享空间地理信息。

运行Kibana

为了实验,本文使用Docker搭建了最简单的Kibana环境,运行命令如下:

$ docker run -d --name myelasticsearch \
   docker.elastic.co/elasticsearch/elasticsearch:6.2.3
$ docker run -d --link myelasticsearch:elasticsearch \
   -p 5601:5601 \
   --name  kiban \
   docker.elastic.co/kibana/kibana:6.2.3

运行GeoServer

首先在Natural Earth中下载SHP格式的地图数据,将其解压缩到本地,然后运行如下命令:

$ docker run -d --name geoserver \
   -p 8080:8080 \
   -v `pwd`/natural_earth_vector:/opt/geoserver/data_dir/data/ \ 
   kartoza/geoserver

配置GeoServer

登录GeoServer

通过http://localhost:8080/geoserver访问GeoServer页面,并使用初始用户名密码admin/geoserver登录。:

新建工作区

点击左侧工作区,选择新建工作区,并填写相应内容,然后点击提交

添加数据存储

点击左侧数据存储,选择添加新的数据存储,然后在新建数据源页面中,选择Directory of spatial files (shapefiles)

编辑的矢量数据源页面中填写相应内容,并在Shapefiles文件的目录选择框中,选择data_dir/data/10m_cultural/文件夹,点击确定

发布图层

依次选择图层->添加新的资源,在新建图层中选择刚刚创建的图层,点击图层ne_10m_admin_0_countries后面的发布按钮:

编辑图层页面的数据标签中,填写相应的内容,其中Native Bounding Box内容通过点击下面的从数据中计算获得,纬度/经度边框内容通过点击下面的Compute from native bounds获得:

在页面上方切换到发布标签,选中所有的Avilable Styles,然后点击中间的向右侧的箭头,然后点击下方的保存按钮:

查看地图

点击左侧的Layer Preview,然后点击图层后面的OpenLayers,即可查看地图:

配置Kibana

创建Index Pattern

使用Kibana需要首先创建Index Pattern,用于收集和检索Elasticsearch中的数据,本文使用Kibana和Elasticsearch中X-pack插件产生的数据作为实验,创建的Index Pattern为.monitoring-*

使用GeoServer

选择Kibana页面左侧的Visualize选项卡,点击Create a visualization,然后选择Coordinate Map,在左侧选择.monitoring-*作为检索数据源,然后选择Options标签,并选中下方的WMS compliant map server

然后填写GerServer服务相关的数据,即可使用GeoServer: