# Fluent::Plugin::GeoIPFilter This is a [Fluentd](http://fluentd.org/) filter plugin for adding [GeoIP data](http://dev.maxmind.com/geoip/geoip2/geolite2/) to record. Supports the new Maxmind v2 database formats. ## Installation Install it yourself as: ``` $ gem install fluent-plugin-filter-geoip ``` ## 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.md5) ``` md5_url http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.md5 ``` ### download_url GeoIP2 database download URL (default: http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz). ``` download_url http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.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 ``` ### 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: true). ``` postal true ``` ### registered_country If true, to get registered country information (default: true). ``` registered_country true ``` ### represented_country If true, to get represented country information (default: true). ``` represented_country true ``` ### subdivisions If true, to get subdivisions information (default: true). ``` subdivisions true ``` ### traits If true, to get traits information (default: true). ``` traits true ``` ### connection_type If true, to get connection type information (default: true). ``` connection_type true ``` ## Plugin setup examples ``` @type geoip enable_auto_download true md5_url http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.md5 download_url http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz md5_path ./geoip/database/GeoLite2-City.md5 database_path ./geoip/database/GeoLite2-City.mmdb lookup_field clientip output_field geoip field_delimiter . flatten false locale en continent true country true city true location true postal true registered_country true represented_country true subdivisions true traits true connection_type true ``` Assuming following inputs are coming: ```javascript { "clientip": "200.114.49.218" } ``` then output bocomes as belows: ```javascript { "clientip": "200.114.49.218", "geoip": { "continent": { "code": "SA", "geoname_id": 6255150, "name": "South America" }, "country": { "geoname_id": 3686110, "iso_code": "CO", "name": "Colombia" }, "city": { "geoname_id": 3674962, "name": "Medellín" }, "location": { "latitude": 6.2518, "longitude": -75.5636, "time_zone": "America/Bogota" }, "registered_country": { "geoname_id": 3686110, "iso_code": "CO", "name": "Colombia" }, "subdivisions": [{ "geoname_id": 3689815, "iso_code": "ANT", "name": "Antioquia" }] } } ``` ## 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.5.3' 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: @type forward port 24224 @type geoip enable_auto_download true md5_url http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.md5 download_url http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz md5_path ./geoip/database/GeoLite2-City.md5 database_path ./geoip/database/GeoLite2-City.mmdb lookup_field clientip output_field geoip field_delimiter . flatten false locale en continent true country true city true location true postal true registered_country true represented_country true subdivisions true traits true connection_type true type stdout 2017-03-13 15:11:32 +0900 [info]: listening fluent socket on 0.0.0.0:24224 ``` Send message via `fluent-cat`. ``` $ echo '{"clientip": "200.114.49.218"}' | fluent-cat messages ``` Fluentd outputs message in standard output. ``` 2017-03-13 15:13:02 +0900 messages: {"clientip":"200.114.49.218","geoip":{"continent":{"code":"SA","geoname_id":6255150,"name":"South America"},"country":{"geoname_id":3686110,"iso_code":"CO","name":"Colombia"},"city":{"geoname_id":3674962,"name":"Medellín"},"location":{"latitude":6.2518,"longitude":-75.5636,"time_zone":"America/Bogota"},"registered_country":{"geoname_id":3686110,"iso_code":"CO","name":"Colombia"},"subdivisions":[{"geoname_id_0":3689815,"iso_code_0":"ANT","name_0":"Antioquia"}]}} ``` ## 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/mosuka/fluent-plugin-filter-geoip.