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

来源:互联网 发布:h5网站源码 编辑:程序博客网 时间:2024/06/02 03:31

提供:ZStack云计算

系列教程

本教程为在CentOS 7上利用Logstash与Kibana实现集中化日志记录系列五篇中的第五篇。

本教程为利用ELK堆栈(Elasticsearch、Logstash与Kibana)在Ubuntu 14.04上实现集中化日志记录系列五篇中的第五篇。

内容简介

IP地理位置用于确定IP地址的物理位置,可被用于多种实际场景,包括内容个性化与流量分析等等。根据地理位置进行流量分析可帮助大家有效分析自己的用户群体,从而了解用户来自哪里、决定应用服务器的理想地理位置并明确掌握用户定位。在本教程中,我们将共同了解如何利用Elasticsearch、Logstash与Kibana配合一套GeoIP数据库,从而建立应用用户IP地址的可视化地理位置映射。

以下为其工作原理的简单说明。Logstash利用GeoIP数据库将IP地址转换为纬度与经度坐标对,即IP地址的近似地理位置。此坐标数据由Elasticsearch中的geo_point字段负责存储,另外亦可进一步转换为geohash字符串。Kibana随后读取该Geohash字符串并将其绘制为地图上的点,即由Kibana 4实现Tile Map可视化。

下面来看先决条件。

先决条件

要完成本教程,大家必须拥有一套能够运行的ELK堆栈。另外,大家还需要包含IP地址且能够被过滤为字段的日志,例如Web服务器访问日志。如果这两项条件尚不满足,大家可以首先参阅下面两篇教程:

  • 如何在Ubuntu 14.04上安装Elasticsearch、Logstash与Kibana 4
  • 添加Logstash Filter以改进集中化日志记录

向Filebeat目录中添加geo_point映射

假设大家已经完成了之前的教程,这里我们要重复这一步骤,因为TileMap可视化机制要求GeoIP坐标以geo_point类型的形式存储在Elasticsearch当中。

在Elasticserach的安装服务器上,将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 City数据库的一套副本,GeoLite City。在本教程中,我们将下载最新GeoLite City数据库,但大家也可以任意选择其它不同的GeoIP数据库。

下面将最新GeoLite CIty数据库的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 CIty数据库将被提取至/etc/logstash/GeoLiteCity.dat,我们可以在Logstash配置文件中指向这一位置。

请注意,GeoLite数据库由MaxMind于每月第一个周二进行更新。因此,如果大家希望保持数据库处于最新版本,则应设置一项cron任务以保证每月下载该数据库。

接下来配置Logstash以使用GeoIP数据库。

配置Logstash以使用GeoIP

为了让Logstash存储GeoIP坐标,大家需要指定包含有一条公共IP地址且生成日志的应用,我们将过滤该IP地址以作为独立字段。一般来说,Web服务器可以充当这一日志生成应用,例如Nginx或者Apache,这里我们使用Nginx作为示例。

在向Logstash中添加Filter教程中,Nginx filter被存储在名为11-nginx-filter.conf的文件当中。如果大家的filter处于其它位置,请编辑该文件中的对应部分。

下面编辑Nginx filter:

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

在grok部分之下(在if [type]…区段处)添加以下行:

11-nginx-filter.conf excerptgeoip {  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"]}

如此一来,filter就会利用GeoLite City数据库对存在于clientip字段(在源中指定)内的IP地址进行转换。我们之所以将该源指定为“clientip”,是因为这正是Nginx用户IP地址存储所使用的字段名称。

在添加之后,为了明确filter的实际内容,我们这里放出11-nginx-filter.conf文件的完整版本:

11-nginx-filter.conf — updatedfilter {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现在应该会利用Nginx访问日志存储GeoIP坐标。请注意,此变更不可追溯,因此我们之前生成的日志将不会包含GeoIP信息。

下面验证GeoIP功能是否能够在Kibana中正确起效。

接入Kibana

Logstash配置情况的最简单验证方式就是启用GeoIP,而后在浏览器中打开Kibana。

找到已经在Logstash中启用GeoIP模块后所生成的日志信息。在Nginx示例中,我们可以在Kibana中搜索“nginx-access”类型以缩小日志选择范围。

接下来打开一条信息以查看其字段表。大家应该会看到包含有IP地址如何与真实地理位置相映射的新geoip字段。例如:

注意:如果大家看不到任何日志,首先访问应用以生成日志,而后确保时间过滤器设定正确的时间段。如果大家还是看到GeoIP信息(或者信息不正确),那么Logstash配置可能存在问题。

如果大家在此视图中看到了正确的GeoIP信息,则可创建自己的可视化映射图了。

创建Tile Map可视化映射

注意:如果大家还没有使用Kibana可视化机制,请参阅Kibana仪表板与可视化机制教程。

为了对Kibana中的IP地址进行映射,让我们创建一套Tile Map可视化图。

点击主菜单中的Visualize。

在Creat a new visualization条目之下,选择Tile map。

在Select a search source中,大家可以选择任意选项。如果大家已经保存了一条能够找到所要映射的日志信息的搜索结果,则可直接选择该条搜索。

在Select buckets type中,选择Geo Coordinates。

在Aggregation下拉菜单中,选择Geohash。

在Field下拉菜单中,选择geoip.location。

现在点击绿色的Apply按钮。

如果选定的日志中包含GeoIP信息,则其会被用于绘制映射图,具体如上图所示。

请确保使用Precision滑块以及视图选项下的条目以调整可视化图的显示效果。Precision尚志能够调整用于映射位置的Geohash字符串的长度。

如果大家对可视化图感到满意,则可直接保存。

总结

现在大家已经能够在Kibana当中对GeoIP信息进行映射了。这套方案可以帮助各位了解用户的真实地理位置。如果将其添加至仪表板当中,其实用性还将得到进一步提升。

祝大家好运!

本文来源自DigitalOcean Community。英文原文:How To Map User Location with GeoIP and ELK (Elasticsearch, Logstash, and Kibana) By Mitchell Anicas

翻译:diradw

0 0
原创粉丝点击