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

来自菜鸟教程
跳转至:导航、​搜索

介绍

IP 地理定位是用于确定 IP 地址物理位置的过程,可用于多种目的,例如内容个性化和流量分析。 按地理位置进行的流量分析可以为您的用户群提供有价值的洞察,因为它可以让您轻松查看他们的来源。 这可以帮助您就应用程序服务器的理想地理位置以及您当前的受众群体做出明智的决定。

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

以下是对所有工作原理的简短说明。 Logstash使用GeoIP数据库将IP地址转换成经纬度坐标对,即 IP 地址的大致物理位置。 坐标数据存储在 Elasticsearch 中的 geo_point 字段中,并转换为 geohash 字符串。 然后 Kibana 可以读取 Geohash 字符串并将它们绘制为地球地图上的点。 在 Kibana 4 中,这称为 Tile Map 可视化。

现在让我们看一下先决条件。

先决条件

要学习本教程,您必须有一个可用的 ELK 堆栈。 此外,您必须拥有包含可过滤到字段中的 IP 地址的日志,例如 Web 服务器访问日志。 如果您还没有这两个东西,您可以按照本系列的前两个教程进行操作。 第一个教程将设置一个 ELK 堆栈,第二个将向您展示如何收集和过滤 Nginx 或 Apache 访问日志:

将 geo_point 映射添加到 Filebeat 索引

假设您遵循了先决条件教程,那么您已经完成了这项工作。 但是,如果您跳过它,我们将再次包含此步骤,因为 TileMap 可视化要求您的 GeoIP 坐标作为 geo_point 类型存储在 Elasticsearch 中。

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

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

然后使用以下命令将模板加载到 Elasticsearch 中:

curl -XPUT 'http://localhost:9200/_template/filebeat' -d@filebeat-index-template.json

配置 Logstash 以使用 GeoIP

要让 Logstash 存储 GeoIP 坐标,您需要识别生成日志的应用程序,该日志包含可以作为离散字段过滤的公共 IP 地址。 使用此信息生成日志的相当普遍的应用程序是 Web 服务器,例如 Nginx 或 Apache。 我们将以 Nginx 访问日志为例。 如果您使用不同的日志,请对示例进行必要的调整。

Adding Filters to Logstash 教程中,Nginx 过滤器存储在一个名为 11-nginx-filter.conf 的文件中。 如果您的过滤器位于其他位置,请改为编辑该文件。

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

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

grok 部分下,添加以下突出显示的部分:

11-nginx-filter.conf

filter {
  if [type] == "nginx-access" {
    grok {
      match => { "message" => "%{NGINXACCESS}" }
    }
    geoip {
      source => "clientip"
    }
  }
}

这将过滤器配置为转换存储在 clientip 字段(在 source 中指定)中的 IP 地址。 我们将 source 指定为 clientip 因为这是存储 Nginx 用户 IP 地址的字段的名称。 如果您将 IP 地址信息存储在不同的字段中,请务必更改此值。

保存并退出。

为了使更改生效,让我们重新启动 Logstash:

sudo service logstash restart

如果一切配置正确,Logstash 现在应该将 GeoIP 坐标与您的 Nginx 访问日志(或生成日志的任何应用程序)一起存储。 请注意,此更改是 不是 追溯,因此您之前收集的日志不会添加 GeoIP 信息。 让我们验证 GeoIP 功能在 Kibana 中是否正常工作。

连接到 Kibana

在启用 GeoIP 的情况下验证 Logstash 是否配置正确的最简单方法是在 Web 浏览器中打开 Kibana。 现在就这样做。

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

然后展开其中一条消息以查看字段表。 您应该会看到一些新的 geoip 字段,其中包含有关 IP 地址如何映射到真实地理位置的信息。 例如:

注意: 如果您没有看到任何日志,请通过访问您的应用程序生成一些日志,并确保您的时间过滤器设置为最近的时间。

另请注意,Kibana 可能无法解析每个 IP 地址的地理位置。 如果您只是使用一个地址进行测试并且它似乎不起作用,请在排除故障之前尝试其他一些地址。

毕竟,如果您没有看到任何 GeoIP 信息(或者如果它不正确),那么您可能没有正确配置 Logstash。


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

创建瓦片地图可视化

注意: 如果您还没有使用过 Kibana 可视化,请查看 Kibana Dashboards and Visualizations Tutorial

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

单击主菜单中的可视化

创建新的可视化下,选择Tile map

选择搜索源 下,您可以选择任一选项。 如果您有保存的搜索可以找到要映射的日志消息,请随意选择该搜索。 我们将继续进行,就好像您单击了 从新搜索

当提示 选择索引模式 时,从下拉列表中选择 filebeat-*。 这将带您进入带有空白地图的页面:

在搜索栏中,输入 type: nginx-access 或其他将匹配包含 geoip 信息的日志的搜索词。 确保您的时间段(页面右上角)足以匹配某些日志条目。 如果您看到 No results found 而不是地图,则需要更新搜索词或时间。

获得一些结果后,单击左侧列中 buckets 标题下方的 Geo Coordinates。 绿色的“播放”按钮将变为活动状态。 单击它,您的地理位置将绘制在地图上:

当您对可视化感到满意时,请务必使用搜索栏旁边的 Save Visualization 按钮(软盘图标)进行保存。

结论

现在您已经在 Kibana 中映射了您的 GeoIP 信息,您应该进行设置。 就其本身而言,它应该让您大致了解用户的地理位置。 如果您通过将其添加到仪表板将其与其他日志相关联,则它会更加有用。

祝你好运!