前言
当我们从百度获取到的GeoIP数据包的时候,有可能下的数据包版本过低,导致kibana使用中定位不准确问题,如果能调度系统crontab自动更新数据包的话,我们就可以保证数据的准确性了。
由于centos 7系统会安装bind-utils,bind-utils 包含了许多DNS查询的工具包,其中就有一个dependency GeoIP library,导致如果直接使用rpm 的安装包来安装的话,默认的可执行程序会被安装在/usr/bin/geoipupdate, conf 地址会被安装在/etc/GeoIP.conf, 这样会和老版的geoipupdate 发生冲突,但是bind-utils 又依赖于老版的GeoIP 库,不可能卸载掉,于是此处我们使用二进制文件安装的方式进行升级。
注册maxmind账户
由于maxmind更新用户规则,若想自动更新ip库需要注册maxmind账户并使用授权密钥才可以自动更新ip库。
注册账户
使用gmail邮箱即可注册成功,注册地址:https://www.maxmind.com/en/geolite2/signup
获取LicenseKey
升级程序
下载并安装最新版的IP库自动更新程序
1
2
3
4
5[root@localhost ~]# wget https://github.com/maxmind/geoipupdate/releases/download/v4.2.2/geoipupdate_4.2.2_linux_amd64.tar.gz
[root@localhost ~]# tar xf geoipupdate_4.2.2_linux_amd64.tar.gz
[root@localhost ~]# cd geoipupdate_4.2.2_linux_amd64/
[root@localhost ~]# mv GeoIP.conf /usr/local/etc/
[root@localhost ~]# mv geoipupdate /usr/local/bin/编辑配置文件
1
2
3
4
5
6
7[root@localhost ~]# vim /usr/local/etc/GeoIP.conf
AccountID 你的账户ID
LicenseKey 你的授权密钥
需要下载的ip库
EditionIDs GeoLite2-ASN GeoLite2-City GeoLite2-Country
下载ip库的保存路径
DatabaseDirectory /data/GeoIP创建相关目录及更新授权
1
2
3[root@localhost ~]# mkdir -p /data/GeoIP
[root@localhost ~]# /usr/local/bin/geoipupdate # 执行更新程序
[root@localhost ~]# chown -R logstash.logstash /data/GeoIP # 授权目录及ip库为logstash用户权限,此步骤可省略编写定时任务更新程序
1
2
3[root@localhost ~]# crontab -e
此处可以根据实际情况编写更新脚本放在此处执行
17 3 * * 3 /usr/local/bin/geoipupdate > /tmp/geoip.log 2>&1配置logstash相关配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15[root@localhost ~]# 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://blog.leonshadow.com/763482/1983.html
https://dev.maxmind.com/geoip/geoipupdate/
https://www.iamhippo.com/2019-05/803.html