如何映射用户位置与GeoIP的和ELK(Elasticsearch,Logstash和Kibana)

介绍

IP地理位置,用于确定IP地址的物理位置的过程,可以用于各种目的,例如内容个性化和流量分析。 通过地理位置的流量分析可以为您的用户群提供非常宝贵的洞察力,因为它可以让您轻松地看到用户来自哪里,这可以帮助您做出有关应用服务器的理想地理位置和当前受众是。 在本教程中,我们将向您介绍如何通过使用具有Elasticsearch,Logstash和Kibana的GeoIP数据库来创建应用程序用户的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的坐标存储在Elasticsearch作为geo_point类型。

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

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

然后使用此命令加载模板:

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

下载最新的GeoIP数据库

MaxMind提供免费和付费的GeoIP数据库 - 付费版本更准确。 Logstash还附带了免费GeoIP城市数据库GeoLite City的副本。 在本教程中,我们将下载最新的GeoLite城市数据库,但如果您愿意,可以随意使用不同的GeoIP数据库。

让我们来下载最新的GEOLITE上城数据库的gzip压缩到/etc/logstash目录。 通过运行以下命令执行此操作:

cd /etc/logstash
sudo curl -O "http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz"

现在让我们取消存档:

sudo gunzip GeoLiteCity.dat.gz

这将提取的GEOLITE上城数据库/etc/logstash/GeoLiteCity.dat ,我们将在我们的Logstash配置中指定。

请注意,GeoLite数据库由每月的第一个星期二的MaxMind更新。 因此,如果您想要始终拥有最新的数据库,则应该设置一个每月一次下载数据库的cron作业。

现在我们准备配置Logstash以使用GeoIP数据库。

配置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部分(在if [type]...块),添加这些行:

11-nginx-filter.conf摘录
    geoip {
      source => "clientip"
      target => "geoip"
      database => "/etc/logstash/GeoLiteCity.dat"
      add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
      add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"  ]
    }
    mutate {
      convert => [ "[geoip][coordinates]", "float"]
    }

这将配置此过滤器来转换存储在一个IP地址clientip字段( 来源指定),使用我们先前下载的GEOLITE上城数据库。 我们指定来源为“clientip”,因为这是Nginx的用户IP地址被存储在一定,如果你存储在不同的字段中输入IP地址信息更改此值的字段的名称。

只是要清楚的过滤器应该是什么样子,你加入后,这里有完整的内容, 11-nginx-filter.conf文件:

11-nginx-filter.conf - 更新
filter {
  if [type] == "nginx-access" {
    grok {
      match => { "message" => "%{NGINXACCESS}" }
    }
    geoip {
      source => "clientip"
      target => "geoip"
      database => "/etc/logstash/GeoLiteCity.dat"
      add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
      add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"  ]
    }
    mutate {
      convert => [ "[geoip][coordinates]", "float"]
    }
  }
}

保存并退出。

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

sudo service logstash restart

如果一切配置正确,Logstash现在应该存储GeoIP坐标与您的Nginx访问日志(或无论哪个应用程序生成日志)。 请注意,这种变化是溯及既往,所以你以前收集的日志不会有加GeoIP的信息。

让我们验证GeoIP功能在Kibana中正常工作。

连接到Kibana

验证Logstash是否已正确配置(启用GeoIP)的最简单方法是在Web浏览器中打开Kibana。 现在做。

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

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

示例geoIP字段

注意:如果您看不到任何日志,通过访问你的应用程序生成一些,并确保你的时间过滤器设置为最近的时间。 如果您没有看到任何GeoIP信息(或如果它不正确),您可能没有正确配置Logstash。

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

创建平铺地图可视化

注意:如果你还没有使用Kibana可视化的是,检查出Kibana仪表盘和可视化教程

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

在主菜单中单击可视化

创建一个新的可视化 ,选择瓷砖的地图

选择一个搜索源您可选择任一选项。 如果您保存的搜索将发现您要映射的日志消息,请随意选择该搜索。

选择水桶型 ,选择地理坐标

聚合下拉列表中,选择Geohash。

字段下拉列表中,选择geoip.location。

现在,点击绿色的Apply按钮。

示例GeoMap

如果您选择的任何日志(您的搜索和时间过滤器)包含GeoIP信息,则它们将在地图上绘制,如上面的屏幕截图所示。

请务必使用精密滑块的发挥,并在视图选项中的项目来调整可视化自己的喜好。 精密滑块可以调整,以改变正被用于映射的位置Geohash串的长度。

当您对可视化感到满意时,请务必保存。

结论

现在您已经在Kibana中绘制了GeoIP信息,您应该设置。 本身,它应该给你一个大概的用户的地理位置的概念。 如果通过将其添加到仪表板将其与其他日志相关联,则它甚至可能更有用。

祝你好运!

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏