| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 | [[ingest-geoip]]=== Ingest Geoip Processor PluginThe GeoIP processor adds information about the geographical location of IP addresses, based on data from the Maxmind databases.This processor adds this information by default under the `geoip` field. The `geoip` processor can resolve both IPv4 andIPv6 addresses.The ingest-geoip plugin ships by default with the GeoLite2 City, GeoLite2 Country and GeoLite2 ASN geoip2 databases from Maxmind made availableunder the CCA-ShareAlike 4.0 license. For more details see, http://dev.maxmind.com/geoip/geoip2/geolite2/The GeoIP processor can run with other geoip2 databases from Maxmind. The files must be copied into the geoip config directory,and the `database_file` option should be used to specify the filename of the custom database. Custom database files must be storeduncompressed. The geoip config directory is located at `$ES_HOME/config/ingest-geoip` and holds the shipped databases too.:plugin_name: ingest-geoipinclude::install_remove.asciidoc[][[using-ingest-geoip]]==== Using the Geoip Processor in a Pipeline[[ingest-geoip-options]].Geoip options[options="header"]|======| Name                   | Required  | Default                                                                            | Description| `field`                | yes       | -                                                                                  | The field to get the ip address from for the geographical lookup.| `target_field`         | no        | geoip                                                                              | The field that will hold the geographical information looked up from the Maxmind database.| `database_file`        | no        | GeoLite2-City.mmdb                                                                 | The database filename in the geoip config directory. The ingest-geoip plugin ships with the GeoLite2-City.mmdb, GeoLite2-Country.mmdb and GeoLite2-ASN.mmdb files.| `properties`           | no        | [`continent_name`, `country_iso_code`, `region_iso_code`, `region_name`, `city_name`, `location`] *   | Controls what properties are added to the `target_field` based on the geoip lookup.| `ignore_missing`       | no        | `false`                                                                            | If `true` and `field` does not exist, the processor quietly exits without modifying the document|======*Depends on what is available in `database_field`:* If the GeoLite2 City database is used, then the following fields may be added under the `target_field`: `ip`,`country_iso_code`, `country_name`, `continent_name`, `region_iso_code`, `region_name`, `city_name`, `timezone`, `latitude`, `longitude`and `location`. The fields actually added depend on what has been found and which properties were configured in `properties`.* If the GeoLite2 Country database is used, then the following fields may be added under the `target_field`: `ip`,`country_iso_code`, `country_name` and `continent_name`. The fields actually added depend on what has been found and which propertieswere configured in `properties`.* If the GeoLite2 ASN database is used, then the following fields may be added under the `target_field`: `ip`,`asn`, and `organization_name`. The fields actually added depend on what has been found and which properties were configuredin `properties`.Here is an example that uses the default city database and adds the geographical information to the `geoip` field based on the `ip` field:[source,js]--------------------------------------------------PUT _ingest/pipeline/geoip{  "description" : "Add geoip info",  "processors" : [    {      "geoip" : {        "field" : "ip"      }    }  ]}PUT my_index/my_type/my_id?pipeline=geoip{  "ip": "8.8.8.8"}GET my_index/my_type/my_id--------------------------------------------------// CONSOLEWhich returns:[source,js]--------------------------------------------------{  "found": true,  "_index": "my_index",  "_type": "my_type",  "_id": "my_id",  "_version": 1,  "_source": {    "ip": "8.8.8.8",    "geoip": {      "continent_name": "North America",      "country_iso_code": "US",      "location": { "lat": 37.751, "lon": -97.822 }    }  }}--------------------------------------------------// TESTRESPONSEHere is an example that uses the default country database and adds thegeographical information to the `geo` field based on the `ip` field`. Note thatthis database is included in the plugin download. So this:[source,js]--------------------------------------------------PUT _ingest/pipeline/geoip{  "description" : "Add geoip info",  "processors" : [    {      "geoip" : {        "field" : "ip",        "target_field" : "geo",        "database_file" : "GeoLite2-Country.mmdb"      }    }  ]}PUT my_index/my_type/my_id?pipeline=geoip{  "ip": "8.8.8.8"}GET my_index/my_type/my_id--------------------------------------------------// CONSOLEreturns this:[source,js]--------------------------------------------------{  "found": true,  "_index": "my_index",  "_type": "my_type",  "_id": "my_id",  "_version": 1,  "_source": {    "ip": "8.8.8.8",    "geo": {      "continent_name": "North America",      "country_iso_code": "US",    }  }}--------------------------------------------------// TESTRESPONSENot all IP addresses find geo information from the database, When thisoccurs, no `target_field` is inserted into the document.Here is an example of what documents will be indexed as when information for "80.231.5.0"cannot be found:[source,js]--------------------------------------------------PUT _ingest/pipeline/geoip{  "description" : "Add geoip info",  "processors" : [    {      "geoip" : {        "field" : "ip"      }    }  ]}PUT my_index/my_type/my_id?pipeline=geoip{  "ip": "80.231.5.0"}GET my_index/my_type/my_id--------------------------------------------------// CONSOLEWhich returns:[source,js]--------------------------------------------------{  "found": true,  "_index": "my_index",  "_type": "my_type",  "_id": "my_id",  "_version": 1,  "_source": {    "ip": "80.231.5.0"  }}--------------------------------------------------// TESTRESPONSE[[ingest-geoip-settings]]===== Node SettingsThe geoip processor supports the following setting:`ingest.geoip.cache_size`::    The maximum number of results that should be cached. Defaults to `1000`.Note that these settings are node settings and apply to all geoip processors, i.e. there is one cache for all defined geoip processors.
 |