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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 1、需求有一批特定用途(文末揭晓)的 IP 地址。想通过地图形式可视化展示 IP 地址对应的经纬度坐标的分布。

2、方案探讨

基础方案如下:


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


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


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


这时候不免进一步思考:


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


已知的知识点:


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


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


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


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


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


整体架构图如下图所示:

image.png

3、GeoIp processor 介绍

官方解读如下: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 已自带,不需要安装。


4、导入一条数据实战一把

4.1 步骤 1:创建预处理管道

PUT _ingest/pipeline/geoip_pipeline

{

 "description" : "Add geoip info",

 "processors" : [

   {

     "geoip" : {

       "field" : "ip"

     }

   }

 ]

}

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


4.2 步骤 2:创建索引

DELETE niu_20210215

PUT niu_20210215

{

 "settings": {

   "index.default_pipeline": "geoip_pipeline",

   "number_of_shards": 1,

   "number_of_replicas": 0

 },

 "mappings": {

   "properties": {

     "geoip": {

       "properties": {

         "location": {

           "type": "geo_point"

         }

       }

     },

     "ip":{

       "type":"keyword"

     }

   }

 }

}

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


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


这样的好处是:


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


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


4.3 步骤 3:写入一条数据

PUT niu_20210215/_doc/1

{

 "ip": "8.8.8.8"

}

这时候,我们查看一下完整的 Mapping 张什么样?


{

 "niu_20210215" : {

   "mappings" : {

     "properties" : {

       "geoip" : {

         "properties" : {

           "city_name" : {

             "type" : "text",

             "fields" : {

               "keyword" : {

                 "type" : "keyword",

                 "ignore_above" : 256

               }

             }

           },

           "continent_name" : {

             "type" : "text",

             "fields" : {

               "keyword" : {

                 "type" : "keyword",

                 "ignore_above" : 256

               }

             }

           },

           "country_iso_code" : {

             "type" : "text",

             "fields" : {

               "keyword" : {

                 "type" : "keyword",

                 "ignore_above" : 256

               }

             }

           },

           "location" : {

             "type" : "geo_point"

           },

           "region_iso_code" : {

             "type" : "text",

             "fields" : {

               "keyword" : {

                 "type" : "keyword",

                 "ignore_above" : 256

               }

             }

           },

           "region_name" : {

             "type" : "text",

             "fields" : {

               "keyword" : {

                 "type" : "keyword",

                 "ignore_above" : 256

               }

             }

           }

         }

       },

       "ip" : {

         "type" : "keyword"

       }

     }

   }

 }

}

写入后的数据,查看返回如下:


"_source" : {

 "geoip" : {

   "continent_name" : "North America",

   "country_iso_code" : "US",

   "location" : {

     "lon" : -97.822,

     "lat" : 37.751

   }

 },

 "ip" : "8.8.8.8"

}

有点长,铭毅解读一下:


第一: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 创建关联索引模板

目的:创建可视化需要关联的索引数据。

image.png

4.4.2  创建坐标图

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

本文Elasticsearch + kibana 均选用 7.2  版本。

image.png

4.4.3  可视化基础设置,执行后,就能看到可视化结果。

如前所述,这里要强调的是:geoip.location 必须是 geo_point 类型。

image.png

5、批量导入数据后可视化展示

基于第 4 节的导入一条数据,python 批量 bulk 导入本地文件数据后,可视化效果如下图所示:

  • 因为全局设置了 default_pipeline,写入数据不需要做任何特殊处理了。
  • image.png
  • image.png
相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
2月前
|
数据可视化 Java Windows
Elasticsearch入门-环境安装ES和Kibana以及ES-Head可视化插件和浏览器插件es-client
本文介绍了如何在Windows环境下安装Elasticsearch(ES)、Elasticsearch Head可视化插件和Kibana,以及如何配置ES的跨域问题,确保Kibana能够连接到ES集群,并提供了安装过程中可能遇到的问题及其解决方案。
Elasticsearch入门-环境安装ES和Kibana以及ES-Head可视化插件和浏览器插件es-client
|
19天前
|
存储 监控 安全
|
1月前
|
自然语言处理 搜索推荐 关系型数据库
elasticsearch学习六:学习 全文搜索引擎 elasticsearch的语法,使用kibana进行模拟测试(持续更新学习)
这篇文章是关于Elasticsearch全文搜索引擎的学习指南,涵盖了基本概念、命令风格、索引操作、分词器使用,以及数据的增加、修改、删除和查询等操作。
22 0
elasticsearch学习六:学习 全文搜索引擎 elasticsearch的语法,使用kibana进行模拟测试(持续更新学习)
|
1月前
|
存储 JSON Java
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
这篇文章是关于Elasticsearch的学习指南,包括了解Elasticsearch、版本对应、安装运行Elasticsearch和Kibana、安装head插件和elasticsearch-ik分词器的步骤。
126 0
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
|
1月前
|
运维 监控 数据可视化
大数据-171 Elasticsearch ES-Head 与 Kibana 配置 使用 测试
大数据-171 Elasticsearch ES-Head 与 Kibana 配置 使用 测试
65 1
|
2月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
2月前
|
JSON 自然语言处理 数据库
ElasticSearch基础1——索引和文档。Kibana,RestClient操作索引和文档+黑马旅游ES库导入
概念、ik分词器、倒排索引、索引和文档的增删改查、RestClient对索引和文档的增删改查
ElasticSearch基础1——索引和文档。Kibana,RestClient操作索引和文档+黑马旅游ES库导入
|
12天前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
29 5
|
3月前
|
数据可视化 Docker 容器
一文教会你如何通过Docker安装elasticsearch和kibana 【详细过程+图解】
这篇文章提供了通过Docker安装Elasticsearch和Kibana的详细过程和图解,包括下载镜像、创建和启动容器、处理可能遇到的启动失败情况(如权限不足和配置文件错误)、测试Elasticsearch和Kibana的连接,以及解决空间不足的问题。文章还特别指出了配置文件中空格的重要性以及环境变量中字母大小写的问题。
一文教会你如何通过Docker安装elasticsearch和kibana 【详细过程+图解】
|
3月前
|
JSON 自然语言处理 数据库
Elasticsearch从入门到项目部署 安装 分词器 索引库操作
这篇文章详细介绍了Elasticsearch的基本概念、倒排索引原理、安装部署、IK分词器的使用,以及如何在Elasticsearch中进行索引库的CRUD操作,旨在帮助读者从入门到项目部署全面掌握Elasticsearch的使用。
下一篇
无影云桌面