使用 Logstash 的 geoip 插件解析 IP 地址的归属地
本文演示如何使用 geoip 插件解析 IP 地址的归属地。
1、启动 Logstash
新建配置文件 geoip-demo.conf,并输入以下内容:
| 1 | input { | 
使用 -f 参数指定到配置文件 geoip-demo.conf 启动 Logstash:
| 1 | /usr/share/logstash/bin/logstash -f /mnt/d/src/yaybyc/geoip-demo.conf | 
如果只是为了测试,也可以不创建配置文件,直接使用 -e 参数指定配置的方式启动:
| 1 | /usr/share/logstash/bin/logstash -e "input { stdin { codec => 'json' }} filter { geoip { source => '[ip]' target => source}} output{ stdout{} }" | 
2、输入以下 IP 地址
| 1 | {"ip":"222.209.9.72"} | 
3、解析结果如下:
| 1 | { | 
geo 各字段说明:
| 字段 | 说明 | 示例值 | 
|---|---|---|
| country_name | 国家名称 | China | 
| region_name | 地域名称,省份 | Sichuan | 
| city_name | 城市 | Chengdu | 
| timezone | 时区 | Asia/Shanghai | 
| continent_code | 大洲代码 | AS | 
| country_iso_code | ISO国家代码 | CN | 
| region_iso_code | ISO地域代码 | CN-SC | 
| location | 位置,经纬度坐标 | |
| lat | 纬度 | 30.6498 | 
| lon | 经度 | 104.0555 | 
continent_code 定义:
| 大洲代码 | 大洲名称(英文) | 大洲名称(中文) | 
|---|---|---|
| NA | North America | 北美洲 | 
| SA | South America | 南美洲 | 
| AS | Asia | 亚洲 | 
| OC | Oceania | 大洋洲 | 
| AF | Africa | 非洲 | 
| EU | Europe | 欧洲 | 
TIPS:五大洲(Five continents)指地球陆地分成的五大版块,即亚洲(Asia)、欧洲(Europe)、非洲(Africa)、美洲(America)和大洋洲(Oceania)。地理学又将美洲分为北美洲和南美洲,南极洲无人居住,故也可称为七大洲。
奥运五环的五环分别代表五大洲。五大洲中面积最大的是亚洲,第二大的是美洲,第三大的是非洲,第四大的是欧洲,最小的是大洋洲。
亚洲代表性国家:中国,日本,韩国,泰国,新加坡。
欧洲代表性国家:英国,法国,德国,希腊,意大利。
美洲代表性国家:美国,加拿大,巴西,阿根廷。
非洲代表性国家:埃及,南非,利比亚,肯尼亚。
大洋洲代表性国家:澳大利亚,新西兰。
参考来源:https://baike.baidu.com/item/五大洲/19920227
需要注意的是,如果使用默认的 geoip 插件来解析 IP 地址的归属地,会有以下两个问题:
- 解析出来的归属地名称是英文的;
- 国内很多 IP 地址解析不出来对应的归属地,或归属地的结果并不准确。
例如,IP 地址 60.253.155.38 没有找到所属的省、市(未返回 region_name、city_name、region_iso_code 字段):
| 1 | {"ip":"60.253.155.38"} | 
IP 地址 39.144.27.121 解析出来的归属地为中国-河南-周口,实际上通过 https://www.cz88.net/、https://www.ipplus360.com/ 或 https://ip138.com/ 查询出来的结果是中国-河南-郑州。
| 1 | {"ip":"39.144.27.121"} | 
(END)