From a6a06ae214dc8672b8c65efec14ad8fd5dd426fb Mon Sep 17 00:00:00 2001 From: jerevoss Date: Wed, 6 Nov 2024 11:01:33 -0800 Subject: [PATCH 1/8] Distro release 1.6.4 --- sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md | 9 +++------ sdk/monitor/azure-monitor-opentelemetry/setup.py | 2 +- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md b/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md index f3ce51ba9ed9..42980b342ece 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md +++ b/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md @@ -1,14 +1,11 @@ # Release History -## 1.6.4 (Unreleased) - -### Features Added - -### Breaking Changes +## 1.6.4 (2024-11-04) ### Bugs Fixed -### Other Changes +- Removed version of OpenTelemetry that broke instrumentation logic in switch to importlib. + ([#38366](https://github.com/Azure/azure-sdk-for-python/pull/38366)) ## 1.6.3 (2024-11-04) diff --git a/sdk/monitor/azure-monitor-opentelemetry/setup.py b/sdk/monitor/azure-monitor-opentelemetry/setup.py index 6e895907235b..b4b1ecd702b2 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/setup.py +++ b/sdk/monitor/azure-monitor-opentelemetry/setup.py @@ -92,7 +92,7 @@ "opentelemetry-instrumentation-urllib~=0.48b0", "opentelemetry-instrumentation-urllib3~=0.48b0", "opentelemetry-resource-detector-azure~=0.1.4", - "opentelemetry-sdk~=1.27", + "opentelemetry-sdk==1.27.0", ], entry_points={ "opentelemetry_distro": [ From bf705b2eb653f56d61ec00342fd19b08ac7f5952 Mon Sep 17 00:00:00 2001 From: jerevoss Date: Wed, 6 Nov 2024 13:36:04 -0800 Subject: [PATCH 2/8] Fixed bug --- .../azure-monitor-opentelemetry/CHANGELOG.md | 2 +- .../azure/monitor/opentelemetry/_configure.py | 32 +++++++++++++++++-- .../azure-monitor-opentelemetry/setup.py | 2 +- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md b/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md index 42980b342ece..1519cfb02db6 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md +++ b/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md @@ -4,7 +4,7 @@ ### Bugs Fixed -- Removed version of OpenTelemetry that broke instrumentation logic in switch to importlib. +- Fixed bug caused by migration from pkg_resources to importlib-metadata ([#38366](https://github.com/Azure/azure-sdk-for-python/pull/38366)) ## 1.6.3 (2024-11-04) diff --git a/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py b/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py index 1136cb9d96e9..1312201d9064 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py +++ b/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py @@ -3,6 +3,7 @@ # Licensed under the MIT License. See License in the project root for # license information. # -------------------------------------------------------------------------- +from functools import cached_property from logging import getLogger from typing import Dict, List, cast @@ -23,7 +24,11 @@ from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchSpanProcessor from opentelemetry.trace import set_tracer_provider -from pkg_resources import iter_entry_points # type: ignore +from opentelemetry.util._importlib_metadata import ( + EntryPoint, + distributions, + entry_points, +) from azure.core.settings import settings from azure.core.tracing.ext.opentelemetry_span import OpenTelemetrySpan @@ -184,10 +189,30 @@ def _setup_metrics(configurations: Dict[str, ConfigurationValue]): def _setup_live_metrics(configurations): enable_live_metrics(**configurations) +class _EntryPointDistFinder: + @cached_property + def _mapping(self): + return { + self._key_for(ep): dist + for dist in distributions() + for ep in dist.entry_points + } + + def dist_for(self, entry_point: EntryPoint): + dist = getattr(entry_point, "dist", None) + if dist: + return dist + + return self._mapping.get(self._key_for(entry_point)) + + @staticmethod + def _key_for(entry_point: EntryPoint): + return f"{entry_point.group}:{entry_point.name}:{entry_point.value}" def _setup_instrumentations(configurations: Dict[str, ConfigurationValue]): + entry_point_finder = _EntryPointDistFinder() # use pkg_resources for now until https://github.com/open-telemetry/opentelemetry-python/pull/3168 is merged - for entry_point in iter_entry_points("opentelemetry_instrumentor"): + for entry_point in entry_points(group="opentelemetry_instrumentor"): lib_name = entry_point.name if lib_name not in _ALL_SUPPORTED_INSTRUMENTED_LIBRARIES: continue @@ -196,7 +221,8 @@ def _setup_instrumentations(configurations: Dict[str, ConfigurationValue]): continue try: # Check if dependent libraries/version are installed - conflict = get_dist_dependency_conflicts(entry_point.dist) # type: ignore + entry_point_dist = entry_point_finder.dist_for(entry_point) # type: ignore + conflict = get_dist_dependency_conflicts(entry_point_dist) # type: ignore if conflict: _logger.debug( "Skipping instrumentation %s: %s", diff --git a/sdk/monitor/azure-monitor-opentelemetry/setup.py b/sdk/monitor/azure-monitor-opentelemetry/setup.py index b4b1ecd702b2..274c22f611bd 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/setup.py +++ b/sdk/monitor/azure-monitor-opentelemetry/setup.py @@ -92,7 +92,7 @@ "opentelemetry-instrumentation-urllib~=0.48b0", "opentelemetry-instrumentation-urllib3~=0.48b0", "opentelemetry-resource-detector-azure~=0.1.4", - "opentelemetry-sdk==1.27.0", + "opentelemetry-sdk~=1.28", ], entry_points={ "opentelemetry_distro": [ From 4342040170933f00efb063425c8b78ac7e898ea6 Mon Sep 17 00:00:00 2001 From: jerevoss Date: Wed, 6 Nov 2024 13:52:37 -0800 Subject: [PATCH 3/8] Update broken docs links --- .../README.md | 24 +++++++++---------- .../azure-monitor-opentelemetry/README.md | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/README.md b/sdk/monitor/azure-monitor-opentelemetry-exporter/README.md index 4c74f40393bd..57731e1e342b 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/README.md +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/README.md @@ -683,13 +683,13 @@ contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additio [opentelemetry_spec]: https://opentelemetry.io/ [instrumentation_library]: https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/overview.md#instrumentation-libraries [log_concept]: https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/overview.md#log-signal -[log_record]: https://opentelemetry-python.readthedocs.io/en/stable/sdk/_logs.html#opentelemetry.sdk._logs.LogRecord -[logger]: https://opentelemetry-python.readthedocs.io/en/stable/sdk/_logs.html#opentelemetry.sdk._logs.Logger -[logger_provider]: https://opentelemetry-python.readthedocs.io/en/stable/sdk/_logs.html#opentelemetry.sdk._logs.LoggerProvider -[log_record_processor]: https://opentelemetry-python.readthedocs.io/en/stable/sdk/_logs.html#opentelemetry.sdk._logs.LogRecordProcessor -[logging_handler]: https://opentelemetry-python.readthedocs.io/en/stable/sdk/_logs.html#opentelemetry.sdk._logs.LoggingHandler +[log_record]: https://opentelemetry-python.readthedocs.io/en/latest/sdk/_logs.html#opentelemetry.sdk._logs.LogRecord +[logger]: https://opentelemetry-python.readthedocs.io/en/latest/sdk/_logs.html#opentelemetry.sdk._logs.Logger +[logger_provider]: https://opentelemetry-python.readthedocs.io/en/latest/sdk/_logs.html#opentelemetry.sdk._logs.LoggerProvider +[log_record_processor]: https://opentelemetry-python.readthedocs.io/en/latest/sdk/_logs.html#opentelemetry.sdk._logs.LogRecordProcessor +[logging_handler]: https://opentelemetry-python.readthedocs.io/en/latest/sdk/_logs.html#opentelemetry.sdk._logs.LoggingHandler [log_reference]: https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/monitor/azure-monitor-opentelemetry-exporter/azure/monitor/opentelemetry/exporter/export/logs/_exporter.py -[ot_logging_sdk]: https://opentelemetry-python.readthedocs.io/en/stable/sdk/_logs.html +[ot_logging_sdk]: https://opentelemetry-python.readthedocs.io/en/latest/sdk/_logs.html [metric_concept]: https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/overview.md#metric-signal [measurement]: https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/api.md#measurement [instrument]: https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/api.md#instrument @@ -697,12 +697,12 @@ contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additio [meter_provider]: https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/api.md#meterprovider [metric_reader]:https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk.md#metricreader [metric_reference]: https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/monitor/azure-monitor-opentelemetry-exporter/azure/monitor/opentelemetry/exporter/export/metrics/_exporter.py -[ot_metrics_sdk]: https://opentelemetry-python.readthedocs.io/en/stable/sdk/metrics.html +[ot_metrics_sdk]: https://opentelemetry-python.readthedocs.io/en/latest/sdk/metrics.html [trace_concept]: https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/overview.md#tracing-signal -[span]: https://opentelemetry-python.readthedocs.io/en/stable/api/trace.html?highlight=TracerProvider#opentelemetry.trace.Span -[tracer]: https://opentelemetry-python.readthedocs.io/en/stable/api/trace.html?highlight=TracerProvider#opentelemetry.trace.Tracer -[tracer_provider]: https://opentelemetry-python.readthedocs.io/en/stable/api/trace.html?highlight=TracerProvider#opentelemetry.trace.TracerProvider -[span_processor]: https://opentelemetry-python.readthedocs.io/en/stable/_modules/opentelemetry/sdk/trace.html?highlight=SpanProcessor# +[span]: https://opentelemetry-python.readthedocs.io/en/latest/api/trace.html?highlight=TracerProvider#opentelemetry.trace.Span +[tracer]: https://opentelemetry-python.readthedocs.io/en/latest/api/trace.html?highlight=TracerProvider#opentelemetry.trace.Tracer +[tracer_provider]: https://opentelemetry-python.readthedocs.io/en/latest/api/trace.html?highlight=TracerProvider#opentelemetry.trace.TracerProvider +[span_processor]: https://opentelemetry-python.readthedocs.io/en/latest/_modules/opentelemetry/sdk/trace.html?highlight=SpanProcessor# [trace_reference]: https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/monitor/azure-monitor-opentelemetry-exporter/azure/monitor/opentelemetry/exporter/export/trace/_exporter.py -[ot_tracing_sdk]: https://opentelemetry-python.readthedocs.io/en/stable/sdk/trace.html +[ot_tracing_sdk]: https://opentelemetry-python.readthedocs.io/en/latest/sdk/trace.html [sampler_ref]: https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/sdk.md#sampling diff --git a/sdk/monitor/azure-monitor-opentelemetry/README.md b/sdk/monitor/azure-monitor-opentelemetry/README.md index 5296b94fe614..8697d1f9cf9c 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/README.md +++ b/sdk/monitor/azure-monitor-opentelemetry/README.md @@ -223,7 +223,7 @@ contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additio [ot_metric_reader]: https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk.md#metricreader [ot_python_docs]: https://opentelemetry.io/docs/instrumentation/python/ [ot_sdk_python]: https://github.com/open-telemetry/opentelemetry-python -[ot_sdk_python_metric_reader]: https://opentelemetry-python.readthedocs.io/en/stable/sdk/metrics.export.html#opentelemetry.sdk.metrics.export.MetricReader +[ot_sdk_python_metric_reader]: https://opentelemetry-python.readthedocs.io/en/latest/sdk/metrics.export.html#opentelemetry.sdk.metrics.export.MetricReader [ot_span_processor]: https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/sdk.md#span-processor [ot_view]: https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk.md#view [ot_sdk_python_view_examples]: https://github.com/open-telemetry/opentelemetry-python/tree/main/docs/examples/metrics/views From 3641699d44e9b1f8b63f203e695759a8e263c946 Mon Sep 17 00:00:00 2001 From: Jeremy Voss Date: Wed, 6 Nov 2024 14:25:54 -0800 Subject: [PATCH 4/8] Update sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md Co-authored-by: Paul Van Eck --- sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md b/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md index 1519cfb02db6..b3323dd47eba 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md +++ b/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## 1.6.4 (2024-11-04) +## 1.6.4 (2024-11-06) ### Bugs Fixed From aafc89952b2f2492946557c04602fdeb80f02edd Mon Sep 17 00:00:00 2001 From: Jeremy Voss Date: Wed, 6 Nov 2024 14:26:00 -0800 Subject: [PATCH 5/8] Update sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md Co-authored-by: Paul Van Eck --- sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md b/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md index b3323dd47eba..95efcbfcc8b5 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md +++ b/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md @@ -5,7 +5,7 @@ ### Bugs Fixed - Fixed bug caused by migration from pkg_resources to importlib-metadata - ([#38366](https://github.com/Azure/azure-sdk-for-python/pull/38366)) + ([#38371](https://github.com/Azure/azure-sdk-for-python/pull/38371)) ## 1.6.3 (2024-11-04) From 338bed1bacc0676b21589feb178c3227f9516731 Mon Sep 17 00:00:00 2001 From: jerevoss Date: Wed, 6 Nov 2024 14:50:13 -0800 Subject: [PATCH 6/8] Update all otel dependencies --- sdk/monitor/azure-monitor-opentelemetry/setup.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry/setup.py b/sdk/monitor/azure-monitor-opentelemetry/setup.py index 274c22f611bd..4898d3be5a20 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/setup.py +++ b/sdk/monitor/azure-monitor-opentelemetry/setup.py @@ -84,13 +84,13 @@ "azure-core<2.0.0,>=1.28.0", "azure-core-tracing-opentelemetry~=1.0.0b11", "azure-monitor-opentelemetry-exporter~=1.0.0b31", - "opentelemetry-instrumentation-django~=0.48b0", - "opentelemetry-instrumentation-fastapi~=0.48b0", - "opentelemetry-instrumentation-flask~=0.48b0", - "opentelemetry-instrumentation-psycopg2~=0.48b0", - "opentelemetry-instrumentation-requests~=0.48b0", - "opentelemetry-instrumentation-urllib~=0.48b0", - "opentelemetry-instrumentation-urllib3~=0.48b0", + "opentelemetry-instrumentation-django~=0.49b0", + "opentelemetry-instrumentation-fastapi~=0.49b0", + "opentelemetry-instrumentation-flask~=0.49b0", + "opentelemetry-instrumentation-psycopg2~=0.49b0", + "opentelemetry-instrumentation-requests~=0.49b0", + "opentelemetry-instrumentation-urllib~=0.49b0", + "opentelemetry-instrumentation-urllib3~=0.49b0", "opentelemetry-resource-detector-azure~=0.1.4", "opentelemetry-sdk~=1.28", ], From 50cd3eec623b73070ff0ad6f6a1023eff8641a72 Mon Sep 17 00:00:00 2001 From: jerevoss Date: Wed, 6 Nov 2024 15:35:39 -0800 Subject: [PATCH 7/8] Updated tests --- .../tests/test_configure.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry/tests/test_configure.py b/sdk/monitor/azure-monitor-opentelemetry/tests/test_configure.py index e63f65d40df6..e084c5205c26 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/tests/test_configure.py +++ b/sdk/monitor/azure-monitor-opentelemetry/tests/test_configure.py @@ -463,7 +463,7 @@ def test_setup_live_metrics( @patch("azure.monitor.opentelemetry._configure._ALL_SUPPORTED_INSTRUMENTED_LIBRARIES", ("test_instr2")) @patch("azure.monitor.opentelemetry._configure._is_instrumentation_enabled") @patch("azure.monitor.opentelemetry._configure.get_dist_dependency_conflicts") - @patch("azure.monitor.opentelemetry._configure.iter_entry_points") + @patch("azure.monitor.opentelemetry._configure.entry_points") def test_setup_instrumentations_lib_not_supported( self, iter_mock, @@ -490,7 +490,7 @@ def test_setup_instrumentations_lib_not_supported( @patch("azure.monitor.opentelemetry._configure._setup_additional_azure_sdk_instrumentations") @patch("azure.monitor.opentelemetry._configure._ALL_SUPPORTED_INSTRUMENTED_LIBRARIES", ("azure_sdk")) @patch("azure.monitor.opentelemetry._configure._is_instrumentation_enabled") - @patch("azure.monitor.opentelemetry._configure.iter_entry_points") + @patch("azure.monitor.opentelemetry._configure.entry_points") def test_setup_instrumentations_additional_azure( self, iter_mock, @@ -509,7 +509,7 @@ def test_setup_instrumentations_additional_azure( @patch("azure.monitor.opentelemetry._configure._is_instrumentation_enabled") @patch("azure.monitor.opentelemetry._configure._logger") @patch("azure.monitor.opentelemetry._configure.get_dist_dependency_conflicts") - @patch("azure.monitor.opentelemetry._configure.iter_entry_points") + @patch("azure.monitor.opentelemetry._configure.entry_points") def test_setup_instrumentations_conflict( self, iter_mock, @@ -536,7 +536,7 @@ def test_setup_instrumentations_conflict( @patch("azure.monitor.opentelemetry._configure._is_instrumentation_enabled") @patch("azure.monitor.opentelemetry._configure._logger") @patch("azure.monitor.opentelemetry._configure.get_dist_dependency_conflicts") - @patch("azure.monitor.opentelemetry._configure.iter_entry_points") + @patch("azure.monitor.opentelemetry._configure.entry_points") def test_setup_instrumentations_exception( self, iter_mock, @@ -565,7 +565,7 @@ def test_setup_instrumentations_exception( @patch("azure.monitor.opentelemetry._configure._is_instrumentation_enabled") @patch("azure.monitor.opentelemetry._configure._logger") @patch("azure.monitor.opentelemetry._configure.get_dist_dependency_conflicts") - @patch("azure.monitor.opentelemetry._configure.iter_entry_points") + @patch("azure.monitor.opentelemetry._configure.entry_points") def test_setup_instrumentations_disabled( self, iter_mock, From f45ca444f442f9450a7aab4030ae444bc481a705 Mon Sep 17 00:00:00 2001 From: jerevoss Date: Wed, 6 Nov 2024 16:19:31 -0800 Subject: [PATCH 8/8] lint --- .../azure/monitor/opentelemetry/_configure.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py b/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py index 1312201d9064..18e349913678 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py +++ b/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py @@ -189,14 +189,11 @@ def _setup_metrics(configurations: Dict[str, ConfigurationValue]): def _setup_live_metrics(configurations): enable_live_metrics(**configurations) + class _EntryPointDistFinder: @cached_property def _mapping(self): - return { - self._key_for(ep): dist - for dist in distributions() - for ep in dist.entry_points - } + return {self._key_for(ep): dist for dist in distributions() for ep in dist.entry_points} def dist_for(self, entry_point: EntryPoint): dist = getattr(entry_point, "dist", None) @@ -209,6 +206,7 @@ def dist_for(self, entry_point: EntryPoint): def _key_for(entry_point: EntryPoint): return f"{entry_point.group}:{entry_point.name}:{entry_point.value}" + def _setup_instrumentations(configurations: Dict[str, ConfigurationValue]): entry_point_finder = _EntryPointDistFinder() # use pkg_resources for now until https://github.com/open-telemetry/opentelemetry-python/pull/3168 is merged