From 6f33e54b963689444c33a8fc7cb50ac129ba006f Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Thu, 9 May 2024 13:01:02 -0700 Subject: [PATCH 01/16] add live metrics to distro --- .../CHANGELOG.md | 3 + .../azure-monitor-opentelemetry/CHANGELOG.md | 3 + .../azure-monitor-opentelemetry/README.md | 2 + .../azure/monitor/opentelemetry/_configure.py | 21 +++++ .../azure/monitor/opentelemetry/_constants.py | 1 + .../opentelemetry/_utils/configurations.py | 7 ++ .../samples/metrics/live.py | 37 +++++++++ .../tests/test_configure.py | 82 +++++++++++++++++++ .../tests/utils/test_configurations.py | 1 + 9 files changed, 157 insertions(+) create mode 100644 sdk/monitor/azure-monitor-opentelemetry/samples/metrics/live.py diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/CHANGELOG.md b/sdk/monitor/azure-monitor-opentelemetry-exporter/CHANGELOG.md index 5a2fe89ef204..195d9b976a54 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/CHANGELOG.md +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/CHANGELOG.md @@ -10,6 +10,9 @@ ### Other Changes +- Update live metrics to use typespec generated swagger + ([#34840](https://github.com/Azure/azure-sdk-for-python/pull/34840)) + ## 1.0.0b25 (2024-04-19) ### Features Added diff --git a/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md b/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md index 89c3ac8bb3b9..15bd0da15e1f 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md +++ b/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md @@ -4,6 +4,9 @@ ### Features Added +- Enable live metrics feature + ([#35218](https://github.com/Azure/azure-sdk-for-python/pull/35218)) + ### Breaking Changes ### Bugs Fixed diff --git a/sdk/monitor/azure-monitor-opentelemetry/README.md b/sdk/monitor/azure-monitor-opentelemetry/README.md index 32d856d41eda..aa39683a029a 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/README.md +++ b/sdk/monitor/azure-monitor-opentelemetry/README.md @@ -60,6 +60,7 @@ You can use `configure_azure_monitor` to set up instrumentation for your app to | Parameter | Description | Environment Variable | |-------------------|----------------------------------------------------|----------------------| | `connection_string` | The [connection string][connection_string_doc] for your Application Insights resource. The connection string will be automatically populated from the `APPLICATIONINSIGHTS_CONNECTION_STRING` environment variable if not explicitly passed in. | `APPLICATIONINSIGHTS_CONNECTION_STRING` | +| `enable_live_metrics` | Enable [live metrics](application_insights_live_metrics) feature. | `N/A` | | `logger_name` | The name of the [Python logger][python_logger] under which telemetry is collected. | `N/A` | | `instrumentation_options` | A nested dictionary that determines which instrumentations to enable or disable. Instrumentations are referred to by their [Library Names](#officially-supported-instrumentations). For example, `{"azure_sdk": {"enabled": False}, "flask": {"enabled": False}, "django": {"enabled": True}}` will disable Azure Core Tracing and the Flask instrumentation but leave Django and the other default instrumentations enabled. The `OTEL_PYTHON_DISABLED_INSTRUMENTATIONS` environment variable explained below can also be used to disable instrumentations. | `N/A` | | `resource` | Specifies the OpenTelemetry [Resource][ot_spec_resource] associated with your application. Passed in [Resource Attributes][ot_spec_resource_attributes] take priority over default attributes and those from [Resource Detectors][ot_python_resource_detectors]. | [OTEL_SERVICE_NAME][ot_spec_service_name], [OTEL_RESOURCE_ATTRIBUTES][ot_spec_resource_attributes], [OTEL_EXPERIMENTAL_RESOURCE_DETECTORS][ot_python_resource_detectors] | @@ -210,6 +211,7 @@ contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additio [azure_monitor_opentelemetry_exporters]: https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/monitor/azure-monitor-opentelemetry-exporter#microsoft-opentelemetry-exporter-for-azure-monitor [azure_portal]: https://portal.azure.com [azure_sub]: https://azure.microsoft.com/free/ +[application_insights_live_metrics]: https://learn.microsoft.com/azure/azure-monitor/app/live-stream [application_insights_namespace]: https://learn.microsoft.com/azure/azure-monitor/app/app-insights-overview [application_insights_sampling]: https://learn.microsoft.com/azure/azure-monitor/app/sampling [connection_string_doc]: https://learn.microsoft.com/azure/azure-monitor/app/sdk-connection-string 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 d4745c3e8220..05cc7ae64c10 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py +++ b/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py @@ -32,12 +32,18 @@ DISABLE_LOGGING_ARG, DISABLE_METRICS_ARG, DISABLE_TRACING_ARG, + ENABLE_LIVE_METRICS_ARG, LOGGER_NAME_ARG, RESOURCE_ARG, SAMPLING_RATIO_ARG, SPAN_PROCESSORS_ARG, ) from azure.monitor.opentelemetry._types import ConfigurationValue +from azure.monitor.opentelemetry.exporter._quickpulse import enable_live_metrics +from azure.monitor.opentelemetry.exporter._quickpulse._processor import ( + _QuickpulseLogRecordProcessor, + _QuickpulseSpanProcessor, +) from azure.monitor.opentelemetry.exporter import ( # pylint: disable=import-error,no-name-in-module ApplicationInsightsSampler, AzureMonitorLogExporter, @@ -90,6 +96,7 @@ def configure_azure_monitor(**kwargs) -> None: # pylint: disable=C4758 disable_tracing = configurations[DISABLE_TRACING_ARG] disable_logging = configurations[DISABLE_LOGGING_ARG] disable_metrics = configurations[DISABLE_METRICS_ARG] + enable_live_metrics = configurations[ENABLE_LIVE_METRICS_ARG] # Setup tracing pipeline if not disable_tracing: @@ -103,6 +110,10 @@ def configure_azure_monitor(**kwargs) -> None: # pylint: disable=C4758 if not disable_metrics: _setup_metrics(configurations) + # Setup live metrics + if enable_live_metrics: + _setup_live_metrics(configurations) + # Setup instrumentations # Instrumentations need to be setup last so to use the global providers # instanstiated in the other setup steps @@ -119,6 +130,9 @@ def _setup_tracing(configurations: Dict[str, ConfigurationValue]): set_tracer_provider(tracer_provider) for span_processor in configurations[SPAN_PROCESSORS_ARG]: # type: ignore get_tracer_provider().add_span_processor(span_processor) # type: ignore + if configurations.get(ENABLE_LIVE_METRICS_ARG): + qsp = _QuickpulseSpanProcessor() + get_tracer_provider().add_span_processor(qsp) # type: ignore trace_exporter = AzureMonitorTraceExporter(**configurations) bsp = BatchSpanProcessor( trace_exporter, @@ -132,6 +146,9 @@ def _setup_logging(configurations: Dict[str, ConfigurationValue]): resource: Resource = configurations[RESOURCE_ARG] # type: ignore logger_provider = LoggerProvider(resource=resource) set_logger_provider(logger_provider) + if configurations.get(ENABLE_LIVE_METRICS_ARG): + qlrp = _QuickpulseLogRecordProcessor() + get_logger_provider().add_log_record_processor(qlrp) # type: ignore log_exporter = AzureMonitorLogExporter(**configurations) log_record_processor = BatchLogRecordProcessor( log_exporter, @@ -153,6 +170,10 @@ def _setup_metrics(configurations: Dict[str, ConfigurationValue]): set_meter_provider(meter_provider) +def _setup_live_metrics(configurations): + enable_live_metrics(**configurations) + + def _setup_instrumentations(configurations: Dict[str, ConfigurationValue]): # use pkg_resources for now until https://github.com/open-telemetry/opentelemetry-python/pull/3168 is merged for entry_point in iter_entry_points( diff --git a/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_constants.py b/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_constants.py index aa0a951cc5e2..7cfc09ec5f7b 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_constants.py +++ b/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_constants.py @@ -11,6 +11,7 @@ # --------------------Configuration------------------------------------------ CONNECTION_STRING_ARG = "connection_string" +ENABLE_LIVE_METRICS_ARG = "enable_live_metrics" DISABLE_AZURE_CORE_TRACING_ARG = "disable_azure_core_tracing" DISABLE_LOGGING_ARG = "disable_logging" DISABLE_METRICS_ARG = "disable_metrics" diff --git a/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_utils/configurations.py b/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_utils/configurations.py index 935c552c31da..becbf79f1a3f 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_utils/configurations.py +++ b/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_utils/configurations.py @@ -31,6 +31,7 @@ DISABLE_METRICS_ARG, DISABLE_TRACING_ARG, DISTRO_VERSION_ARG, + ENABLE_LIVE_METRICS_ARG, INSTRUMENTATION_OPTIONS_ARG, LOGGER_NAME_ARG, RESOURCE_ARG, @@ -68,6 +69,7 @@ def _get_configurations(**kwargs) -> Dict[str, ConfigurationValue]: _default_sampling_ratio(configurations) _default_instrumentation_options(configurations) _default_span_processors(configurations) + _default_enable_live_metrics(configurations) return configurations @@ -151,6 +153,11 @@ def _default_span_processors(configurations): configurations[SPAN_PROCESSORS_ARG] = [] +def _default_enable_live_metrics(configurations): + if ENABLE_LIVE_METRICS_ARG not in configurations: + configurations[ENABLE_LIVE_METRICS_ARG] = False + + def _get_otel_disabled_instrumentations(): disabled_instrumentation = environ.get( OTEL_PYTHON_DISABLED_INSTRUMENTATIONS, "" diff --git a/sdk/monitor/azure-monitor-opentelemetry/samples/metrics/live.py b/sdk/monitor/azure-monitor-opentelemetry/samples/metrics/live.py new file mode 100644 index 000000000000..7fc387792fb7 --- /dev/null +++ b/sdk/monitor/azure-monitor-opentelemetry/samples/metrics/live.py @@ -0,0 +1,37 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. +""" +This example shows how configure live metrics to be enabled. It sets up a minimal example of sending dependency, +trace and exception telemetry to demonstrate the capabilities and collection set of live metrics. +""" +import logging +import requests +import time + +from azure.monitor.opentelemetry import configure_azure_monitor +from opentelemetry import trace + +from opentelemetry.sdk.resources import Resource + +configure_azure_monitor( + resource=Resource.create({ + "service.name": "live_metrics_service", + "service.instance.id": "qp_instance_id", + }), + logger_name=__name__, + enable_live_metrics=True, # Enable live metrics configuration +) + +tracer = trace.get_tracer(__name__) +logger = logging.getLogger(__name__) + +while True: + with tracer.start_as_current_span("parent"): + logger.warning("sending request") + response = requests.get("https://azure.microsoft.com/", timeout=5) + try: + val = 1 / 0 + print(val) + except ZeroDivisionError: + logger.error("Error: Division by zero", stack_info=True, exc_info=True) + time.sleep(2) diff --git a/sdk/monitor/azure-monitor-opentelemetry/tests/test_configure.py b/sdk/monitor/azure-monitor-opentelemetry/tests/test_configure.py index 48e95cbce233..7a2020cd7ff2 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/tests/test_configure.py +++ b/sdk/monitor/azure-monitor-opentelemetry/tests/test_configure.py @@ -20,6 +20,7 @@ from azure.monitor.opentelemetry._configure import ( _send_attach_warning, _setup_instrumentations, + _setup_live_metrics, _setup_logging, _setup_metrics, _setup_tracing, @@ -38,6 +39,9 @@ class TestConfigure(unittest.TestCase): @patch( "azure.monitor.opentelemetry._configure._setup_instrumentations", ) + @patch( + "azure.monitor.opentelemetry._configure._setup_live_metrics", + ) @patch( "azure.monitor.opentelemetry._configure._setup_metrics", ) @@ -52,6 +56,7 @@ def test_configure_azure_monitor( tracing_mock, logging_mock, metrics_mock, + live_metrics_mock, instrumentation_mock, detect_attach_mock, ): @@ -62,12 +67,16 @@ def test_configure_azure_monitor( tracing_mock.assert_called_once() logging_mock.assert_called_once() metrics_mock.assert_called_once() + live_metrics_mock.assert_not_called() instrumentation_mock.assert_called_once() detect_attach_mock.assert_called_once() @patch( "azure.monitor.opentelemetry._configure._setup_instrumentations", ) + @patch( + "azure.monitor.opentelemetry._configure._setup_live_metrics", + ) @patch( "azure.monitor.opentelemetry._configure._setup_metrics", ) @@ -86,6 +95,7 @@ def test_configure_azure_monitor_disable_tracing( tracing_mock, logging_mock, metrics_mock, + live_metrics_mock, instrumentation_mock, ): configurations = { @@ -104,6 +114,7 @@ def test_configure_azure_monitor_disable_tracing( "enabled": False }, }, + "enable_live_metrics": False, "resource": TEST_RESOURCE, } config_mock.return_value = configurations @@ -111,11 +122,15 @@ def test_configure_azure_monitor_disable_tracing( tracing_mock.assert_not_called() logging_mock.assert_called_once_with(configurations) metrics_mock.assert_called_once_with(configurations) + live_metrics_mock.assert_not_called() instrumentation_mock.assert_called_once_with(configurations) @patch( "azure.monitor.opentelemetry._configure._setup_instrumentations", ) + @patch( + "azure.monitor.opentelemetry._configure._setup_live_metrics", + ) @patch( "azure.monitor.opentelemetry._configure._setup_metrics", ) @@ -134,6 +149,7 @@ def test_configure_azure_monitor_disable_logging( tracing_mock, logging_mock, metrics_mock, + live_metrics_mock, instrumentation_mock, ): configurations = { @@ -141,6 +157,7 @@ def test_configure_azure_monitor_disable_logging( "disable_tracing": False, "disable_logging": True, "disable_metrics": False, + "enable_live_metrics": False, "resource": TEST_RESOURCE, } config_mock.return_value = configurations @@ -148,11 +165,15 @@ def test_configure_azure_monitor_disable_logging( tracing_mock.assert_called_once_with(configurations) logging_mock.assert_not_called() metrics_mock.assert_called_once_with(configurations) + live_metrics_mock.assert_not_called() instrumentation_mock.assert_called_once_with(configurations) @patch( "azure.monitor.opentelemetry._configure._setup_instrumentations", ) + @patch( + "azure.monitor.opentelemetry._configure._setup_live_metrics", + ) @patch( "azure.monitor.opentelemetry._configure._setup_metrics", ) @@ -171,6 +192,7 @@ def test_configure_azure_monitor_disable_metrics( tracing_mock, logging_mock, metrics_mock, + live_metrics_mock, instrumentation_mock, ): configurations = { @@ -178,6 +200,7 @@ def test_configure_azure_monitor_disable_metrics( "disable_tracing": False, "disable_logging": False, "disable_metrics": True, + "enable_live_metrics": False, "resource": TEST_RESOURCE, } config_mock.return_value = configurations @@ -185,6 +208,50 @@ def test_configure_azure_monitor_disable_metrics( tracing_mock.assert_called_once_with(configurations) logging_mock.assert_called_once_with(configurations) metrics_mock.assert_not_called() + live_metrics_mock.assert_not_called() + instrumentation_mock.assert_called_once_with(configurations) + + @patch( + "azure.monitor.opentelemetry._configure._setup_instrumentations", + ) + @patch( + "azure.monitor.opentelemetry._configure._setup_live_metrics", + ) + @patch( + "azure.monitor.opentelemetry._configure._setup_metrics", + ) + @patch( + "azure.monitor.opentelemetry._configure._setup_logging", + ) + @patch( + "azure.monitor.opentelemetry._configure._setup_tracing", + ) + @patch( + "azure.monitor.opentelemetry._configure._get_configurations", + ) + def test_configure_azure_monitor_enable_live_metrics( + self, + config_mock, + tracing_mock, + logging_mock, + metrics_mock, + live_metrics_mock, + instrumentation_mock, + ): + configurations = { + "connection_string": "test_cs", + "disable_tracing": False, + "disable_logging": False, + "disable_metrics": False, + "enable_live_metrics": True, + "resource": TEST_RESOURCE, + } + config_mock.return_value = configurations + configure_azure_monitor() + tracing_mock.assert_called_once_with(configurations) + logging_mock.assert_called_once_with(configurations) + metrics_mock.assert_called_once_with(configurations) + live_metrics_mock.assert_called_once_with(configurations) instrumentation_mock.assert_called_once_with(configurations) @patch( @@ -364,6 +431,21 @@ def test_setup_metrics( metric_exporter_mock.assert_called_once_with(**configurations) reader_mock.assert_called_once_with(metric_exp_init_mock) + @patch( + "azure.monitor.opentelemetry._configure.enable_live_metrics", + ) + def test_setup_live_metrics( + self, + enable_live_metrics_mock, + ): + configurations = { + "connection_string": "test_cs", + "resource": TEST_RESOURCE, + } + _setup_live_metrics(configurations) + + enable_live_metrics_mock.assert_called_once_with(**configurations) + @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") diff --git a/sdk/monitor/azure-monitor-opentelemetry/tests/utils/test_configurations.py b/sdk/monitor/azure-monitor-opentelemetry/tests/utils/test_configurations.py index 56bf8922fdc8..dc016243fbbf 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/tests/utils/test_configurations.py +++ b/sdk/monitor/azure-monitor-opentelemetry/tests/utils/test_configurations.py @@ -106,6 +106,7 @@ def test_get_configurations_defaults(self, resource_create_mock): self.assertEqual(configurations["sampling_ratio"], 1.0) self.assertTrue("credential" not in configurations) self.assertTrue("storage_directory" not in configurations) + self.assertEqual(configurations["enable_live_metrics"], False) @patch.dict( "os.environ", From 33d7d22f6ec044b6c1b2a7057e3f3a13edeb1785 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Thu, 9 May 2024 13:19:45 -0700 Subject: [PATCH 02/16] docstring --- sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md | 2 +- .../azure/monitor/opentelemetry/_configure.py | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md b/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md index 15bd0da15e1f..1fcd10bb53ba 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md +++ b/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md @@ -5,7 +5,7 @@ ### Features Added - Enable live metrics feature - ([#35218](https://github.com/Azure/azure-sdk-for-python/pull/35218)) + ([#35566](https://github.com/Azure/azure-sdk-for-python/pull/35566)) ### Breaking Changes 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 05cc7ae64c10..400e935162e9 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py +++ b/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py @@ -84,6 +84,8 @@ def configure_azure_monitor(**kwargs) -> None: # pylint: disable=C4758 Attributes take priority over default attributes and those from Resource Detectors. :keyword list[~opentelemetry.sdk.trace.SpanProcessor] span_processors: List of `SpanProcessor` objects to process every span prior to exporting. Will be run sequentially. + :keyword bool enable_live_metrics: Boolean value to determine whether to enable live metrics feature. + Defaults to `False`. :keyword str storage_directory: Storage directory in which to store retry files. Defaults to `/Microsoft/AzureMonitor/opentelemetry-python-`. :rtype: None From 1fe4034cbf08eb9c0eb34ac1adce0768708e480e Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Thu, 9 May 2024 15:53:34 -0700 Subject: [PATCH 03/16] lint --- .../azure/monitor/opentelemetry/_configure.py | 10 +++++----- 1 file changed, 5 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 400e935162e9..24dddf77062f 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py +++ b/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py @@ -39,7 +39,7 @@ SPAN_PROCESSORS_ARG, ) from azure.monitor.opentelemetry._types import ConfigurationValue -from azure.monitor.opentelemetry.exporter._quickpulse import enable_live_metrics +from azure.monitor.opentelemetry.exporter._quickpulse import enable_live_metrics # pylint: disable=import-error,no-name-in-module from azure.monitor.opentelemetry.exporter._quickpulse._processor import ( _QuickpulseLogRecordProcessor, _QuickpulseSpanProcessor, @@ -98,7 +98,7 @@ def configure_azure_monitor(**kwargs) -> None: # pylint: disable=C4758 disable_tracing = configurations[DISABLE_TRACING_ARG] disable_logging = configurations[DISABLE_LOGGING_ARG] disable_metrics = configurations[DISABLE_METRICS_ARG] - enable_live_metrics = configurations[ENABLE_LIVE_METRICS_ARG] + enable_live_metrics_config = configurations[ENABLE_LIVE_METRICS_ARG] # Setup tracing pipeline if not disable_tracing: @@ -113,7 +113,7 @@ def configure_azure_monitor(**kwargs) -> None: # pylint: disable=C4758 _setup_metrics(configurations) # Setup live metrics - if enable_live_metrics: + if enable_live_metrics_config: _setup_live_metrics(configurations) # Setup instrumentations @@ -149,8 +149,8 @@ def _setup_logging(configurations: Dict[str, ConfigurationValue]): logger_provider = LoggerProvider(resource=resource) set_logger_provider(logger_provider) if configurations.get(ENABLE_LIVE_METRICS_ARG): - qlrp = _QuickpulseLogRecordProcessor() - get_logger_provider().add_log_record_processor(qlrp) # type: ignore + qlp = _QuickpulseLogRecordProcessor() + get_logger_provider().add_log_record_processor(qlp) # type: ignore log_exporter = AzureMonitorLogExporter(**configurations) log_record_processor = BatchLogRecordProcessor( log_exporter, From 1bc37b7e7562f21f9f219a985bcf0c63347bac3b Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Fri, 10 May 2024 09:51:07 -0700 Subject: [PATCH 04/16] lint --- sdk/monitor/azure-monitor-opentelemetry/README.md | 2 +- .../azure/monitor/opentelemetry/_configure.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry/README.md b/sdk/monitor/azure-monitor-opentelemetry/README.md index aa39683a029a..88faaefb576a 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/README.md +++ b/sdk/monitor/azure-monitor-opentelemetry/README.md @@ -60,7 +60,7 @@ You can use `configure_azure_monitor` to set up instrumentation for your app to | Parameter | Description | Environment Variable | |-------------------|----------------------------------------------------|----------------------| | `connection_string` | The [connection string][connection_string_doc] for your Application Insights resource. The connection string will be automatically populated from the `APPLICATIONINSIGHTS_CONNECTION_STRING` environment variable if not explicitly passed in. | `APPLICATIONINSIGHTS_CONNECTION_STRING` | -| `enable_live_metrics` | Enable [live metrics](application_insights_live_metrics) feature. | `N/A` | +| `enable_live_metrics` | Enable [live metrics][application_insights_live_metrics] feature. | `N/A` | | `logger_name` | The name of the [Python logger][python_logger] under which telemetry is collected. | `N/A` | | `instrumentation_options` | A nested dictionary that determines which instrumentations to enable or disable. Instrumentations are referred to by their [Library Names](#officially-supported-instrumentations). For example, `{"azure_sdk": {"enabled": False}, "flask": {"enabled": False}, "django": {"enabled": True}}` will disable Azure Core Tracing and the Flask instrumentation but leave Django and the other default instrumentations enabled. The `OTEL_PYTHON_DISABLED_INSTRUMENTATIONS` environment variable explained below can also be used to disable instrumentations. | `N/A` | | `resource` | Specifies the OpenTelemetry [Resource][ot_spec_resource] associated with your application. Passed in [Resource Attributes][ot_spec_resource_attributes] take priority over default attributes and those from [Resource Detectors][ot_python_resource_detectors]. | [OTEL_SERVICE_NAME][ot_spec_service_name], [OTEL_RESOURCE_ATTRIBUTES][ot_spec_resource_attributes], [OTEL_EXPERIMENTAL_RESOURCE_DETECTORS][ot_python_resource_detectors] | 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 24dddf77062f..cb4de79ab1b4 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py +++ b/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py @@ -40,7 +40,7 @@ ) from azure.monitor.opentelemetry._types import ConfigurationValue from azure.monitor.opentelemetry.exporter._quickpulse import enable_live_metrics # pylint: disable=import-error,no-name-in-module -from azure.monitor.opentelemetry.exporter._quickpulse._processor import ( +from azure.monitor.opentelemetry.exporter._quickpulse._processor import ( # pylint: disable=import-error,no-name-in-module _QuickpulseLogRecordProcessor, _QuickpulseSpanProcessor, ) From f3d8f103174f40c64be11532982a90e10d43d5a4 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Mon, 13 May 2024 09:55:43 -0700 Subject: [PATCH 05/16] Update _configure.py --- .../azure/monitor/opentelemetry/_configure.py | 1 + 1 file changed, 1 insertion(+) 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 cb4de79ab1b4..da317c38e1ad 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py +++ b/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py @@ -63,6 +63,7 @@ _logger = getLogger(__name__) + def configure_azure_monitor(**kwargs) -> None: # pylint: disable=C4758 """This function works as a configuration layer that allows the end user to configure OpenTelemetry and Azure monitor components. The From 8367b8a46d87da43abf97256536ceecab0999771 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Mon, 13 May 2024 09:55:49 -0700 Subject: [PATCH 06/16] Update _configure.py --- .../azure/monitor/opentelemetry/_configure.py | 1 - 1 file changed, 1 deletion(-) 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 da317c38e1ad..cb4de79ab1b4 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py +++ b/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py @@ -63,7 +63,6 @@ _logger = getLogger(__name__) - def configure_azure_monitor(**kwargs) -> None: # pylint: disable=C4758 """This function works as a configuration layer that allows the end user to configure OpenTelemetry and Azure monitor components. The From 0af230235e0fa8bacfcbbeddad2b8553a2a1e9d3 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Mon, 13 May 2024 11:05:23 -0700 Subject: [PATCH 07/16] default --- .../azure/monitor/opentelemetry/_utils/configurations.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_utils/configurations.py b/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_utils/configurations.py index becbf79f1a3f..936f20543edf 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_utils/configurations.py +++ b/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_utils/configurations.py @@ -99,8 +99,7 @@ def _default_disable_tracing(configurations): def _default_logger_name(configurations): - if LOGGER_NAME_ARG not in configurations: - configurations[LOGGER_NAME_ARG] = "" + configurations.setdefault(LOGGER_NAME_ARG, "") def _default_resource(configurations): @@ -149,13 +148,11 @@ def _default_instrumentation_options(configurations): def _default_span_processors(configurations): - if SPAN_PROCESSORS_ARG not in configurations: - configurations[SPAN_PROCESSORS_ARG] = [] + configurations.setdefault(SPAN_PROCESSORS_ARG, []) def _default_enable_live_metrics(configurations): - if ENABLE_LIVE_METRICS_ARG not in configurations: - configurations[ENABLE_LIVE_METRICS_ARG] = False + configurations.setdefault(ENABLE_LIVE_METRICS_ARG, False) def _get_otel_disabled_instrumentations(): From 0de60a9590b80ee559b95e8b178cc4bdfd9376af Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Mon, 13 May 2024 14:50:41 -0700 Subject: [PATCH 08/16] Update _configure.py --- .../azure/monitor/opentelemetry/_configure.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 cb4de79ab1b4..2362d944ca35 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py +++ b/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py @@ -134,7 +134,7 @@ def _setup_tracing(configurations: Dict[str, ConfigurationValue]): get_tracer_provider().add_span_processor(span_processor) # type: ignore if configurations.get(ENABLE_LIVE_METRICS_ARG): qsp = _QuickpulseSpanProcessor() - get_tracer_provider().add_span_processor(qsp) # type: ignore + get_tracer_provider().add_span_processor(qsp) trace_exporter = AzureMonitorTraceExporter(**configurations) bsp = BatchSpanProcessor( trace_exporter, From a07de6cf37278ff0bcfa4968f9c6911cd308f120 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Mon, 13 May 2024 22:51:24 -0700 Subject: [PATCH 09/16] typing --- .../azure/monitor/opentelemetry/_configure.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 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 2362d944ca35..4db6b643b938 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py +++ b/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py @@ -129,17 +129,17 @@ def _setup_tracing(configurations: Dict[str, ConfigurationValue]): sampler=ApplicationInsightsSampler(sampling_ratio=cast(float, sampling_ratio)), resource=resource ) - set_tracer_provider(tracer_provider) for span_processor in configurations[SPAN_PROCESSORS_ARG]: # type: ignore - get_tracer_provider().add_span_processor(span_processor) # type: ignore + tracer_provider.add_span_processor(span_processor) if configurations.get(ENABLE_LIVE_METRICS_ARG): qsp = _QuickpulseSpanProcessor() - get_tracer_provider().add_span_processor(qsp) + tracer_provider.add_span_processor(qsp) trace_exporter = AzureMonitorTraceExporter(**configurations) bsp = BatchSpanProcessor( trace_exporter, ) - get_tracer_provider().add_span_processor(bsp) # type: ignore + tracer_provider.add_span_processor(bsp) + set_tracer_provider(tracer_provider) if _is_instrumentation_enabled(configurations, _AZURE_SDK_INSTRUMENTATION_NAME): settings.tracing_implementation = OpenTelemetrySpan @@ -147,16 +147,16 @@ def _setup_tracing(configurations: Dict[str, ConfigurationValue]): def _setup_logging(configurations: Dict[str, ConfigurationValue]): resource: Resource = configurations[RESOURCE_ARG] # type: ignore logger_provider = LoggerProvider(resource=resource) - set_logger_provider(logger_provider) if configurations.get(ENABLE_LIVE_METRICS_ARG): qlp = _QuickpulseLogRecordProcessor() - get_logger_provider().add_log_record_processor(qlp) # type: ignore + logger_provider.add_log_record_processor(qlp) log_exporter = AzureMonitorLogExporter(**configurations) log_record_processor = BatchLogRecordProcessor( log_exporter, ) - get_logger_provider().add_log_record_processor(log_record_processor) # type: ignore - handler = LoggingHandler(logger_provider=get_logger_provider()) + logger_provider.add_log_record_processor(log_record_processor) + set_logger_provider(logger_provider) + handler = LoggingHandler(logger_provider=logger_provider) logger_name: str = configurations[LOGGER_NAME_ARG] # type: ignore getLogger(logger_name).addHandler(handler) From 04b1de1110d5fb2c3336058e0541c061de6bc680 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Tue, 14 May 2024 11:01:49 -0700 Subject: [PATCH 10/16] lint --- .../azure/monitor/opentelemetry/_configure.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 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 4db6b643b938..1f827e3a8e98 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py +++ b/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py @@ -6,7 +6,7 @@ from logging import getLogger from typing import Dict, cast -from opentelemetry._logs import get_logger_provider, set_logger_provider +from opentelemetry._logs import set_logger_provider from opentelemetry.instrumentation.dependencies import ( get_dist_dependency_conflicts, ) @@ -19,9 +19,9 @@ from opentelemetry.sdk.metrics import MeterProvider from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader from opentelemetry.sdk.resources import Resource -from opentelemetry.sdk.trace import TracerProvider +from opentelemetry.sdk.trace import SpanProcessor, TracerProvider from opentelemetry.sdk.trace.export import BatchSpanProcessor -from opentelemetry.trace import get_tracer_provider, set_tracer_provider +from opentelemetry.trace import set_tracer_provider from pkg_resources import iter_entry_points # type: ignore from azure.core.settings import settings @@ -130,6 +130,7 @@ def _setup_tracing(configurations: Dict[str, ConfigurationValue]): resource=resource ) for span_processor in configurations[SPAN_PROCESSORS_ARG]: # type: ignore + span_processor: SpanProcessor tracer_provider.add_span_processor(span_processor) if configurations.get(ENABLE_LIVE_METRICS_ARG): qsp = _QuickpulseSpanProcessor() From 6c063029df2ad3759b144cf06050e2d71b6f3e2c Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Tue, 14 May 2024 12:25:39 -0700 Subject: [PATCH 11/16] Update _configure.py --- .../azure/monitor/opentelemetry/_configure.py | 4 ++-- 1 file changed, 2 insertions(+), 2 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 1f827e3a8e98..ecf2817e18ff 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py +++ b/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py @@ -130,8 +130,8 @@ def _setup_tracing(configurations: Dict[str, ConfigurationValue]): resource=resource ) for span_processor in configurations[SPAN_PROCESSORS_ARG]: # type: ignore - span_processor: SpanProcessor - tracer_provider.add_span_processor(span_processor) + sp: SpanProcessor = span_processor + tracer_provider.add_span_processor(sp) if configurations.get(ENABLE_LIVE_METRICS_ARG): qsp = _QuickpulseSpanProcessor() tracer_provider.add_span_processor(qsp) From b2896ce9485c23684bd78ff0b0d05537f124e59a Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Tue, 14 May 2024 14:27:00 -0700 Subject: [PATCH 12/16] lint --- .../azure/monitor/opentelemetry/_configure.py | 3 +-- .../tests/test_configure.py | 12 ------------ 2 files changed, 1 insertion(+), 14 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 ecf2817e18ff..676deff8d761 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py +++ b/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py @@ -130,8 +130,7 @@ def _setup_tracing(configurations: Dict[str, ConfigurationValue]): resource=resource ) for span_processor in configurations[SPAN_PROCESSORS_ARG]: # type: ignore - sp: SpanProcessor = span_processor - tracer_provider.add_span_processor(sp) + tracer_provider.add_span_processor(span_processor) # type: ignore if configurations.get(ENABLE_LIVE_METRICS_ARG): qsp = _QuickpulseSpanProcessor() tracer_provider.add_span_processor(qsp) diff --git a/sdk/monitor/azure-monitor-opentelemetry/tests/test_configure.py b/sdk/monitor/azure-monitor-opentelemetry/tests/test_configure.py index 7a2020cd7ff2..d19d2c03b120 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/tests/test_configure.py +++ b/sdk/monitor/azure-monitor-opentelemetry/tests/test_configure.py @@ -263,9 +263,6 @@ def test_configure_azure_monitor_enable_live_metrics( @patch( "azure.monitor.opentelemetry._configure.AzureMonitorTraceExporter", ) - @patch( - "azure.monitor.opentelemetry._configure.get_tracer_provider", - ) @patch( "azure.monitor.opentelemetry._configure.set_tracer_provider", ) @@ -281,7 +278,6 @@ def test_setup_tracing( sampler_mock, tp_mock, set_tracer_provider_mock, - get_tracer_provider_mock, trace_exporter_mock, bsp_mock, azure_core_mock, @@ -290,7 +286,6 @@ def test_setup_tracing( sampler_mock.return_value = sampler_init_mock tp_init_mock = Mock() tp_mock.return_value = tp_init_mock - get_tracer_provider_mock.return_value = tp_init_mock trace_exp_init_mock = Mock() trace_exporter_mock.return_value = trace_exp_init_mock bsp_init_mock = Mock() @@ -313,7 +308,6 @@ def test_setup_tracing( resource=TEST_RESOURCE ) set_tracer_provider_mock.assert_called_once_with(tp_init_mock) - get_tracer_provider_mock.assert_called() trace_exporter_mock.assert_called_once_with(**configurations) bsp_mock.assert_called_once_with(trace_exp_init_mock) self.assertEqual(tp_init_mock.add_span_processor.call_count, 2) @@ -334,9 +328,6 @@ def test_setup_tracing( @patch( "azure.monitor.opentelemetry._configure.AzureMonitorLogExporter", ) - @patch( - "azure.monitor.opentelemetry._configure.get_logger_provider", - ) @patch( "azure.monitor.opentelemetry._configure.set_logger_provider", ) @@ -348,7 +339,6 @@ def test_setup_logging( self, lp_mock, set_logger_provider_mock, - get_logger_provider_mock, log_exporter_mock, blrp_mock, logging_handler_mock, @@ -356,7 +346,6 @@ def test_setup_logging( ): lp_init_mock = Mock() lp_mock.return_value = lp_init_mock - get_logger_provider_mock.return_value = lp_init_mock log_exp_init_mock = Mock() log_exporter_mock.return_value = log_exp_init_mock blrp_init_mock = Mock() @@ -375,7 +364,6 @@ def test_setup_logging( lp_mock.assert_called_once_with(resource=TEST_RESOURCE) set_logger_provider_mock.assert_called_once_with(lp_init_mock) - get_logger_provider_mock.assert_called() log_exporter_mock.assert_called_once_with(**configurations) blrp_mock.assert_called_once_with( log_exp_init_mock, From 0392bc1fa3c184738bb48eb54b8f193628c12c76 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Tue, 14 May 2024 15:24:25 -0700 Subject: [PATCH 13/16] Update _configure.py --- .../azure/monitor/opentelemetry/_configure.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 676deff8d761..d5b6c4a1722f 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py +++ b/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py @@ -19,7 +19,7 @@ from opentelemetry.sdk.metrics import MeterProvider from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader from opentelemetry.sdk.resources import Resource -from opentelemetry.sdk.trace import SpanProcessor, TracerProvider +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 2480421e63e42b933f336ca63ee028236b6b312c Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Wed, 22 May 2024 10:16:24 -0700 Subject: [PATCH 14/16] Update CHANGELOG.md --- sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md b/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md index a8b99acc714b..2cb7d47de936 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md +++ b/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md @@ -4,6 +4,9 @@ ### Features Added +- Enable live metrics feature + ([#35566](https://github.com/Azure/azure-sdk-for-python/pull/35566)) + ### Breaking Changes ### Bugs Fixed @@ -14,8 +17,6 @@ ### Features Added -- Enable live metrics feature - ([#35566](https://github.com/Azure/azure-sdk-for-python/pull/35566)) - Add diagnostics for sdk detection and backoff ([#35610](https://github.com/Azure/azure-sdk-for-python/pull/35610)) From 58c0bff05766dc702c28b35bf9a0709890035623 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Wed, 22 May 2024 14:27:18 -0700 Subject: [PATCH 15/16] default --- sdk/monitor/azure-monitor-opentelemetry/README.md | 2 +- sdk/monitor/azure-monitor-opentelemetry/samples/README.md | 2 ++ .../samples/metrics/{live.py => live_metrics.py} | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) rename sdk/monitor/azure-monitor-opentelemetry/samples/metrics/{live.py => live_metrics.py} (97%) diff --git a/sdk/monitor/azure-monitor-opentelemetry/README.md b/sdk/monitor/azure-monitor-opentelemetry/README.md index 88faaefb576a..2ca9cb6ecff2 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/README.md +++ b/sdk/monitor/azure-monitor-opentelemetry/README.md @@ -60,7 +60,7 @@ You can use `configure_azure_monitor` to set up instrumentation for your app to | Parameter | Description | Environment Variable | |-------------------|----------------------------------------------------|----------------------| | `connection_string` | The [connection string][connection_string_doc] for your Application Insights resource. The connection string will be automatically populated from the `APPLICATIONINSIGHTS_CONNECTION_STRING` environment variable if not explicitly passed in. | `APPLICATIONINSIGHTS_CONNECTION_STRING` | -| `enable_live_metrics` | Enable [live metrics][application_insights_live_metrics] feature. | `N/A` | +| `enable_live_metrics` | Enable [live metrics][application_insights_live_metrics] feature. Defaults to `False`. | `N/A` | | `logger_name` | The name of the [Python logger][python_logger] under which telemetry is collected. | `N/A` | | `instrumentation_options` | A nested dictionary that determines which instrumentations to enable or disable. Instrumentations are referred to by their [Library Names](#officially-supported-instrumentations). For example, `{"azure_sdk": {"enabled": False}, "flask": {"enabled": False}, "django": {"enabled": True}}` will disable Azure Core Tracing and the Flask instrumentation but leave Django and the other default instrumentations enabled. The `OTEL_PYTHON_DISABLED_INSTRUMENTATIONS` environment variable explained below can also be used to disable instrumentations. | `N/A` | | `resource` | Specifies the OpenTelemetry [Resource][ot_spec_resource] associated with your application. Passed in [Resource Attributes][ot_spec_resource_attributes] take priority over default attributes and those from [Resource Detectors][ot_python_resource_detectors]. | [OTEL_SERVICE_NAME][ot_spec_service_name], [OTEL_RESOURCE_ATTRIBUTES][ot_spec_resource_attributes], [OTEL_EXPERIMENTAL_RESOURCE_DETECTORS][ot_python_resource_detectors] | diff --git a/sdk/monitor/azure-monitor-opentelemetry/samples/README.md b/sdk/monitor/azure-monitor-opentelemetry/samples/README.md index 36aba02af5ff..c04eb3b8a9d1 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/samples/README.md +++ b/sdk/monitor/azure-monitor-opentelemetry/samples/README.md @@ -24,6 +24,7 @@ For guidance on the samples README, visit the [sample guide](https://github.com/ |[logging/basic.py][logging_basic] | Produce logs | |[metrics/attributes.py][attributes] | Add attributes to custom metrics counters | |[metrics/instruments.py][instruments] | Create observable instruments | +|[metrics/live_metrics.py][live_metrics] | Live metrics feature | |[tracing/django/sample/manage.py][django] | Instrument a django app | |[tracing/db_psycopg2.py][db_psycopg2] | Instrument the PsycoPG2 library | |[tracing/http_fastapi.py][http_fastapi] | Instrument a FastAPI app | @@ -68,6 +69,7 @@ To learn more, see the [Azure Monitor OpenTelemetry Distro documentation][distro [logging_basic]: https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/monitor/azure-monitor-opentelemetry/samples/logging/basic.py [attributes]: https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/monitor/azure-monitor-opentelemetry/samples/metrics/attributes.py [instruments]: https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/monitor/azure-monitor-opentelemetry/samples/metrics/instruments.py +[instruments]: https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/monitor/azure-monitor-opentelemetry/samples/metrics/live_metrics.py [django]: https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/monitor/azure-monitor-opentelemetry/samples/tracing/django/sample/manage.py [db_psycopg2]: https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/monitor/azure-monitor-opentelemetry/samples/tracing/db_psycopg2.py [http_fastapi]: https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/monitor/azure-monitor-opentelemetry/samples/tracing/http_fastapi.py diff --git a/sdk/monitor/azure-monitor-opentelemetry/samples/metrics/live.py b/sdk/monitor/azure-monitor-opentelemetry/samples/metrics/live_metrics.py similarity index 97% rename from sdk/monitor/azure-monitor-opentelemetry/samples/metrics/live.py rename to sdk/monitor/azure-monitor-opentelemetry/samples/metrics/live_metrics.py index 7fc387792fb7..0edf7db69fdf 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/samples/metrics/live.py +++ b/sdk/monitor/azure-monitor-opentelemetry/samples/metrics/live_metrics.py @@ -25,6 +25,7 @@ tracer = trace.get_tracer(__name__) logger = logging.getLogger(__name__) +# Contiuously send metrics while True: with tracer.start_as_current_span("parent"): logger.warning("sending request") From df3088f8cff9829e2ee1b956628465f0488df794 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Wed, 22 May 2024 15:34:48 -0700 Subject: [PATCH 16/16] spell --- .../azure-monitor-opentelemetry/samples/metrics/live_metrics.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry/samples/metrics/live_metrics.py b/sdk/monitor/azure-monitor-opentelemetry/samples/metrics/live_metrics.py index 0edf7db69fdf..6e70d0e413aa 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/samples/metrics/live_metrics.py +++ b/sdk/monitor/azure-monitor-opentelemetry/samples/metrics/live_metrics.py @@ -25,7 +25,7 @@ tracer = trace.get_tracer(__name__) logger = logging.getLogger(__name__) -# Contiuously send metrics +# Continuously send metrics while True: with tracer.start_as_current_span("parent"): logger.warning("sending request")