一、前言
最近发现logstash自带的GeoIP库解析的地址信息越来越不准确,萌生更新GeoIP的想法,于是写下此篇文章进行记录。
由于centos 7系统会安装bind-utils,bind-utils 包含了许多DNS查询的工具包,其中就有一个dependency GeoIP library,导致如果直接使用rpm 的安装包来安装的话,默认的可执行程序会被安装在/usr/bin/geoipupdate, conf 地址会被安装在/etc/GeoIP.conf, 这样会和老版的geoipupdate 发生冲突,但是bind-utils 又依赖于老版的GeoIP 库,不可能卸载掉,于是此处我们使用二进制文件安装的方式进行升级。
PS. logstash6.8.x自带的ip库路径为
/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-filter-geoip-5.0.3-java/vendor/
二、注册maxmind账户
由于maxmind更新用户规则,若想自动更新ip库需要注册maxmind账户并使用授权密钥才可以自动更新ip库。
1、注册账户
使用gmail邮箱即可注册成功,注册地址:https://www.maxmind.com/en/geolite2/signup
2、获取LicenseKey
之后可以直接下载自动生成GeoIP.conf文件,根据实际情况编写自己的配置文件。
三、升级程序
1、下载并安装最新版IP库自动更新程序
[root@test ~]# wget https://github.com/maxmind/geoipupdate/releases/download/v4.2.2/geoipupdate_4.2.2_linux_amd64.tar.gz [root@test ~]# tar xf geoipupdate_4.2.2_linux_amd64.tar.gz [root@test ~]# cd geoipupdate_4.2.2_linux_amd64/ [root@test geoipupdate_4.2.2_linux_amd64]# mv GeoIP.conf /usr/local/etc/ [root@test geoipupdate_4.2.2_linux_amd64]# mv geoipupdate /usr/local/bin/
2、编辑配置文件
[root@test ~]# vim /usr/local/etc/GeoIP.conf AccountID 你的账户ID LicenseKey 你的授权密钥 # 需要下载的ip库 EditionIDs GeoLite2-ASN GeoLite2-City GeoLite2-Country # 下载ip库的保存路径 DatabaseDirectory /data/GeoIP
3、创建相关目录及更新授权
[root@test ~]# mkdir -p /data/GeoIP # 执行更新程序 [root@test ~]# /usr/local/bin/geoipupdate # 授权目录及ip库为logstash用户权限,此步骤可省略 [root@test ~]# chown -R logstash.logstash /data/GeoIP
4、编写定时任务定时更新程序
[root@test ~]# crontab -e # 此处可以根据实际情况编写更新脚本放在此处执行 17 3 * * 3 /usr/local/bin/geoipupdate > /tmp/geoip.log 2>&1
5、配置logstash相关配置文件
[root@test ~]# vim /etc/logstash/conf.d/nginx.conf filter { geoip { source => "[realip]" target => "geoip" # 此处设置自定义ip库 database => "/data/GeoIP/GeoLite2-City.mmdb" add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ] add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ] } mutate { convert => [ "[geoip][coordinates]", "float"] convert => [ "responsetime", "float"] } }
四、参考资料
https://dev.maxmind.com/geoip/geoipupdate/
https://www.iamhippo.com/2019-05/803.html

我的微信
如果有技术上的问题可以扫一扫我的微信