基于 Elasticsearch + kibana 实现 IP 地址分布地图可视化

r660926
发布于 2022-4-22 15:56
浏览
0收藏

基于 Elasticsearch + kibana 实现 IP 地址分布地图可视化-鸿蒙开发者社区
 •  有一批特定用途(文末揭晓)的 IP 地址。
 •  想通过地图形式可视化展示 IP 地址对应的经纬度坐标的分布。
基于 Elasticsearch + kibana 实现 IP 地址分布地图可视化-鸿蒙开发者社区
基础方案如下:


 •  第一步:IP 地址转经纬度坐标。


实现借助第三方工具:https://ipstack.com/


 •  第二步:经纬度坐标借助可视化工具(如:echarts)渲染展示。


这时候不免进一步思考:


有没有更快捷的方案呢?ELK 能实现不?


已知的知识点:


 •  Elasticsearch 支持 Geo-point、Geo-shape 数据类型。


 •  Kibana 支持 Coordinate Map(坐标图)、Region Map(区域地图)可视化地图展示。


两个已知知识点一整合不就是基于 Elasticsearch + Kibana 的可视化展示方案吗?


且慢,有没有更快捷的 IP 地址转经纬度坐标的信息呢?


有的。Ingest 数据预处理管道的 GeoIP processor (处理器)就能达到这个目的。


整体架构图如下图所示:
 基于 Elasticsearch + kibana 实现 IP 地址分布地图可视化-鸿蒙开发者社区
官方解读如下:GeoIp processor 根据来自 Maxmind 数据库的数据添加有关IP地址地理位置的信息。


默认情况下,GeoIp processor 将此信息添加到 geoip 字段下。GeoIp processor 可以解析 IPv4 和 IPv6 地址。


更多  Maxmind 数据库信息参见:


https://dev.maxmind.com/geoip/geoip2/geolite2/


在 Elasticsearch 早期版本中 GeoIp processor 需要安装插件才能使用。7.X 版本后,ES 已自带,不需要安装。


基于 Elasticsearch + kibana 实现 IP 地址分布地图可视化-鸿蒙开发者社区
4.1 步骤 1:创建预处理管道
基于 Elasticsearch + kibana 实现 IP 地址分布地图可视化-鸿蒙开发者社区

该预处理的目的就是:将输入的 IP 字段转换为:Geoip 类型。具体 Geoip 类型张什么样?后面会揭晓。


4.2 步骤 2:创建索引
基于 Elasticsearch + kibana 实现 IP 地址分布地图可视化-鸿蒙开发者社区

考虑到后面要批量导入数千条+数据,我们采用了取巧的方式。


使用了在创建索引的时候指定缺省管道(index.default_pipeline)的方式。


这样的好处是:


 •  灵活:用户只关心 bulk 批量写入数据。


 •  零写入代码修改:甚至写入数据的代码一行都不需要改就可以。


4.3 步骤 3:写入一条数据
基于 Elasticsearch + kibana 实现 IP 地址分布地图可视化-鸿蒙开发者社区

这时候,我们查看一下完整的 Mapping 张什么样?
基于 Elasticsearch + kibana 实现 IP 地址分布地图可视化-鸿蒙开发者社区基于 Elasticsearch + kibana 实现 IP 地址分布地图可视化-鸿蒙开发者社区

写入后的数据,查看返回如下:
基于 Elasticsearch + kibana 实现 IP 地址分布地图可视化-鸿蒙开发者社区

有点长,铭毅解读一下:


第一:geoip 是 object 类型,它有几个子字段,含义如下:


 •  geoip.city_name:城市


 •  geoip.continent_name:大陆名称


 •  geoip.country_iso_code:国家编码


 •  geoip.location:经纬度坐标,必须是:geo_point 类型


 •  geoip.region_iso_code:地域编码


 •  geoip.region_name:地域名称


第二:为节省存储,Mapping 可以优化。


 •  比如:所有的默认字符串类型改成:keyword 类型。


第三:为了后面的作图必须将 location 设置为 geo_point 类型。


以上三个步骤:就完成了单条数据的写入。


4.4 步骤 4:kibana 可视化展示


4.4.1 创建关联索引模板


目的:创建可视化需要关联的索引数据。
 基于 Elasticsearch + kibana 实现 IP 地址分布地图可视化-鸿蒙开发者社区
4.4.2  创建坐标图


选择左侧导航栏的 Visualize,然后选择右侧 Create new visualization,然后再选择:Coordinate Map 即可。

 

本文Elasticsearch + kibana 均选用 7.2  版本。
 基于 Elasticsearch + kibana 实现 IP 地址分布地图可视化-鸿蒙开发者社区
4.4.3  可视化基础设置,执行后,就能看到可视化结果。


如前所述,这里要强调的是:geoip.location 必须是 geo_point 类型。
 基于 Elasticsearch + kibana 实现 IP 地址分布地图可视化-鸿蒙开发者社区
基于第 4 节的导入一条数据,python 批量 bulk 导入本地文件数据后,可视化效果如下图所示:


 •  因为全局设置了 default_pipeline,写入数据不需要做任何特殊处理了。
 基于 Elasticsearch + kibana 实现 IP 地址分布地图可视化-鸿蒙开发者社区
换 dark 风格显示如下:
 基于 Elasticsearch + kibana 实现 IP 地址分布地图可视化-鸿蒙开发者社区
PS:文章开头提到的:特定用途——通过模拟 port scan 获取的全网部分开放 9200 端口的公网 IP(仅个人学习用,未任何其他用途)。

基于 Elasticsearch + kibana 实现 IP 地址分布地图可视化-鸿蒙开发者社区

 •  基础方案大家都能想到,有没有更简单的、更快捷的方式呢?是需要我们考虑的。


 •  本文抛砖引玉,Kibana 新版本的可视化功能更强大,需要学习的点还有很多......

分类
收藏
回复
举报
回复
    相关推荐