介绍
IP地理定位,用于确定 IP 地址的物理位置的过程,可用于各种目的,如内容个性化和流量分析。通过地理定位的流量分析可以为您的用户群提供有价值的见解,因为它允许您轻松地看到他们来自哪里。
在本教程中,我们将向您展示如何使用Elasticsearch,Logstash和Kibana创建应用程序用户的IP地址的视觉地理地图。
Logstash 使用 GeoIP 数据库将 IP 地址转换为纬度和长度坐标对,即 IP 地址的大约物理位置。坐标数据存储在 Elasticsearch 中的geo_point
字段中,并转换为geohash
字符串。
现在让我们来看看前提条件。
前提条件
要遵循本教程,你必须有一个工作 ELK 堆栈. 此外,你必须有包含 IP 地址的日志,可以过滤到一个领域,如 Web 服务器访问日志. 如果你还没有这两件事,你可以遵循本系列的前两个教程。 第一个教程将设置一个 ELK 堆栈,第二个将向你展示如何收集和过滤 Nginx 或 Apache 访问日志:
- [如何在Ubuntu 14.04上安装Elasticsearch、Logstash和Kibana 4(https://andsky.com/tech/tutorials/how-to-install-elasticsearch-logstash-and-kibana-4-on-ubuntu-14-04)
- 添加Logstash过滤器以改善集中登记
将 geo_point Mapping 添加到 Filebeat Index
假设您遵循了前提教程,您已经完成了这一点,但是,如果您错过了这一步,我们会再次包括此步骤,因为TileMap可视化需要将您的GeoIP坐标存储在Elasticsearch中作为一个geo_point
类型。
在 Elasticsearch 安装的服务器上,下载 Filebeat 索引模板到您的主目录:
1cd ~
2curl -O https://gist.githubusercontent.com/thisismitch/3429023e8438cc25b86c/raw/d8c479e2a1adcea8b1fe86570e42abab0f10f364/filebeat-index-template.json
然后将模板加载到 Elasticsearch 以此命令:
1curl -XPUT 'http://localhost:9200/_template/filebeat' [email protected]
配置 Logstash 以使用 GeoIP
要让 Logstash 存储 GeoIP 坐标,你需要识别一个生成包含公共 IP 地址的日志的应用程序,你可以将其过滤为一个分散的字段。 一个相当普遍的应用程序,可以生成具有此信息的日志,就是一个 Web 服务器,例如 Nginx 或 Apache。
在 Logstash 添加过滤器教程中, Nginx 过滤器存储在一个名为 11-nginx-filter.conf
的文件中。
让我们现在编辑 Nginx 过滤器:
1sudo vi /etc/logstash/conf.d/11-nginx-filter.conf
在grok
部分中,添加下面的突出部分:
1[label 11-nginx-filter.conf]
2filter {
3 if [type] == "nginx-access" {
4 grok {
5 match => { "message" => "%{NGINXACCESS}" }
6 }
7 geoip {
8 source => "clientip"
9 }
10 }
11}
这将配置过滤器以将存储在clientip
字段中的IP地址转换为clientip
字段(注明在 source中)。我们将 source指定为clientip
,因为这是存储在 Nginx用户IP地址的字段的名称。
保存和退出。
要实现这些更改,让我们重新启动 Logstash:
1sudo service logstash restart
如果一切都是正确配置的,Logstash 现在应该将 GeoIP 坐标与您的 Nginx 访问日志存储在一起(或无论哪个应用程序正在生成日志)。
连接Kibana
最简单的方法来验证Logstash是否正确配置,如果 GeoIP 已启用,就是在网页浏览器中打开Kibana。
在 Logstash 中启用 GeoIP 模块后,查找你的应用程序生成的日志消息. 按照 Nginx 示例,我们可以搜索 Kibana 的 `type: 'nginx-access' 以缩小日志选择。
然后扩展一个消息以查看字段表. 您应该看到一些新的地理
字段,这些字段包含有关 IP 地址如何将地理位置转移到真实地理位置的信息。
<$>[注] 注: 如果您看不到任何日志,请通过访问您的应用程序创建某些日志,并确保您的时间过滤器设置为最近的时间。
另外,請注意,Kibana 可能無法為每個 IP 位址解決地理位置,如果您只是在使用一個地址進行測試,而且似乎沒有工作,請在解決問題之前嘗試其他幾個。
如果您看不到任何 GeoIP 信息(或者它是错误的),您可能没有正确配置 Logstash
如果您在此视图中看到正确的 GeoIP 信息,您已经准备好创建地图可视化。
创建地图可视化
** 注意:** 如果您尚未使用Kibana可视化,请参阅 Kibana仪表板和可视化教程。
为了在Kibana中绘制IP地址,让我们创建一个Tile Map可视化。
在主菜单中点击查看
。
在 创建新可视化下,选择 Tile 地图。
在 选择搜索来源下,您可以选择任何一个选项. 如果您有一个保存的搜索,将找到您想要绘制的日志消息,请自由选择该搜索。
当被提示到 选择索引模式时,从下落中选择 filebeat-* 这将带您到一个带空地图的页面:
在搜索栏中,输入类型:nginx-access
或其他搜索术语,将匹配包含地理信息的日志。 确保您的时间(页面的右上角)足以匹配某些日志条目。
一旦你得到一些结果,点击 Geo Coordinates在左侧列的 buckets标题下方。绿色播放
按钮将被激活。点击它,你的地理位置将被绘制在地图上:
当您满意您的可视化时,请确保使用保存可视化
按钮(磁盘图标)在搜索栏旁边保存它。
结论
现在你已经在Kibana中绘制了你的GeoIP信息,你应该被设置。 它本身应该为你提供用户的地理位置的一个粗略的想法。 如果你通过将其添加到仪表板中,将其与其他日志相关联,它可能会更有用。
好运!