前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
简介
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 访问日志:
- 如何在 Ubuntu 14.04 上安装 Elasticsearch、Logstash 和 Kibana 4
- 添加 Logstash 过滤器以改进集中式日志记录
向 Filebeat 索引添加 geo_point 映射
假设您已经按照先决条件教程进行了操作。但是,我们再次包括这一步,以防您跳过了它,因为 TileMap 可视化要求您的 GeoIP 坐标存储在 Elasticsearch 中作为 geo_point
类型。
在安装了 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 访问日志作为示例。如果您使用不同的日志,需要对示例进行必要的调整。
在添加 Logstash 过滤器教程中,Nginx 过滤器存储在一个名为 11-nginx-filter.conf
的文件中。如果您的过滤器位于其他位置,请编辑该文件。
现在让我们编辑 Nginx 过滤器:
sudo vi /etc/logstash/conf.d/11-nginx-filter.conf
在 grok
部分下,添加下面突出显示的部分:
filter {if [type] == "nginx-access" {grok {match => { "message" => "%{NGINXACCESS}" }}geoip {source => "clientip"}}
}
这将配置过滤器将存储在 clientip
字段中的 IP 地址(在 source 中指定)转换为 GeoIP 坐标。我们将 source 指定为 clientip
,因为这是 Nginx 用户 IP 地址存储的字段名称。如果您将 IP 地址信息存储在不同的字段中,请确保更改此值。
保存并退出。
为了使更改生效,让我们重新启动 Logstash:
sudo service logstash restart
如果一切配置正确,Logstash 现在应该将 GeoIP 坐标与您的 Nginx 访问日志(或生成日志的任何其他应用程序)一起存储。请注意,此更改不是追溯的,因此您以前收集的日志将不会添加 GeoIP 信息。
让我们验证 Kibana 中的 GeoIP 功能是否正常工作。
连接到 Kibana
验证 Logstash 是否正确配置为启用 GeoIP 的最简单方法是在 Web 浏览器中打开 Kibana。现在就这样做。
找到自您启用 Logstash 中的 GeoIP 模块以来您的应用程序生成的日志消息。按照 Nginx 示例,我们可以在 Kibana 中搜索 type: "nginx-access"
来缩小日志选择范围。
然后展开其中一条消息,查看字段表。您应该会看到一些新的 geoip
字段,其中包含有关 IP 地址如何映射到真实地理位置的信息。例如:
!示例 GeoIP 字段
如果在此视图中看到正确的 GeoIP 信息,那么您已经准备好创建地图可视化了。
创建瓷砖地图可视化
注意: 如果您还没有使用过 Kibana 可视化,请查看 Kibana 仪表板和可视化教程。
要在 Kibana 中映射 IP 地址,让我们创建一个瓷砖地图可视化。
单击主菜单中的 Visualize。
在 创建新可视化 下,选择 Tile map。
在 选择搜索源 下,您可以选择任一选项。如果您有一个保存的搜索可以找到您想要映射的日志消息,可以随意选择该搜索。我们将按照您点击 From a new search 的方式进行。
在提示选择 索引模式 时,从下拉菜单中选择 filebeat-*。这将带您到一个空白地图页面:
!Kibana 默认瓷砖地图构建界面
在搜索栏中输入 type: nginx-access
或其他包含地理信息的日志搜索词。确保您的时间段(页面右上角)足以匹配一些日志条目。如果您看到地图上显示 No results found 而不是点,您需要更新搜索词或时间。
一旦您有了一些结果,点击左侧列中 buckets 标题下的 Geo Coordinates。绿色的“播放”按钮将变为活动状态。点击它,您的地理位置将在地图上绘制出来:
!Kibana 带有多个点的瓷砖地图
当您对可视化感到满意时,请务必使用搜索栏旁边的 Save Visualization 按钮(保存图标)保存它。
结论
现在您在 Kibana 中已经将您的 GeoIP 信息映射出来,您应该已经准备好了。单独使用,它应该可以给您一个关于用户地理位置的大致概念。如果将其添加到仪表板中并与其他日志相关联,它甚至可以更加有用。
祝您好运!