如何使用 GeoIP 和 ELK(Elasticsearch、Logstash 和 Kibana)映射用户位置

介绍

IP地理定位,用于确定 IP 地址的物理位置的过程,可用于各种目的,如内容个性化和流量分析。通过地理定位的流量分析可以为您的用户群提供有价值的见解,因为它允许您轻松地看到他们来自哪里。

在本教程中,我们将向您展示如何使用Elasticsearch,Logstash和Kibana创建应用程序用户的IP地址的视觉地理地图。

Logstash 使用 GeoIP 数据库将 IP 地址转换为纬度和长度坐标对,即 IP 地址的大约物理位置。坐标数据存储在 Elasticsearch 中的geo_point字段中,并转换为geohash字符串。

现在让我们来看看前提条件。

前提条件

要遵循本教程,你必须有一个工作 ELK 堆栈. 此外,你必须有包含 IP 地址的日志,可以过滤到一个领域,如 Web 服务器访问日志. 如果你还没有这两件事,你可以遵循本系列的前两个教程。 第一个教程将设置一个 ELK 堆栈,第二个将向你展示如何收集和过滤 Nginx 或 Apache 访问日志:

将 geo_point Mapping 添加到 Filebeat Index

假设您遵循了前提教程,您已经完成了这一点,但是,如果您错过了这一步,我们会再次包括此步骤,因为TileMap可视化需要将您的GeoIP坐标存储在Elasticsearch中作为一个geo_point类型。

在 Elasticsearch 安装的服务器上,下载 Filebeat 索引模板到您的主目录:

1cd ~
2curl -O https://gist.githubusercontent.com/thisismitch/3429023e8438cc25b86c/raw/d8c479e2a1adcea8b1fe86570e42abab0f10f364/filebeat-index-template.json

然后将模板加载到 Elasticsearch 以此命令:

1curl -XPUT 'http://localhost:9200/_template/filebeat' [email protected]

配置 Logstash 以使用 GeoIP

要让 Logstash 存储 GeoIP 坐标,你需要识别一个生成包含公共 IP 地址的日志的应用程序,你可以将其过滤为一个分散的字段。 一个相当普遍的应用程序,可以生成具有此信息的日志,就是一个 Web 服务器,例如 Nginx 或 Apache。

Logstash 添加过滤器教程中, Nginx 过滤器存储在一个名为 11-nginx-filter.conf 的文件中。

让我们现在编辑 Nginx 过滤器:

1sudo vi /etc/logstash/conf.d/11-nginx-filter.conf

grok部分中,添加下面的突出部分:

 1[label 11-nginx-filter.conf]
 2filter {
 3  if [type] == "nginx-access" {
 4    grok {
 5      match => { "message" => "%{NGINXACCESS}" }
 6    }
 7    geoip {
 8      source => "clientip"
 9    }
10  }
11}

这将配置过滤器以将存储在clientip字段中的IP地址转换为clientip字段(注明在 source中)。我们将 source指定为clientip,因为这是存储在 Nginx用户IP地址的字段的名称。

保存和退出。

要实现这些更改,让我们重新启动 Logstash:

1sudo service logstash restart

如果一切都是正确配置的,Logstash 现在应该将 GeoIP 坐标与您的 Nginx 访问日志存储在一起(或无论哪个应用程序正在生成日志)。

连接Kibana

最简单的方法来验证Logstash是否正确配置,如果 GeoIP 已启用,就是在网页浏览器中打开Kibana。

在 Logstash 中启用 GeoIP 模块后,查找你的应用程序生成的日志消息. 按照 Nginx 示例,我们可以搜索 Kibana 的 `type: 'nginx-access' 以缩小日志选择。

然后扩展一个消息以查看字段表. 您应该看到一些新的地理字段,这些字段包含有关 IP 地址如何将地理位置转移到真实地理位置的信息。

Example GeoIP Fields

<$>[注] 注: 如果您看不到任何日志,请通过访问您的应用程序创建某些日志,并确保您的时间过滤器设置为最近的时间。

另外,請注意,Kibana 可能無法為每個 IP 位址解決地理位置,如果您只是在使用一個地址進行測試,而且似乎沒有工作,請在解決問題之前嘗試其他幾個。

如果您看不到任何 GeoIP 信息(或者它是错误的),您可能没有正确配置 Logstash

如果您在此视图中看到正确的 GeoIP 信息,您已经准备好创建地图可视化。

创建地图可视化

** 注意:** 如果您尚未使用Kibana可视化,请参阅 Kibana仪表板和可视化教程

为了在Kibana中绘制IP地址,让我们创建一个Tile Map可视化。

在主菜单中点击查看

创建新可视化下,选择 Tile 地图

选择搜索来源下,您可以选择任何一个选项. 如果您有一个保存的搜索,将找到您想要绘制的日志消息,请自由选择该搜索。

当被提示到 选择索引模式时,从下落中选择 filebeat-* 这将带您到一个带空地图的页面:

Kibana default tile map building interface

在搜索栏中,输入类型:nginx-access或其他搜索术语,将匹配包含地理信息的日志。 确保您的时间(页面的右上角)足以匹配某些日志条目。

一旦你得到一些结果,点击 Geo Coordinates在左侧列的 buckets标题下方。绿色播放按钮将被激活。点击它,你的地理位置将被绘制在地图上:

Kibana tile map with multiple points

当您满意您的可视化时,请确保使用保存可视化按钮(磁盘图标)在搜索栏旁边保存它。

结论

现在你已经在Kibana中绘制了你的GeoIP信息,你应该被设置。 它本身应该为你提供用户的地理位置的一个粗略的想法。 如果你通过将其添加到仪表板中,将其与其他日志相关联,它可能会更有用。

好运!

Published At
Categories with 技术
comments powered by Disqus