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

ops/2024/10/9 7:00:45/

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

简介

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 信息映射出来,您应该已经准备好了。单独使用,它应该可以给您一个关于用户地理位置的大致概念。如果将其添加到仪表板中并与其他日志相关联,它甚至可以更加有用。

祝您好运!


http://www.ppmy.cn/ops/123048.html

相关文章

用Spring Boot搭建IT交流与学习平台

1 绪论 1.1 研究背景 在当今的社会,可以说是信息技术的发展时代,在社会的方方面面无不涉及到各种信息的处理。信息是人们对客观世界的具体描述,是人们进行交流与联系的重要途径。人类社会就处在一个对信息进行有效合理的加工中[3]。它将促进整…

【韩顺平Java笔记】第8章:面向对象编程(中级部分)【272-284】

文章目录 272. 包基本介绍272.1 看一个应用场景272.2 包的三大作用272.3 包的基本语法 273. 包原理274. 包快速入门275. 包命名276. 常用的包277. 包的使用细节278. 访问修饰符规则278.1 基本介绍278.2 四种访问修饰符的访问范围 279. 访问修饰符细节280. 封装介绍281. 封装步骤…

nginx-2-配置

准备配置文件 解压后去除多余内容 worker_processes 1; events {worker_connections 1024; } http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80;server_name localhost;locatio…

Python 基于 flask 的前程无忧招聘可视化系统,Python大数据招聘爬虫可视化分析

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

PCL 点云添加随机噪声并保存

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 添加随机噪声实现 2.1.2 可视化函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算法与项目实战案例汇总(长期更新&…

【C++】:lambda表达式的高级应用

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 引言 今天 我们来见见lambda表达式的高级用法 用法1&#xff1a;自定义删除器 有些类型的delete方法并不符合自身的析构方法&#xff0c;这时我们就需要自定义删除器。 unique_ptr<FILE> ptr1(fopen…

数据结构——排序(插入排序)

目录 一、插入排序 二、直接插入排序 基本概念&#xff1a; 工作原理&#xff1a; 示例&#xff1a; 代码实现 三、希尔排序 &#xff08;一&#xff09;基本概念 &#xff08;二&#xff09;工作原理 &#xff08;三&#xff09;示例 &#xff08;四&#xff09;代码实…

Vue3入门 - provide和inject组合使用

在Vue3中&#xff0c;provide和inject是用于实现依赖注入的一对API。它们允许在组件树中传递和接收数据&#xff0c;而不需要通过每一层显式地传递props。在<script setup>语法中&#xff0c;provide可以用来提供一个值&#xff0c;而inject可以用来接收一个已经提供的值…