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/CHANGELOG.md b/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md index f3ce51ba9ed9..95efcbfcc8b5 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-06) ### Bugs Fixed -### Other Changes +- Fixed bug caused by migration from pkg_resources to importlib-metadata + ([#38371](https://github.com/Azure/azure-sdk-for-python/pull/38371)) ## 1.6.3 (2024-11-04) 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 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..18e349913678 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 @@ -185,9 +190,27 @@ 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 +219,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 6e895907235b..4898d3be5a20 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/setup.py +++ b/sdk/monitor/azure-monitor-opentelemetry/setup.py @@ -84,15 +84,15 @@ "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.27", + "opentelemetry-sdk~=1.28", ], entry_points={ "opentelemetry_distro": [ 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,