GeoIP数据更新

前言

当我们从百度获取到的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库。

  1. 注册账户

    使用gmail邮箱即可注册成功,注册地址:https://www.maxmind.com/en/geolite2/signup

  2. 获取LicenseKey

升级程序

  1. 下载并安装最新版的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/
  2. 编辑配置文件

    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
  3. 创建相关目录及更新授权

    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用户权限,此步骤可省略
  4. 编写定时任务更新程序

    1
    2
    3
    [root@localhost ~]# crontab -e
    # 此处可以根据实际情况编写更新脚本放在此处执行
    17 3 * * 3 /usr/local/bin/geoipupdate > /tmp/geoip.log 2>&1
  5. 配置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

https://www.cnblogs.com/Orgliny/p/5755384.html

https://blog.csdn.net/CrownP/article/details/101346838