IP 地址位置处理器
编辑IP 地址位置处理器
编辑ip_location
处理器会添加有关 IPv4 或 IPv6 地址的地理位置信息。
默认情况下,处理器使用来自 MaxMind 的 GeoLite2 City、GeoLite2 Country 和 GeoLite2 ASN IP 地理位置数据库,这些数据库以 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。要获取这些更新的下载统计信息,请使用 GeoIP 统计 API。
如果您的集群无法连接到 Elastic GeoIP 端点,或者您想管理自己的更新,请参阅 管理您自己的 IP 地理位置数据库更新。
如果您希望 Elasticsearch 使用您自己提供的许可证密钥直接从 Maxmind 下载数据库文件,请参阅 创建或更新 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),或者 |
|
否 |
[ |
控制根据 IP 地理位置查找将哪些属性添加到 |
|
否 |
|
如果 |
|
否 |
|
如果 |
|
否 |
|
如果 |
*取决于 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
中配置的属性。
这是一个示例,该示例使用默认城市数据库,并根据 ip
字段将地理信息添加到 ip_location
字段
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 } } } }
这是一个示例,该示例使用默认国家/地区数据库,并根据 ip
字段将地理信息添加到 geo
字段。请注意,此数据库会自动下载。所以这个
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" } }