ELK提供了GEO相关操作以支持在地图上展示地理信息,以项目中设备的位置分布为例进行演示。
以项目中设备信息为模板创建测试数据,包含字段为"设备编号"、"设备管理单位"、"设备型号"、"纬度"、"经度"、"备注"。使用Logstash导入测试数据,这里的测试数据包含在多个CSV文件中,所以顺便测试了多文件导入。
为了让数据符合地图数据的要求,首先创建模板,目的是让位置数据为geo_point类型。
PUT _template/equipment { "order": 10, "index_patterns": [ "equipment" ], "settings": { "number_of_replicas": 0, "number_of_shards": 1 }, "mappings": { "properties": { "location": { "type": "geo_point" } } }, "aliases": {} }
使用Logstash导入数据。
input { stdin { } file{ path => "D:/测试数据/设备信息1.csv" start_position => "beginning" } } input { stdin { } file{ path => "D:/测试数据/设备信息2.csv" start_position => "beginning" } } input { stdin { } file{ path => "D:/测试数据/设备信息3.csv" start_position => "beginning" } } filter { csv { separator => "," columns => ["设备编号","设备管理单位","设备型号","纬度","经度","备注"] } mutate { convert => {"纬度" => "float"} convert => {"经度" => "float"} add_field => ["location","%{经度},%{纬度}"] remove_field => ["message"] } }多文件导入可以在配置文件中设置多个input,最好是结构一致,避免二次处理。
关键点是在过滤器filter中使用mutate组件,将经度、纬度字段分别转换为浮点类型,同时增加一个额外的字段“location”,用于将经纬度组合成一个坐标点。输出至Elasticsearch,并将索引命名为equipment。
首先仍然是在Kibana中添加索引模式。
之后选择“地图Map”,点击“创建图层Add Layer”。
在创建图层面板中选择数据源为“文档”。
选择索引模式为刚刚创建的“equipment”。在地理空间字段中选择“location”字段。如果没有第2步 的索引模板,导入数据中的location字段为“text”类型,就无法在这里作为地理空间字段使用。
确认添加图层,并配置可视化选项。包括地图缩放级别、默认查询范围、图标样式以及弹出框包含的内容。
保存后发布,即可作为地图图表浏览查看。