Процессор GeoIP
Процессор geoip добавляет информацию о географическом расположении IPv4 или IPv6 адреса.
По умолчанию, процессор использует базы данных GeoIP2 GeoLite2 City, GeoLite2 Country и GeoLite2 ASN от MaxMind, распространяемые по лицензии CC BY-SA 4.0. Elasticsearch автоматически загружает обновления этих баз данных с конечной точки Elastic GeoIP: https://geoip.elastic.co/v1/database. Чтобы получить статистику загрузок этих обновлений, используйте API статистики GeoIP.
Если ваш кластер не может подключиться к конечной точке Elastic GeoIP или вы хотите управлять собственными обновлениями, см. Управление собственными обновлениями базы данных GeoIP2.
Если Elasticsearch не может подключиться к конечной точке в течение 30 дней, все обновленные базы данных станут недействительными. Elasticsearch прекратит обогащение документов данными geoip и добавит поле tags: ["_geoip_expired_database"] вместо него.
Использование процессора geoip в конвейере
Таблица 20. geoip параметры
| Имя | Обязательно | По умолчанию | Описание |
|---|---|---|---|
| да | - | Поле, из которого нужно получить IP-адрес для географического поиска. |
| нет | geoip | Поле, которое будет содержать географическую информацию, полученную из базы данных MaxMind. |
| нет | GeoLite2-City.mmdb | Имя файла базы данных (GeoLite2-City.mmdb, GeoLite2-Country.mmdb или GeoLite2-ASN.mmdb) или пользовательской базы данных в каталоге конфигурации |
| нет | [ | Управляет тем, какие свойства добавляются в поле |
| нет |
| Если |
| нет |
| Если |
*Зависит от того, что доступно в database_file:
- Если используется база данных GeoLite2 City, то под полем
target_fieldмогут быть добавлены следующие поля:ip,country_iso_code,country_name,continent_name,region_iso_code,region_name,city_name,timezone,latitude,longitudeиlocation. Фактически добавляемые поля зависят от того, что найдено и какие свойства были настроены вproperties. - Если используется база данных GeoLite2 Country, то под полем
target_fieldмогут быть добавлены следующие поля:ip,country_iso_code,country_nameиcontinent_name. Фактически добавляемые поля зависят от того, что найдено и какие свойства были настроены вproperties. - Если используется база данных GeoLite2 ASN, то под полем
target_fieldмогут быть добавлены следующие поля:ip,asn,organization_nameиnetwork. Фактически добавляемые поля зависят от того, что найдено и какие свойства были настроены вproperties.
Вот пример, использующий базу данных города по умолчанию и добавляющий географическую информацию в поле geoip на основе поля ip:
PUT _ingest/pipeline/geoip
{
"description" : "Add geoip info",
"processors" : [
{
"geoip" : {
"field" : "ip"
}
}
]
}
PUT my-index-00001/_doc/my_id?pipeline=geoip
{
"ip": "8.8.8.8"
}
GET my-index-00001/_doc/my_id Что возвращает:
{
"found": true,
"_index": "my-index-00001",
"_type": "_doc",
"_id": "my_id",
"_version": 1,
"_seq_no": 55,
"_primary_term": 1,
"_source": {
"ip": "8.8.8.8",
"geoip": {
"continent_name": "North America",
"country_name": "United States",
"country_iso_code": "US",
"location": { "lat": 37.751, "lon": -97.822 }
}
}
} Вот пример, использующий базу данных страны по умолчанию и добавляющий географическую информацию в поле geo на основе поля ip. Обратите внимание, что эта база данных включена в модуль. Таким образом:
PUT _ingest/pipeline/geoip
{
"description" : "Add geoip info",
"processors" : [
{
"geoip" : {
"field" : "ip",
"target_field" : "geo",
"database_file" : "GeoLite2-Country.mmdb"
}
}
]
}
PUT my-index-00001/_doc/my_id?pipeline=geoip
{
"ip": "8.8.8.8"
}
GET my-index-00001/_doc/my_id возвращает это:
{
"found": true,
"_index": "my-index-00001",
"_type": "_doc",
"_id": "my_id",
"_version": 1,
"_seq_no": 65,
"_primary_term": 1,
"_source": {
"ip": "8.8.8.8",
"geo": {
"continent_name": "North America",
"country_name": "United States",
"country_iso_code": "US"
}
}
} Не все IP-адреса находят геоинформацию в базе данных. В таком случае, в документ не вставляется target_field.
Вот пример того, как будут индексироваться документы, когда информация для "80.231.5.0" не найдена:
PUT _ingest/pipeline/geoip
{
"description" : "Add geoip info",
"processors" : [
{
"geoip" : {
"field" : "ip"
}
}
]
}
PUT my-index-00001/_doc/my_id?pipeline=geoip
{
"ip": "80.231.5.0"
}
GET my-index-00001/_doc/my_id Что возвращает:
{
"_index" : "my-index-00001",
"_type" : "_doc",
"_id" : "my_id",
"_version" : 1,
"_seq_no" : 71,
"_primary_term": 1,
"found" : true,
"_source" : {
"ip" : "80.231.5.0"
}
} Распознавание местоположения как Geopoint
Хотя этот процессор обогащает ваш документ полем location, содержащим приблизительные широту и долготу IP-адреса, это поле не будет индексироваться как тип geo_point в Elasticsearch без явного определения его как такового в схеме.
Вы можете использовать следующую схему для указанного выше примера индекса:
PUT my_ip_locations
{
"mappings": {
"properties": {
"geoip": {
"properties": {
"location": { "type": "geo_point" }
}
}
}
}
} Управление обновлениями вашей собственной базы данных GeoIP2
Если вы не можете автоматически обновлять свои базы данных GeoIP2 с помощью конечной точки Elastic, у вас есть несколько других вариантов:
Использование прокси-конечной точки
Если вы не можете подключиться напрямую к конечной точке Elastic GeoIP, рассмотрите возможность настройки защищённого прокси-сервера. Затем вы можете указать URL прокси-конечной точки в настройке ingest.geoip.downloader.endpoint каждого файла узла elasticsearch.yml.
В строгой настройке может потребоваться добавить следующие домены в список разрешенных доменов:
-
geoip.elastic.co -
storage.googleapis.com
Использование пользовательской конечной точки
Вы можете создать службу, которая имитирует конечную точку Elastic GeoIP. Затем вы можете получать автоматические обновления от этой службы.
- Скачайте файлы вашей базы данных
.mmdbс сайта MaxMind. - Скопируйте файлы базы данных в одну директорию.
-
Из директории Elasticsearch запустите:
./bin/elasticsearch-geoip -s my/source/dir [-t target/directory]
-
Отображайте статические файлы базы данных из вашей директории. Например, вы можете использовать Docker для отображения файлов с помощью сервера nginx:
docker run -v my/source/dir:/usr/share/nginx/html:ro nginx
-
Укажите URL конечной точки службы в настройке
ingest.geoip.downloader.endpointкаждого файла узлаelasticsearch.yml.По умолчанию Elasticsearch проверяет конечную точку на наличие обновлений каждые три дня. Чтобы использовать другой интервал опроса, используйте API настроек кластера, чтобы установить
ingest.geoip.downloader.poll.interval.
Ручная обновление баз данных GeoIP2
- Используйте API настроек кластера, чтобы установить
ingest.geoip.downloader.enabledна значениеfalse. Это отключит автоматические обновления, которые могут перезаписать ваши изменения в базе данных. Это также удалит все загруженные базы данных. -
Скачайте файлы базы данных
.mmdbс сайта MaxMind.Вы также можете использовать пользовательские файлы для городов, стран и ASN
.mmdb. Эти файлы должны быть разархивированы и использовать соответствующие расширения-City.mmdb,-Country.mmdbили-ASN.mmdb. - На развертываниях Elasticsearch Service загрузите базу данных, используя пользовательский пакет.
- На самостоятельных развертываниях скопируйте файлы базы данных в
$ES_CONFIG/ingest-geoip. - В ваших процессорах
geoipнастройте параметрdatabase_fileдля использования пользовательского файла базы данных.
Настройки узла
Процессор geoip поддерживает следующие настройки:
-
ingest.geoip.cache_size - Максимальное количество результатов, которое должно быть кэшировано. По умолчанию
1000.
Обратите внимание, что эти настройки относятся к настройкам узла и применяются ко всем процессорам geoip, то есть один кэш используется для всех определённых процессоров geoip.
Настройки кластера
-
ingest.geoip.downloader.enabled - (Динамический, Булево) Если
true, Elasticsearch автоматически загружает и управляет обновлениями баз данных GeoIP2 сingest.geoip.downloader.endpoint. Еслиfalse, Elasticsearch не загружает обновления и удаляет все загруженные базы данных. По умолчаниюtrue.
-
ingest.geoip.downloader.endpoint - (Статический, строка) URL конечной точки, используемый для загрузки обновлений для баз данных GeoIP2. По умолчанию
https://geoip.elastic.co/v1/database. Elasticsearch сохраняет загруженные файлы баз данных в временной директории каждого узла в временной директории по адресу$ES_TMPDIR/geoip-databases/<node_id>.
-
ingest.geoip.downloader.poll.interval - (Динамический, временное значение) Как часто Elasticsearch проверяет наличие обновлений базы данных GeoIP2 на конечной точке
ingest.geoip.downloader.endpoint. Должно быть больше чем1d(один день). По умолчанию3d(три дня).
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/geoip-processor.html