热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

提供:ZStack云计算系列教程本教程为在CentOS7上利用Logstash与Kibana实现集中化日志记录系列五篇中的第五篇。本教程为利用ELK堆栈(Elasticsearch、Logstas

提供: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 excerpt

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"]
}

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

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

11-nginx-filter.conf — updated

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现在应该会利用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


推荐阅读
  • 分享一下我老师大神的人工智能教程!零基础,通俗易懂!http:blog.csdn.netjiangjunshow也欢迎大家转载本篇文章。分 ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • 使用HTML和JavaScript实现视频截图功能
    本文介绍了如何利用HTML和JavaScript实现从远程MP4、本地摄像头及本地上传的MP4文件中截取视频帧,并展示了具体的实现步骤和示例代码。 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • 如何使用 `org.apache.tomcat.websocket.server.WsServerContainer.findMapping()` 方法及其代码示例解析 ... [详细]
  • 在ElasticStack日志监控系统中,Logstash编码插件自5.0版本起进行了重大改进。插件被独立拆分为gem包,每个插件可以单独进行更新和维护,无需依赖Logstash的整体升级。这不仅提高了系统的灵活性和可维护性,还简化了插件的管理和部署过程。本文将详细介绍这些编码插件的功能、配置方法,并通过实际生产环境中的应用案例,展示其在日志处理和监控中的高效性和可靠性。 ... [详细]
  • 本文将继续探讨 JavaScript 函数式编程的高级技巧及其实际应用。通过一个具体的寻路算法示例,我们将深入分析如何利用函数式编程的思想解决复杂问题。示例中,节点之间的连线代表路径,连线上的数字表示两点间的距离。我们将详细讲解如何通过递归和高阶函数等技术实现高效的寻路算法。 ... [详细]
  • TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得
    TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得 ... [详细]
  • 本文详细介绍了HDFS的基础知识及其数据读写机制。首先,文章阐述了HDFS的架构,包括其核心组件及其角色和功能。特别地,对NameNode进行了深入解析,指出其主要负责在内存中存储元数据、目录结构以及文件块的映射关系,并通过持久化方案确保数据的可靠性和高可用性。此外,还探讨了DataNode的角色及其在数据存储和读取过程中的关键作用。 ... [详细]
  • 掌握 esrally 三步骤:高效执行 Elasticsearch 性能测试任务
    自从上次发布 esrally 教程已近两个月,期间不断有用户咨询使用过程中遇到的各种问题,尤其是由于测试数据托管在海外 AWS 上,导致下载速度极慢。为此,本文将详细介绍如何通过三个关键步骤高效执行 Elasticsearch 性能测试任务,帮助用户解决常见问题并提升测试效率。 ... [详细]
  • Logstash安装配置
    阅读此文请先阅读上文:[大数据]-Elasticsearch5.3.1IK分词,同义词联想搜索设置,前面介绍了ES,Kiba ... [详细]
  • 简短的问题是:是否可以从远程服务器中提取日志(在日志文件中)并将其提取到 ... [详细]
  •                               前言日志,一直以来都是开发人员和运维人员最关心的问题。开发人员可通过日志记录来协助问题定位,运维人员可通过日志发现系统隐 ... [详细]
author-avatar
hwongth
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有