This is a Fluentd filter plugin for adding GeoIP data to record. Supports the new Maxmind v2 database formats.
fluent-plugin-filter-geoip | fluentd | td-agent | ruby |
---|---|---|---|
1.x.x | >= 0.14.0, < 2 | 3 | >= 2.1 |
0.x.x | ~> 0.12.0 | 2 | >= 1.9 |
- The 1.x.x series is developed from this branch (master)
- The 0.x.x series (compatible with fluentd v0.12, and td-agent 2) is developed on the v0.x.x branch
Install it yourself as:
$ gem install fluent-plugin-filter-geoip
$ gem install bundler
$ bundle install
$ rake test
$ rake build
$ rake install
If true, enable to download GeoIP2 database autometically (default: true).
enable_auto_download true
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
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
GeoIP2 MD5 checksum path. (default: ./geoip/database/GeoLite2-City.md5)
md5_path ./geoip/database/GeoLite2-City.md5
GeoIP2 database path. (default: ./geoip/database/GeoLite2-City.md5)
database_path ./geoip/database/GeoLite2-City.mmdb
Specify the field name that IP address is stored (default: ip).
lookup_field host
Specify the field name that store the result (default: geoip).
output_field geoip
Specify the field delimiter (default .).
field_delimiter .
If true, to flatten the result using field_delimiter (default: false).
flatten false
Get the data for the specified locale (default: en).
locale en
If true, to get continent information (default: true).
continent true
If true, to get country information (default: true).
country true
If true, to get city information (default: true).
city true
If true, to get location information (default: true).
location true
If true, to get postal information (default: true).
postal true
If true, to get registered country information (default: true).
registered_country true
If true, to get represented country information (default: true).
represented_country true
If true, to get subdivisions information (default: true).
subdivisions true
If true, to get traits information (default: true).
traits true
If true, to get connection type information (default: true).
connection_type true
<filter tail.log>
@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
</filter>
Assuming following inputs are coming:
{
"clientip": "200.114.49.218"
}
then output bocomes as belows:
{
"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"
}]
}
}
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: <ROOT>
<source>
@type forward
port 24224
</source>
<filter messages>
@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
</filter>
<match messages>
type stdout
</match>
</ROOT>
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"}]}}
After checking out the repo, run bundle install
to install dependencies. Then, run rake test
to run the tests.
Bug reports and pull requests are welcome on GitHub at https://github.com/mosuka/fluent-plugin-filter-geoip.