Skip to content

Latest commit

 

History

History
327 lines (227 loc) · 6.16 KB

README.md

File metadata and controls

327 lines (227 loc) · 6.16 KB

Fluent::Plugin::GeoIP2Filter

This is a Fluentd filter plugin for adding GeoIP data to record. Supports the new Maxmind v2 database formats.

Installation

Install it yourself as:

$ gem install fluent-plugin-filter-geoip2

How to build

$ gem install bundler
$ bundle install
$ rake test
$ rake build
$ rake install

Config parameters

enable_auto_download

If true, enable to download GeoIP2 database autometically (default: true).

enable_auto_download true

md5_url

GeoIP2 MD5 checksum URL (default: http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz.md5)

md5_url http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz.md5

download_url

GeoIP2 database download URL (default: http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz).

download_url http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz

md5_path

GeoIP2 MD5 checksum path. (default: ./geoip/database/GeoLite2-City.md5)

md5_path ./geoip/database/GeoLite2-City.md5

database_path

GeoIP2 database path. (default: ./geoip/database/GeoLite2-City.md5)

database_path ./geoip/database/GeoLite2-City.mmdb

md5_asn_url

GeoIP2 MD5 checksum URL (default: http://geolite.maxmind.com/download/geoip/database/GeoLite2-ASN.tar.gz.md5)

md5_asn_url http://geolite.maxmind.com/download/geoip/database/GeoLite2-ASN.tar.gz.md5

download_asn_url

GeoIP2 database download URL (default: http://geolite.maxmind.com/download/geoip/database/GeoLite2-ASN.tar.gz).

download_asn_url http://geolite.maxmind.com/download/geoip/database/GeoLite2-ASN.tar.gz

md5_asn_path

GeoIP2 MD5 checksum path. (default: ./geoip/database/GeoLite2-ASN.md5)

md5_asn_path ./geoip/database/GeoLite2-ASN.md5

database_asn_path

GeoIP2 database path. (default: ./geoip/database/GeoLite2-ASN.mmdb)

database_asn_path ./geoip/database/GeoLite2-ASN.mmdb

lookup_field

Specify the field name that IP address is stored (default: ip).

lookup_field host

output_field

Specify the field name that store the result (default: geoip).

output_field geoip

field_delimiter

Specify the field delimiter (default .).

field_delimiter .

flatten

If true, to flatten the result using field_delimiter (default: false).

flatten false

locale

Get the data for the specified locale (default: en).

locale en

continent

If true, to get continent information (default: true).

continent true

country

If true, to get country information (default: true).

country true

city

If true, to get city information (default: true).

city true

location

If true, to get location information (default: true).

location true

postal

If true, to get postal information (default: fasle).

postal false

registered_country

If true, to get registered country information (default: false).

registered_country false

represented_country

If true, to get represented country information (default: false).

represented_country false

subdivisions

If true, to get subdivisions information (default: false).

subdivisions false

traits

If true, to get traits information (default: false).

traits false

connection_type

If true, to get connection type information (default: false).

connection_type false

Autonomous System

Autonomous System (default: true).

autonomous_system true

Plugin setup examples

<filter tail.log>
  @type geoip2

  enable_auto_download true

  lookup_field clientip
  output_field geoip
  field_delimiter .
  flatten false

  locale en
</filter>

Assuming following inputs are coming:

{
  "clientip": "200.114.49.218"
}

then output bocomes as belows:

{
  "ufw_ips": "106.154.25.44",
  "geoip": {
    "continent": {
      "code": "AS",
      "geoname_id": 6255147,
      "name": "Asia"
    },
    "country": {
      "geoname_id": 1861060,
      "iso_code": "JP",
      "name": "Japan"
    },
    "location": {
      "latitude": 35.69,
      "longitude": 139.69,
      "time_zone": "Asia/Tokyo"
    },
    "autonomous_system": {
      "number": 2516,
      "organization": "KDDI CORPORATION"
    }
  }
}

Example command

Start fluentd using example fluent.conf.

$ fluentd -c ~/github/fluent-plugin-filter-geoip/fluent.conf
2017-03-13 15:11:31 +0900 [info]: reading config file path="/Users/mosuka/github/fluent-plugin-filter-geoip/fluent.conf"
2017-03-13 15:11:31 +0900 [info]: starting fluentd-0.12.33
2017-03-13 15:11:31 +0900 [info]: gem 'fluent-plugin-filter-geoip' version '0.0.1'
2017-03-13 15:11:31 +0900 [info]: gem 'fluent-plugin-grok-parser' version '1.0.0'
2017-03-13 15:11:31 +0900 [info]: gem 'fluent-plugin-output-solr' version '0.4.0'
2017-03-13 15:11:31 +0900 [info]: gem 'fluent-plugin-ua-parser' version '1.1.0'
2017-03-13 15:11:31 +0900 [info]: gem 'fluentd' version '0.12.33'
2017-03-13 15:11:31 +0900 [info]: gem 'fluentd' version '0.12.32'
2017-03-13 15:11:31 +0900 [info]: adding filter pattern="messages" type="geoip"
2017-03-13 15:11:31 +0900 [info]: Current MD5: cc1f9a6f7def282bc33cb477f3379d9f
2017-03-13 15:11:31 +0900 [info]: Fetched MD5: cc1f9a6f7def282bc33cb477f3379d9f
2017-03-13 15:11:32 +0900 [info]: adding match pattern="messages" type="stdout"
2017-03-13 15:11:32 +0900 [info]: adding source type="forward"
2017-03-13 15:11:32 +0900 [info]: using configuration file: <ROOT>
  <source>
    @type forward
    port 24224
  </source>
  <filter messages>
    @type geoip
    enable_auto_download true
    lookup_field clientip
    output_field geoip
    field_delimiter .
    flatten false
    locale en
  </filter>
  <match messages>
    type stdout
  </match>
</ROOT>
2017-03-13 15:11:32 +0900 [info]: listening fluent socket on 0.0.0.0:24224

Development

After checking out the repo, run bundle install to install dependencies. Then, run rake test to run the tests.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/tokyohomesoc/fluent-plugin-filter-geoip2.