Spec-Zone.ru › Elasticsearch 7
›Руководство по Elasticsearch [7.17] ›Трубы агрегации ›Справочник по процессорам агрегации

Процессор 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 параметры

Имя Обязательно По умолчанию Описание

field

да

-

Поле, из которого нужно получить IP-адрес для географического поиска.

target_field

нет

geoip

Поле, которое будет содержать географическую информацию, полученную из базы данных MaxMind.

database_file

нет

GeoLite2-City.mmdb

Имя файла базы данных (GeoLite2-City.mmdb, GeoLite2-Country.mmdb или GeoLite2-ASN.mmdb) или пользовательской базы данных в каталоге конфигурации ingest-geoip.

properties

нет

[continent_name, country_iso_code, country_name, region_iso_code, region_name, city_name, location] *

Управляет тем, какие свойства добавляются в поле target_field на основе географического поиска.

ignore_missing

нет

false

Если true и field не существуют, процессор тихо завершается, не изменяя документ.

first_only

нет

true

Если true найден только первый geoip данные, даже если field содержит массив.

*Зависит от того, что доступно в 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, у вас есть несколько других вариантов:

  • Использование прокси-конечной точки
  • Использование пользовательской конечной точки
  • Ручная обновление баз данных GeoIP2

Использование прокси-конечной точки

Если вы не можете подключиться напрямую к конечной точке Elastic GeoIP, рассмотрите возможность настройки защищённого прокси-сервера. Затем вы можете указать URL прокси-конечной точки в настройке ingest.geoip.downloader.endpoint каждого файла узла elasticsearch.yml.

В строгой настройке может потребоваться добавить следующие домены в список разрешенных доменов:

  • geoip.elastic.co
  • storage.googleapis.com

Использование пользовательской конечной точки

Вы можете создать службу, которая имитирует конечную точку Elastic GeoIP. Затем вы можете получать автоматические обновления от этой службы.

  1. Скачайте файлы вашей базы данных .mmdb с сайта MaxMind.
  2. Скопируйте файлы базы данных в одну директорию.
  3. Из директории Elasticsearch запустите:

    ./bin/elasticsearch-geoip -s my/source/dir [-t target/directory]
  4. Отображайте статические файлы базы данных из вашей директории. Например, вы можете использовать Docker для отображения файлов с помощью сервера nginx:

    docker run -v my/source/dir:/usr/share/nginx/html:ro nginx
  5. Укажите URL конечной точки службы в настройке ingest.geoip.downloader.endpoint каждого файла узла elasticsearch.yml.

    По умолчанию Elasticsearch проверяет конечную точку на наличие обновлений каждые три дня. Чтобы использовать другой интервал опроса, используйте API настроек кластера, чтобы установить ingest.geoip.downloader.poll.interval.

Ручная обновление баз данных GeoIP2

  1. Используйте API настроек кластера, чтобы установить ingest.geoip.downloader.enabled на значение false. Это отключит автоматические обновления, которые могут перезаписать ваши изменения в базе данных. Это также удалит все загруженные базы данных.
  2. Скачайте файлы базы данных .mmdb с сайта MaxMind.

    Вы также можете использовать пользовательские файлы для городов, стран и ASN .mmdb. Эти файлы должны быть разархивированы и использовать соответствующие расширения -City.mmdb, -Country.mmdb или -ASN.mmdb.

  3. На развертываниях Elasticsearch Service загрузите базу данных, используя пользовательский пакет.
  4. На самостоятельных развертываниях скопируйте файлы базы данных в $ES_CONFIG/ingest-geoip.
  5. В ваших процессорах 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API