From 88a821b5718919d97e7b84ec189c5cb3afd62417 Mon Sep 17 00:00:00 2001 From: Heemin Kim Date: Tue, 3 Oct 2023 15:58:22 -0700 Subject: [PATCH 1/2] Add ip2geo blog post Signed-off-by: Heemin Kim --- ...-ip2geo-processor-with-automatic-update.md | 155 ++++++++++++++++++ .../ip2geo-overview.jpg | Bin 0 -> 35917 bytes 2 files changed, 155 insertions(+) create mode 100644 _posts/2023-10-04-new-ip2geo-processor-with-automatic-update.md create mode 100644 assets/media/blog-images/2023-10-04-new-ip2geo-processor-with-automatic-update/ip2geo-overview.jpg diff --git a/_posts/2023-10-04-new-ip2geo-processor-with-automatic-update.md b/_posts/2023-10-04-new-ip2geo-processor-with-automatic-update.md new file mode 100644 index 0000000000..7f124eae90 --- /dev/null +++ b/_posts/2023-10-04-new-ip2geo-processor-with-automatic-update.md @@ -0,0 +1,155 @@ +--- +layout: post +title: "New IP2Geo processor with automatic update in OpenSearch" +authors: +- heemin +- junqiu +- vamshin +- satnandi + date: 2023-10-04 00:00:00 -0700 + categories: +- technical-posts + meta_keywords: OpenSearch ip2geo processor, ip to geo conversion, getting geo data from ip address + meta_description: Learn how the OpenSearch IP2Geo processor helps users to transform IP address to geolocation data during a document ingestion. + excerpt: When you host a service across geographic regions, it often helps to understand load patterns from various geographies. In many cases it helps to analyze anomalies and attacks. Starting with the 2.10 release, the OpenSearch IP2Geo processor allows you to filter the sources to the city level. Additionally, the IP2Geo processor periodically updates the IP-to-Geo mapping data in the background, ensuring that the IP address can be mapped to the latest location data. +--- + +When you host a service across geographic regions, it often helps to understand load patterns from various geographies. In many cases it helps to analyze anomalies and attacks. Starting with the 2.10 release, the OpenSearch IP2Geo processor allows you to filter the sources to the city level. Additionally, the IP2Geo processor periodically updates the IP-to-Geo mapping data in the background, ensuring that the IP address can be mapped to the latest location data. + +## IP2Geo processor overview + +IP2Geo processor diagram{: .img-fluid } + +As part of configuring and enabling an IP2Geo processor, we need to set up another resource called a data source. A data source represents IP-to-Geo mapping data. It contains an endpoint from which to download IP-to-Geo mapping data and specifies how frequently the database should be updated. The downloaded data is stored in a system index. Once a data source is created, you can create an IP2Geo processor using the data source. Behind the scenes, the IP2Geo processor maps the IP address to the geolocation and appends it to the original document. Due to this internal search to obtain geolocation data for a given IP address, it is important that all ingest nodes become data nodes so that IP-to-Geo mapping data can exist on all ingest nodes and searches can be run locally to reduce ingest latency. +## How to add the country name to incoming requests +Before starting, make sure your OpenSearch cluster has the job-scheduler and geospatial plugins installed. + +Now let’s look at how to create a data source and an IP2Geo processor. OpenSearch provides three public endpoints: + +* https://geoip.maps.opensearch.org/v1/geolite2-country/manifest.json +* https://geoip.maps.opensearch.org/v1/geolite2-city/manifest.json +* https://geoip.maps.opensearch.org/v1/geolite2-asn/manifest.json + +The original data is provided by MaxMind. MaxMind updates the data twice weekly, at most. Each endpoint provides a different type of database. You can find what type of data you can get from each database at https://dev.maxmind.com/geoip/docs/databases. Here you are going to use the country endpoint to create a data source so that you can get the country name to which the IP address belongs: + +```http request +PUT /_plugins/geospatial/ip2geo/datasource/county-datasource +{ + "endpoint": "https://geoip.maps.opensearch.org/v1/geolite2-country/manifest.json", + "update_interval_in_days": 3 +} +``` +After creation, it takes some time for the data source to be ready because IP-to-Geo mapping data needs to be downloaded from the external endpoint and stored in a system index. You can query the current state of the data source by using the get datasource API operations: +```http request +GET /_plugins/geospatial/ip2geo/datasource/country-datasource +``` +```http request +{ + "datasources": [ + { + "name": "country-datasource", + "state": "CREATING", + "endpoint": "https://geoip.maps.opensearch.org/v1/geolite2-country/manifest.json", + "update_interval_in_days": 3, + "next_update_at_in_epoch_millis": 1694276644994, + "database": { + }, + "update_stats": { + } + } + ] +} +``` +Once the data source has been created, the state changes to `AVAILABLE` and it provides all the available fields that you can append to your document: +```http request +{ + "datasources": [ + { + "name": "country-datasource", + "state": "AVAILABLE", + "endpoint": "https://geoip.maps.opensearch.org/v1/geolite2-country/manifest.json", + "update_interval_in_days": 3, + "next_update_at_in_epoch_millis": 1694276644994, + "database": { + "provider": "maxmind", + "sha256_hash": "maqhCkz/+pRH6D14Ux6uVDYaul7k1TDnKm3ppulgToY=", + "updated_at_in_epoch_millis": 1693944024000, + "valid_for_in_days": 30, + "fields": [ + "continent_name", + "country_name", + "country_iso_code" + ] + }, + "update_stats": { + "last_succeeded_at_in_epoch_millis": 1694017472128, + "last_processing_time_in_millis": 27060 + } + } + ] +} +``` +Next, create an IP2Geo processor: +```http request +PUT /_ingest/pipeline/my-processor +{ + "description":"convert ip to country", + "processors":[ + { + "ip2geo":{ + "datasource": "country-datasource", + "field":"ip", + "properties":["country_name"] + } + } + ] +} +``` +After the processor is created, you can determine whether the processor works as expected: +```http request +GET /_ingest/pipeline/my-processor/_simulate +{ + "docs":[ + { + "_source":{ + "ip":"2001:2000::" + } + } + ] +} +``` +You can see that the IP address “2001:2000::” currently belongs to Sweden: +```http request +{ + "docs": [ + { + "doc": { + "_index": "_index", + "_id": "_id", + "_source": { + "ip2geo": { + "country_name": "Sweden" + }, + "ip": "2001:2000::" + }, + "_ingest": { + "timestamp": "2023-09-06T16:28:49.59204Z" + } + } + } + ] +} +``` +Now you can use the processor to add the country name to your document during ingestion in the same way that you use other processors: +```http request +PUT /my-index/_doc/1?pipeline=my-processor +{ + "ip":"2001:2000::" +} +``` +## Summary +In OpenSearch 2.10, users can create an IP2Geo processor and convert an IP address to a geolocation. This is just one example of how the IP2Geo processor can be used. With added geolocation data and OpenSearch's multilayer map infrastructure, users can present their insights through easily understandable visualizations. The geospatial information can also serve as additional data for anomaly detection algorithms. If you have your own success story about using the IP2Geo processor, we’d love to hear it! Feel free to submit a blog proposal using the blog post:Issue template on GitHub. + +To learn more about the IP2Geo processor, check out the IP2Geo processor documentation and the corresponding [RFC](https://github.com/opensearch-project/OpenSearch/issues/5856). If you find any issues or have questions, you can create an issue on [GitHub](https://github.com/opensearch-project/geospatial/issues/new/choose) or ask a question on the community [forum](https://forum.opensearch.org). + + diff --git a/assets/media/blog-images/2023-10-04-new-ip2geo-processor-with-automatic-update/ip2geo-overview.jpg b/assets/media/blog-images/2023-10-04-new-ip2geo-processor-with-automatic-update/ip2geo-overview.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1c5d1d69253d2361075399ed23795df9da4b6a6f GIT binary patch literal 35917 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 literal 0 HcmV?d00001 From 89a77a76f7b8e3f37966e8cf5c998b04ffa5ad75 Mon Sep 17 00:00:00 2001 From: Kris Freedain Date: Thu, 5 Oct 2023 14:29:13 -0700 Subject: [PATCH 2/2] Update 2023-10-04-new-ip2geo-processor-with-automatic-update.md minor meta data edits Signed-off-by: Kris Freedain --- ...10-04-new-ip2geo-processor-with-automatic-update.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/_posts/2023-10-04-new-ip2geo-processor-with-automatic-update.md b/_posts/2023-10-04-new-ip2geo-processor-with-automatic-update.md index 7f124eae90..5104db1ba1 100644 --- a/_posts/2023-10-04-new-ip2geo-processor-with-automatic-update.md +++ b/_posts/2023-10-04-new-ip2geo-processor-with-automatic-update.md @@ -6,12 +6,12 @@ authors: - junqiu - vamshin - satnandi - date: 2023-10-04 00:00:00 -0700 - categories: +date: 2023-10-04 00:00:00 -0700 +categories: - technical-posts - meta_keywords: OpenSearch ip2geo processor, ip to geo conversion, getting geo data from ip address - meta_description: Learn how the OpenSearch IP2Geo processor helps users to transform IP address to geolocation data during a document ingestion. - excerpt: When you host a service across geographic regions, it often helps to understand load patterns from various geographies. In many cases it helps to analyze anomalies and attacks. Starting with the 2.10 release, the OpenSearch IP2Geo processor allows you to filter the sources to the city level. Additionally, the IP2Geo processor periodically updates the IP-to-Geo mapping data in the background, ensuring that the IP address can be mapped to the latest location data. +meta_keywords: OpenSearch ip2geo processor, ip to geo conversion, getting geo data from ip address +meta_description: Learn how the OpenSearch IP2Geo processor helps users to transform IP address to geolocation data during a document ingestion. +excerpt: When you host a service across geographic regions, it often helps to understand load patterns from various geographies. In many cases it helps to analyze anomalies and attacks. Starting with the 2.10 release, the OpenSearch IP2Geo processor allows you to filter the sources to the city level. Additionally, the IP2Geo processor periodically updates the IP-to-Geo mapping data in the background, ensuring that the IP address can be mapped to the latest location data. --- When you host a service across geographic regions, it often helps to understand load patterns from various geographies. In many cases it helps to analyze anomalies and attacks. Starting with the 2.10 release, the OpenSearch IP2Geo processor allows you to filter the sources to the city level. Additionally, the IP2Geo processor periodically updates the IP-to-Geo mapping data in the background, ensuring that the IP address can be mapped to the latest location data.