介绍
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]...
块),添加这些行:
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
文件:
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信息(或如果它不正确),您可能没有正确配置Logstash。
如果您在此视图中看到正确的GeoIP信息,则可以创建地图可视化。
创建平铺地图可视化
注意:如果你还没有使用Kibana可视化的是,检查出Kibana仪表盘和可视化教程 。
要绘制Kibana中的IP地址,让我们创建一个Tile Map可视化。
在主菜单中单击可视化 。
在创建一个新的可视化 ,选择瓷砖的地图 。
在选择一个搜索源您可选择任一选项。 如果您保存的搜索将发现您要映射的日志消息,请随意选择该搜索。
在选择水桶型 ,选择地理坐标 。
在聚合下拉列表中,选择Geohash。
在字段下拉列表中,选择geoip.location。
现在,点击绿色的Apply按钮。
如果您选择的任何日志(您的搜索和时间过滤器)包含GeoIP信息,则它们将在地图上绘制,如上面的屏幕截图所示。
请务必使用精密滑块的发挥,并在视图选项中的项目来调整可视化自己的喜好。 精密滑块可以调整,以改变正被用于映射的位置Geohash串的长度。
当您对可视化感到满意时,请务必保存。
结论
现在您已经在Kibana中绘制了GeoIP信息,您应该设置。 本身,它应该给你一个大概的用户的地理位置的概念。 如果通过将其添加到仪表板将其与其他日志相关联,则它甚至可能更有用。
祝你好运!