GeoIP 地址查询归类

GeoIP 是最常见的免费 IP 地址归类查询库,同时也有收费版可以采购。GeoIP 库可以根据 IP 地址提供对应的地域信息,包括国别,省市,经纬度等,对于可视化地图和区域统计非常有用。

配置示例

  1. filter {
  2. geoip {
  3. source => "message"
  4. }
  5. }

运行结果

  1. {
  2. "message" => "183.60.92.253",
  3. "@version" => "1",
  4. "@timestamp" => "2014-08-07T10:32:55.610Z",
  5. "host" => "raochenlindeMacBook-Air.local",
  6. "geoip" => {
  7. "ip" => "183.60.92.253",
  8. "country_code2" => "CN",
  9. "country_code3" => "CHN",
  10. "country_name" => "China",
  11. "continent_code" => "AS",
  12. "region_name" => "30",
  13. "city_name" => "Guangzhou",
  14. "latitude" => 23.11670000000001,
  15. "longitude" => 113.25,
  16. "timezone" => "Asia/Chongqing",
  17. "real_region_name" => "Guangdong",
  18. "location" => [
  19. [0] 113.25,
  20. [1] 23.11670000000001
  21. ]
  22. }
  23. }

配置说明

GeoIP 库数据较多,如果你不需要这么多内容,可以通过 fields 选项指定自己所需要的。下例为全部可选内容:

  1. filter {
  2. geoip {
  3. fields => ["city_name", "continent_code", "country_code2", "country_code3", "country_name", "dma_code", "ip", "latitude", "longitude", "postal_code", "region_name", "timezone"]
  4. }
  5. }

需要注意的是:geoip.location 是 logstash 通过 latitudelongitude 额外生成的数据。所以,如果你是想要经纬度又不想重复数据的话,应该像下面这样做:

filter {
geoip {
fields => [“city_name”, “country_code2”, “country_name”, “latitude”, “longitude”, “region_name”]
remove_field => [“[geoip][latitude]”, “[geoip][longitude]”]
}
}
```

小贴士

geoip 插件的 “source” 字段可以是任一处理后的字段,比如 “client_ip”,但是字段内容却需要小心!geoip 库内只存有公共网络上的 IP 信息,查询不到结果的,会直接返回 null,而 logstash 的 geoip 插件对 null 结果的处理是:不生成对应的 geoip.字段。

所以读者在测试时,如果使用了诸如 127.0.0.1, 172.16.0.1, 182.168.0.1, 10.0.0.1 等内网地址,会发现没有对应输出!