您现在的位置是:首页 > 文章详情

运用 geoip 处理器来丰富 Elasticsearch 数据

日期:2020-07-28点击:450

Geoip 处理器可以解析 IPv4 和 IPv6 地址,根据来自 Maxmind 数据库的数据添加有关 IP 地址地理位置的信息,并将此信息添加到 geoip 字段下。
默认情况下,ingest-geoip 模块与 Maxmind 的 GeoLite2 城市,GeoLite2 国家/地区和 GeoLite2 ASN geoip2 数据库一起提供,可根据 CCA-ShareAlike 4.0 许可使用。 有关更多详细信息,请参见http://dev.maxmind.com/geoip/geoip2/geolite2/

geoip 处理器可以与 Maxmind 等其他 GeoIP2 数据库一起运行。

1、将文件复制到 ingest-geoip 配置目录中。
2、 database_file 选项应用于指定自定义数据库的文件名。
3、自定义数据库文件必须未压缩存储。
4、ingest-geoip 配置目录位于 $ES_CONFIG/ingest-geoip。

我们先来使用几个简单的例子来展示如何使用 geoip 这个处理器。

示例一、使用默认城市数据库

使用默认城市数据库,将地理信息添加到基于 ip 字段的 geoip 字段

PUT _ingest/pipeline/geoip { "description" : "Add geoip info", "processors" : [ { "geoip" : { "field" : "ip" } } ] } PUT my_index/_doc/my_id?pipeline=geoip { "ip": "8.8.8.8" } GET my_index/_doc/my_id

我们知道上面的 IP 地址是一个很著名的 DNS 解析服务器地址。我们使用了 geoip 处理器来对 ip 这个字段进行丰富。

返回结果是:

{ "_index" : "my_index", "_type" : "_doc", "_id" : "my_id", "_version" : 4, "_seq_no" : 5, "_primary_term" : 9, "found" : true, "_source" : { "geoip" : { "continent_name" : "North America", "country_iso_code" : "US", "location" : { "lon" : -97.822, "lat" : 37.751 } }, "ip" : "8.8.8.8" } }

上面返回的字段,除了原有的 ip 字段外, 也看到了一个新增加的字段 geoip。这个字段是原始字段完全没有的,但是经过 geoip 处理器处理后,就增加了很多有用的信息,比如 continent_name, country_iso_code 及 location 字段。我们可以知道这个服务器的地址位置,比如经纬度信息。这些信息对使用地图应用,并把数据显示在地图上非常有用。

示例二、使用默认国家/地区数据库
使用默认国家/地区数据库,并根据 ip 字段将地理信息添加到 geo 字段

请注意,此数据库包含在模块中。

PUT _ingest/pipeline/geoip { "description" : "Add geoip info", "processors" : [ { "geoip" : { "field" : "ip", "target_field" : "geo", "database_file" : "GeoLite2-Country.mmdb" } } ] } PUT my_index/_doc/my_id?pipeline=geoip { "ip": "8.8.8.8" } GET my_index/_doc/my_id

返回:

{ "_index" : "my_index", "_type" : "_doc", "_id" : "my_id", "_version" : 5, "_seq_no" : 6, "_primary_term" : 9, "found" : true, "_source" : { "geo" : { "continent_name" : "North America", "country_iso_code" : "US" }, "ip" : "8.8.8.8" } }

但是并不是所有的 IP 地址都可以在数据库中找到地理信息。在这种情况下,没有 target_field 被插入到文档中。

特别指明一下: target_field 在默认的情况下是 geoip 字段,比如在上面的调用中,我们指明是 geo。

示例三、找不到“80.231.5.0”的信息时

找不到“80.231.5.0”的信息时,文档被导入后的展示:

PUT _ingest/pipeline/geoip { "description" : "Add geoip info", "processors" : [ { "geoip" : { "field" : "ip" } } ] } PUT my_index/_doc/my_id?pipeline=geoip { "ip": "80.231.5.0" } GET my_index/_doc/my_id

上面查询的结果是:

{ "_index" : "my_index", "_type" : "_doc", "_id" : "my_id", "_version" : 6, "_seq_no" : 7, "_primary_term" : 9, "found" : true, "_source" : { "ip" : "80.231.5.0" } }

由于IP 地址 80.231.5.0 在数据库中并不存在,那么最终在文档中没有添加任何的字段。

在数据被导入到 Elasticsearch 中时,尽管此处理器使用包含 IP 地址的估计纬度和经度的位置字段来丰富你的文档,但是如果未在映射中明确定义该字段,则该字段在 Elasticsearch 中不会被索引为 geo_point 类型。

你可以对上面的示例索引使用以下映射:

PUT my_ip_locations { "mappings": { "properties": { "geoip": { "properties": { "location": { "type": "geo_point" } } } } } }

声明:本文由原文作者“ Elastic 中国社区布道师——刘晓国”授权转载,对未经许可擅自使用者,保留追究其法律责任的权利。

出处链接:https://elasticstack.blog.csdn.net/.


image.png

阿里云Elastic Stack】100%兼容开源ES,独有9大能力,提供免费 X-pack服务(单节点价值$6000)

相关活动


更多折扣活动,请访问阿里云 Elasticsearch 官网

阿里云 Elasticsearch 商业通用版,1核2G ,SSD 20G首月免费
阿里云 Logstash 2核4G首月免费


image.png

image.png

原文链接:https://yq.aliyun.com/articles/769085
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章