Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Ingest pipelines ›Ingest processor reference

Процессор определения местоположения IP

Процессор ip_location добавляет информацию о географическом местоположении IPv4 или IPv6 адреса. Он совместим с базами данных геолокации IP GeoIP2 и GeoLite2, доступными на сайте MaxMind, а также со многими базами данных геолокации IP от IPinfo.

По умолчанию процессор использует базы данных геолокации IP GeoLite2 City, GeoLite2 Country и GeoLite2 ASN от MaxMind, выпущенные под лицензией CC BY-SA 4.0. Он автоматически загружает эти базы данных, если ваши узлы могут подключиться к домену storage.googleapis.com и, или:

  • ingest.geoip.downloader.eager.download установлено в значение true
  • в вашем кластере есть хотя бы одна конвейерная линия с процессором geoip или ip_location

Elasticsearch автоматически загружает обновления для этих баз данных с конечной точки Elastic GeoIP: https://geoip.elastic.co/v1/database. Чтобы получить статистику загрузок этих обновлений, воспользуйтесь API статистики GeoIP.

Если ваш кластер не может подключиться к конечной точке Elastic GeoIP или вы хотите управлять собственными обновлениями, см. Управление собственными обновлениями баз данных геолокации IP.

Если вы хотите, чтобы Elasticsearch загружал файлы баз данных напрямую с MaxMind или IPinfo, используя свой собственный ключ лицензии или токен доступа, см. Создание или обновление конфигурации базы данных геолокации IP.

Если Elasticsearch не может подключиться к конечной точке в течение 30 дней, все обновленные базы данных станут недействительными. Elasticsearch прекратит обогащение документов данными о местоположении IP и добавит поле tags: ["_ip_location_expired_database"] вместо этого.

Использование процессора ip_location в конвейере

Таблица 28. Параметры ip-location

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

field

да

-

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

target_field

нет

ip_location

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

database_file

нет

GeoLite2-City.mmdb

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

properties

нет

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

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

ignore_missing

нет

false

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

first_only

нет

true

Если true только первые найденные данные о геолокации IP будут возвращены, даже если field содержит массив.

download_database_on_pipeline_creation

нет

true

Если true (и если ingest.geoip.downloader.eager.download является false), отсутствующая база данных загружается при создании конвейера. В противном случае загрузка запускается при использовании конвейера в качестве default_pipeline или final_pipeline в индексе.

*Зависит от того, что доступно в database_file:

  • Если используется база данных GeoLite2 City или GeoIP2 City, то следующие поля могут быть добавлены под target_field: ip, country_iso_code, country_name, country_in_european_union, registered_country_iso_code, registered_country_name, registered_country_in_european_union, continent_code, continent_name, region_iso_code, region_name, city_name, postal_code, timezone, location и accuracy_radius. Фактически добавленные поля зависят от того, что было найдено и какие свойства были настроены в properties.
  • Если используется база данных GeoLite2 Country или GeoIP2 Country, то следующие поля могут быть добавлены под target_field: ip, country_iso_code, country_name, country_in_european_union, registered_country_iso_code, registered_country_name, registered_country_in_european_union, continent_code и continent_name. Фактически добавленные поля зависят от того, что было найдено и какие свойства были настроены в properties.
  • Если используется база данных GeoLite2 ASN, то следующие поля могут быть добавлены под target_field: ip, asn, organization_name и network. Фактически добавленные поля зависят от того, что было найдено и какие свойства были настроены в properties.
  • Если используется база данных GeoIP2 Anonymous IP, то следующие поля могут быть добавлены под target_field: ip, hosting_provider, tor_exit_node, anonymous_vpn, anonymous, public_proxy и residential_proxy. Фактически добавленные поля зависят от того, что было найдено и какие свойства были настроены в properties.
  • Если используется база данных GeoIP2 Connection Type, то следующие поля могут быть добавлены под target_field: ip и connection_type. Фактически добавленные поля зависят от того, что было найдено и какие свойства были настроены в properties.
  • Если используется база данных GeoIP2 Domain, то следующие поля могут быть добавлены под target_field: ip и domain. Фактически добавленные поля зависят от того, что было найдено и какие свойства были настроены в properties.
  • Если используется база данных GeoIP2 ISP, то следующие поля могут быть добавлены под target_field: ip, asn, organization_name, network, isp, isp_organization_name, mobile_country_code и mobile_network_code. Фактически добавленные поля зависят от того, что было найдено и какие свойства были настроены в properties.
  • Если используется база данных GeoIP2 Enterprise, то следующие поля могут быть добавлены под target_field: ip, country_iso_code, country_name, country_in_european_union, registered_country_iso_code, registered_country_name, registered_country_in_european_union, continent_code, continent_name, region_iso_code, region_name, city_name, postal_code, timezone, location, accuracy_radius, country_confidence, city_confidence, postal_confidence, asn, organization_name, network, hosting_provider, tor_exit_node, anonymous_vpn, anonymous, public_proxy, residential_proxy, domain, isp, isp_organization_name, mobile_country_code, mobile_network_code, user_type и connection_type. Фактически добавленные поля зависят от того, что было найдено и какие свойства были настроены в properties
  • Если используется база данных IPinfo ASN, то следующие поля могут быть добавлены под target_field: ip, asn, organization_name, network, domain, country_iso_code и type. Фактически добавленные поля зависят от того, что было найдено и какие свойства были настроены в properties. Обратите внимание также, что поля country_iso_code и type присутствуют только в базе данных Standard ASN, а не в бесплатной базе данных ASN.
  • Если используется база данных IPinfo Country, то следующие поля могут быть добавлены под target_field: ip, country_iso_code, country_name, continent_code и continent_name. Фактически добавленные поля зависят от того, что было найдено и какие свойства были настроены в properties.
  • Если используется база данных IPinfo IP to Location, то следующие поля могут быть добавлены под target_field: ip, country_iso_code, region_name, city_name, timezone, postal_code и location. Фактически добавленные поля зависят от того, что было найдено и какие свойства были настроены в properties.
  • Если используется база данных IPinfo Privacy Detection, то следующие поля могут быть добавлены под target_field: ip, hosting, proxy, relay, tor, vpn и service. Фактически добавленные поля зависят от того, что было найдено и какие свойства были настроены в properties.

Вот пример использования базы данных города по умолчанию и добавления географической информации в поле ip_location на основе поля ip:

resp = client.ingest.put_pipeline(
    id="ip_location",
    description="Add ip geolocation info",
    processors=[
        {
            "ip_location": {
                "field": "ip"
            }
        }
    ],
)
print(resp)

resp1 = client.index(
    index="my-index-000001",
    id="my_id",
    pipeline="ip_location",
    document={
        "ip": "89.160.20.128"
    },
)
print(resp1)

resp2 = client.get(
    index="my-index-000001",
    id="my_id",
)
print(resp2)
const response = await client.ingest.putPipeline({
  id: "ip_location",
  description: "Add ip geolocation info",
  processors: [
    {
      ip_location: {
        field: "ip",
      },
    },
  ],
});
console.log(response);

const response1 = await client.index({
  index: "my-index-000001",
  id: "my_id",
  pipeline: "ip_location",
  document: {
    ip: "89.160.20.128",
  },
});
console.log(response1);

const response2 = await client.get({
  index: "my-index-000001",
  id: "my_id",
});
console.log(response2);
PUT _ingest/pipeline/ip_location
{
  "description" : "Add ip geolocation info",
  "processors" : [
    {
      "ip_location" : {
        "field" : "ip"
      }
    }
  ]
}
PUT my-index-000001/_doc/my_id?pipeline=ip_location
{
  "ip": "89.160.20.128"
}
GET my-index-000001/_doc/my_id

Результат:

{
  "found": true,
  "_index": "my-index-000001",
  "_id": "my_id",
  "_version": 1,
  "_seq_no": 55,
  "_primary_term": 1,
  "_source": {
    "ip": "89.160.20.128",
    "ip_location": {
      "continent_name": "Europe",
      "country_name": "Sweden",
      "country_iso_code": "SE",
      "city_name" : "Linköping",
      "region_iso_code" : "SE-E",
      "region_name" : "Östergötland County",
      "location": { "lat": 58.4167, "lon": 15.6167 }
    }
  }
}

Вот пример использования базы данных страны по умолчанию и добавления географической информации в поле geo на основе поля ip. Обратите внимание, что эта база данных загружается автоматически. Поэтому:

resp = client.ingest.put_pipeline(
    id="ip_location",
    description="Add ip geolocation info",
    processors=[
        {
            "ip_location": {
                "field": "ip",
                "target_field": "geo",
                "database_file": "GeoLite2-Country.mmdb"
            }
        }
    ],
)
print(resp)

resp1 = client.index(
    index="my-index-000001",
    id="my_id",
    pipeline="ip_location",
    document={
        "ip": "89.160.20.128"
    },
)
print(resp1)

resp2 = client.get(
    index="my-index-000001",
    id="my_id",
)
print(resp2)
const response = await client.ingest.putPipeline({
  id: "ip_location",
  description: "Add ip geolocation info",
  processors: [
    {
      ip_location: {
        field: "ip",
        target_field: "geo",
        database_file: "GeoLite2-Country.mmdb",
      },
    },
  ],
});
console.log(response);

const response1 = await client.index({
  index: "my-index-000001",
  id: "my_id",
  pipeline: "ip_location",
  document: {
    ip: "89.160.20.128",
  },
});
console.log(response1);

const response2 = await client.get({
  index: "my-index-000001",
  id: "my_id",
});
console.log(response2);
PUT _ingest/pipeline/ip_location
{
  "description" : "Add ip geolocation info",
  "processors" : [
    {
      "ip_location" : {
        "field" : "ip",
        "target_field" : "geo",
        "database_file" : "GeoLite2-Country.mmdb"
      }
    }
  ]
}
PUT my-index-000001/_doc/my_id?pipeline=ip_location
{
  "ip": "89.160.20.128"
}
GET my-index-000001/_doc/my_id

возвращает:

{
  "found": true,
  "_index": "my-index-000001",
  "_id": "my_id",
  "_version": 1,
  "_seq_no": 65,
  "_primary_term": 1,
  "_source": {
    "ip": "89.160.20.128",
    "geo": {
      "continent_name": "Europe",
      "country_name": "Sweden",
      "country_iso_code": "SE"
    }
  }
}

Не для всех IP-адресов находится геоинформация в базе данных. В этом случае в документ не вставляется target_field.

Вот пример того, как документы будут индексироваться, когда информация для "80.231.5.0" не может быть найдена:

resp = client.ingest.put_pipeline(
    id="ip_location",
    description="Add ip geolocation info",
    processors=[
        {
            "ip_location": {
                "field": "ip"
            }
        }
    ],
)
print(resp)

resp1 = client.index(
    index="my-index-000001",
    id="my_id",
    pipeline="ip_location",
    document={
        "ip": "80.231.5.0"
    },
)
print(resp1)

resp2 = client.get(
    index="my-index-000001",
    id="my_id",
)
print(resp2)
const response = await client.ingest.putPipeline({
  id: "ip_location",
  description: "Add ip geolocation info",
  processors: [
    {
      ip_location: {
        field: "ip",
      },
    },
  ],
});
console.log(response);

const response1 = await client.index({
  index: "my-index-000001",
  id: "my_id",
  pipeline: "ip_location",
  document: {
    ip: "80.231.5.0",
  },
});
console.log(response1);

const response2 = await client.get({
  index: "my-index-000001",
  id: "my_id",
});
console.log(response2);
PUT _ingest/pipeline/ip_location
{
  "description" : "Add ip geolocation info",
  "processors" : [
    {
      "ip_location" : {
        "field" : "ip"
      }
    }
  ]
}

PUT my-index-000001/_doc/my_id?pipeline=ip_location
{
  "ip": "80.231.5.0"
}

GET my-index-000001/_doc/my_id

Что возвращает:

{
  "_index" : "my-index-000001",
  "_id" : "my_id",
  "_version" : 1,
  "_seq_no" : 71,
  "_primary_term": 1,
  "found" : true,
  "_source" : {
    "ip" : "80.231.5.0"
  }
}

© 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/8.17/ip-location-processor.html

Spec-Zone.ru

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