Процессор определения местоположения 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
| Имя | Обязательно | По умолчанию | Описание |
|---|---|---|---|
| да | - | Поле, из которого нужно получить IP-адрес для географического поиска. |
| нет | ip_location | Поле, которое будет содержать географическую информацию, полученную из базы данных. |
| нет | GeoLite2-City.mmdb | Имя файла базы данных, ссылающееся на одну из автоматически загружаемых баз данных GeoLite2 (GeoLite2-City.mmdb, GeoLite2-Country.mmdb или GeoLite2-ASN.mmdb), или имя поддерживаемого файла базы данных в каталоге конфигурации |
| нет | [ | Управляет тем, какие свойства добавляются к |
| нет |
| Если |
| нет |
| Если |
| нет |
| Если |
*Зависит от того, что доступно в 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