环境:CentOS6.8,elk6.4
GEOIP是logstash的一个过滤插件,作用是分析访问IP获取地理位置
MaxMind提供GeoIP更新程序,该程序为GeoIP2和GeoIP Legacy二进制数据库执行自动更新。请按照以下说明操作
下载免费GEOIP2库(以前的GEOIP旧数据库官方不再维护)
这边以rpm包为例,其他方式https://github.com/maxmind/geoipupdate
wget https://github.com/maxmind/geoipupdate/releases/download/v4.0.2/geoipupdate_4.0.2_linux_amd64.rpm
rpm -i geoipupdate_4.0.2_linux_amd64.rpm
获取配置文件,rpm安装之后有,在/etc/GeoIP.conf,其他方式未测试
您也可以使用下面的模板手动编写此文件(不推荐)。
#GeoIP.conf文件 - 由geoipupdate程序用于更新数据库
#来自http://www.maxmind.com
AccountID YOUR_ACCOUNT_ID_HERE
LicenseKey YOUR_LICENSE_KEY_HERE
EditionIDs YOUR_EDITION_IDS_HERE
对于免费的GeoLite2数据库
GeoIP更新程序也可以在没有帐户的情况下检索GeoLite2数据库。请使用以下GeoIP.conf
文件:
#以下AccountID和LicenseKey是必需的占位符。
#对于2.5.0之前的geoipupdate版本,请在此处使用UserId而不是AccountID。
AccountID 0
LicenseKey 000000000000
#包括以下一个或多个版本ID:
#* GeoLite2-City - GeoLite 2 City
#* GeoLite2-Country - GeoLite2国家/地区
#对于2.5.0之前的geoipupdate版本,请在此处使用ProductIds而不是EditionID。
版本ID GeoLite2-City GeoLite2-Country
更新GEOIP库(一般是一周更新一次):
geoipupdate
geoipupdate
需要打开DNS和HTTPS(443)端口
数据路径(默认,可以自己指定路径,使用database参数):
usr/share/GeoIP/GeoLite2-City.mmdb
GEOIP插件配置选项
cache_size:
值类型是数字,默认值是1000。
GeoIP查询的成本非常高。 该过滤器使用缓存来利用IP代理通常在日志文件中彼此相邻的情况,并且很少具有随机分布。 设置的越高,项目在缓存中的可能性就越大,并且此过滤器运行得越快。 但是,如果将此设置得太高,则可能会使用比所需更多的内存。 由于Geoip API升级到v2,目前没有任何驱逐策略,如果缓存已满,则不能添加更多记录。 尝试使用此选项的不同值来查找数据集的最佳性能。
这必须设置为大于0的值。真的没有理由不想要这种行为,开销很小,速度增益很大。
注意这个配置值对于geoip_type是全局的,这一点很重要。 也就是说,相同geoip_type的geoip过滤器的所有实例共享相同的高速缓存。 最后声明的缓存大小将获胜。 这样做的原因是,在流水线中的不同点上为不同的实例分配多个缓存是没有好处的,这只会增加缓存未命中次数和浪费内存。
database:
值类型是path,这个设置没有默认值。
Logstash应该使用的Maxmind数据库文件的路径。 默认数据库是GeoLite2-City。 GeoLite2-City,GeoLite2-Country,GeoLite2-ASN是Maxmind支持的免费数据库。 GeoIP2-City,GeoIP2-ISP,GeoIP2-Country是Maxmind支持的商业数据库。
如果未指定,则默认为Logstash附带的GeoLite2城市数据库。
default_database_type:
这个插件现在包括GeoLite2-City和GeoLite2-ASN数据库。如果未设置数据库和default_database_type,则将选择GeoLite2-City数据库。要使用包含的GeoLite2-ASN数据库,请将default_database_type设置为ASN。
值类型是字符串,默认值是city。唯一可接受的值是City和ASN。
fields:
值类型是array,这个设置没有默认值。
要包含在事件中的geoip字段数组。可能的字段取决于数据库类型。 默认情况下,所有geoip字段都包含在事件中。
对于内置的GeoLite2城市数据库,可以使用以下内容:city_name, continent_code, country_code2, country_code3, country_name, dma_code, ip, latitude, longitude, postal_code, region_name 和 timezone.
source:
这是一个必需的设置。值类型是字符串,这个设置没有默认值。
包含要通过geoip映射的IP地址或主机名的字段。 如果这个字段是一个数组,则只会使用第一个值。
tag_on_failure:
值类型是数组,默认值是[“_geoip_lookup_failure”]。这个设置没有默认值。
将事件标记为未能查找地理信息。 这可以在以后的分析中使用。
target:
值类型是字符串,默认值是“geoip”。
指定Logstash应该存储geoip数据的字段。 例如,如果您有src_ip和dst_ip字段,并希望两个IP的GeoIP信息,这可能是有用的。
如果将数据保存到geoip以外的目标字段,并希望在Elasticsearch中使用与geo_point相关的函数,则需要更改Elasticsearch输出提供的模板,并将输出配置为使用新模板。
即使您不使用geo_point映射,[target] [location]字段仍然是有效的GeoJSON。
通用选项
所有过滤器插件都支持以下配置选项:
add_field:
值类型是hash,默认值是{}
如果此过滤器成功,请将任意字段添加到此事件。 字段名称可以是动态的,并使用%{field}来包含事件的一部分。
add_tag:
值类型是数组。默认值是[]。如果此过滤器成功,请向该事件添加任意标签。 标签可以是动态的,并使用%{field}语法包含事件的一部分。
enable_metric:
值类型是布尔值,默认值为true。为特定的插件实例禁用或启用度量标准日志记录,我们默认记录所有的度量标准,但是您可以禁用特定插件的度量标准收集。
id:
值类型是字符串,这个设置没有默认值。为插件配置添加一个唯一的ID。 如果没有指定ID,Logstash将会生成一个。 强烈建议在您的配置中设置此ID。 当你有两个或多个相同类型的插件时,这是特别有用的,例如,如果你有两个geoip过滤器。 在这种情况下添加一个命名的ID将有助于在使用监视API时监视Logstash。
periodic_flush:
值类型是布尔值,默认值是false。定期调用过滤器刷新方法。 可选的。
remove_field:
值类型是数组,默认值是[]。如果此过滤器成功,请从此事件中删除任意字段。
remove_tag:
值类型是数组,默认值是[]。如果此过滤器成功,请从该事件中移除任意标签。 标签可以是动态的,并使用%{field}语法包含事件的一部分。
PS:选项来自http://www.51niux.com/?id=212
安装好GEOIP2库之后,配置logstash
geoip {
source => "client_ip"
database => "/usr/share/GeoIP/GeoLite2-City.mmdb"
add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
}
}
mutate {
remove_field => "geoip.continent_code"
remove_field => "geoip.country_code2"
remove_field => "geoip.country_code3"
convert => ["[geoip][coordinates]","float"]
}
}
convert是修改字段类型
PS:remove_field失效,暂时未确认原因,有懂的请指教一下。
检测配置文件无错之后,启动logstash
生成字段如图
可视化效果图:
制作方式:
1,默认是英文图,变更中文图需要修改kibana.yml,在kibana.yml追加
tilemap.url: "http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}"
重启Kibana
2,打开可视化,选择坐标图
3,如果选择参数