From 3c565d12b1ae5d73eed461a43ffde24cb8d5386d Mon Sep 17 00:00:00 2001 From: jerevoss Date: Fri, 26 May 2023 16:24:57 -0700 Subject: [PATCH 1/8] Extra exporters works --- .../azure/monitor/opentelemetry/_configure.py | 45 +++++++++++++++++-- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py index 47873cbc..ff540c3b 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py @@ -5,6 +5,7 @@ # -------------------------------------------------------------------------- from logging import getLogger from typing import Dict +from os import environ, getenv from azure.monitor.opentelemetry._constants import ( DISABLE_LOGGING_ARG, @@ -22,11 +23,17 @@ ) from azure.monitor.opentelemetry.util.configurations import _get_configurations from opentelemetry._logs import get_logger_provider, set_logger_provider +from opentelemetry.environment_variables import ( + OTEL_LOGS_EXPORTER, + OTEL_METRICS_EXPORTER, + OTEL_TRACES_EXPORTER, +) from opentelemetry.instrumentation.dependencies import ( get_dist_dependency_conflicts, ) from opentelemetry.instrumentation.instrumentor import BaseInstrumentor from opentelemetry.metrics import set_meter_provider +from opentelemetry.sdk._configuration import _get_exporter_names, _import_config_components from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler from opentelemetry.sdk._logs.export import BatchLogRecordProcessor from opentelemetry.sdk.metrics import MeterProvider @@ -97,6 +104,11 @@ def _setup_tracing(configurations: Dict[str, ConfigurationValue]): trace_exporter, ) get_tracer_provider().add_span_processor(span_processor) + for traces_exporter in _get_extra_exporters("opentelemetry_traces_exporter", OTEL_TRACES_EXPORTER): + span_processor = BatchSpanProcessor( + traces_exporter + ) + get_tracer_provider().add_span_processor(span_processor) def _setup_logging(configurations: Dict[str, ConfigurationValue]): @@ -110,15 +122,29 @@ def _setup_logging(configurations: Dict[str, ConfigurationValue]): schedule_delay_millis=logging_export_interval_ms, ) get_logger_provider().add_log_record_processor(log_record_processor) + for logs_exporter in _get_extra_exporters("opentelemetry_logs_exporter", OTEL_LOGS_EXPORTER): + log_record_processor = BatchLogRecordProcessor( + logs_exporter + ) + get_logger_provider().add_log_record_processor(log_record_processor) handler = LoggingHandler(logger_provider=get_logger_provider()) getLogger().addHandler(handler) def _setup_metrics(configurations: Dict[str, ConfigurationValue]): - metric_exporter = AzureMonitorMetricExporter(**configurations) - reader = PeriodicExportingMetricReader(metric_exporter) + metric_readers = [ + PeriodicExportingMetricReader( + AzureMonitorMetricExporter(**configurations) + ) + ] + for metrics_exporter in _get_extra_exporters("opentelemetry_metrics_exporter", OTEL_METRICS_EXPORTER): + metric_readers.append( + PeriodicExportingMetricReader( + metrics_exporter + ) + ) meter_provider = MeterProvider( - metric_readers=[reader], + metric_readers=metric_readers, ) set_meter_provider(meter_provider) @@ -149,3 +175,16 @@ def _setup_instrumentations(): lib_name, exc_info=ex, ) + + +def _get_extra_exporters(entry_point_group, env_var): + exporter_entry_points = iter_entry_points(entry_point_group) + selected_exporter_names_env_var = getenv(env_var, "").lower().strip() + selected_exporter_names = selected_exporter_names_env_var.split(',') + exporters = [] + for ep in exporter_entry_points: + if ep.name == "azure_monitor_opentelemetry_exporter": + continue + if ep.name in selected_exporter_names: + exporters.append(ep.load()()) + return exporters From bbbdcc12c5b6ffd5b9ef2586aed0807ac6e7490c Mon Sep 17 00:00:00 2001 From: jerevoss Date: Tue, 30 May 2023 15:17:21 -0700 Subject: [PATCH 2/8] tests and docs --- CHANGELOG.md | 2 + azure-monitor-opentelemetry/README.md | 6 +-- .../tests/configuration/test_configure.py | 42 +++++++++++++++++++ 3 files changed, 47 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 13ffca69..5efc43a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +- Enable custom exporters + ([#XXX](https://github.com/microsoft/ApplicationInsights-Python/pull/XXX)) - Update samples ([#281](https://github.com/microsoft/ApplicationInsights-Python/pull/281)) diff --git a/azure-monitor-opentelemetry/README.md b/azure-monitor-opentelemetry/README.md index d82a850e..9b72cb1e 100644 --- a/azure-monitor-opentelemetry/README.md +++ b/azure-monitor-opentelemetry/README.md @@ -61,9 +61,9 @@ You can configure further with [OpenTelemetry environment variables][ot_env_vars | Environment Variable | Description | |-------------|----------------------| | [OTEL_SERVICE_NAME][opentelemetry_spec_service_name], [OTEL_RESOURCE_ATTRIBUTES][opentelemetry_spec_resource_attributes] | Specifies the OpenTelemetry [resource][opentelemetry_spec_resource] associated with your application. | -| `OTEL_LOGS_EXPORTER` | If set to `None`, disables collection and export of logging telemetry. | -| `OTEL_METRICS_EXPORTER` | If set to `None`, disables collection and export of metric telemetry. | -| `OTEL_TRACES_EXPORTER` | If set to `None`, disables collection and export of distributed tracing telemetry. | +| `OTEL_LOGS_EXPORTER` | Specifies additional logs exporters by a comma separated list of entry point names. For example, to enable the ConsoleLogExporter in addition to the Azure Monitor OpenTelemetry Exporter, set `OTEL_LOGS_EXPORTER=console`. If set to `None`, disables collection and export of logging telemetry. | +| `OTEL_METRICS_EXPORTER` | Specifies additional metrics exporters by a comma separated list of entry point names. For example, to enable the ConsoleMetricExporter in addition to the Azure Monitor OpenTelemetry Exporter, set `OTEL_METRICS_EXPORTER=console`. If set to `None`, disables collection and export of metric telemetry. | +| `OTEL_TRACES_EXPORTER` | Specifies additional traces exporters by a comma separated list of entry point names. For example, to enable the ConsoleSpanExporter in addition to the Azure Monitor OpenTelemetry Exporter, set `OTEL_TRACES_EXPORTER=console`. If set to `None`, disables collection and export of distributed tracing telemetry. | | `OTEL_BLRP_SCHEDULE_DELAY` | Specifies the logging export interval in milliseconds. Defaults to 5000. | | `OTEL_BSP_SCHEDULE_DELAY` | Specifies the distributed tracing export interval in milliseconds. Defaults to 5000. | | `OTEL_TRACES_SAMPLER_ARG` | Specifies the ratio of distributed tracing telemetry to be [sampled][application_insights_sampling]. Accepted values are in the range [0,1]. Defaults to 1.0, meaning no telemetry is sampled out. | diff --git a/azure-monitor-opentelemetry/tests/configuration/test_configure.py b/azure-monitor-opentelemetry/tests/configuration/test_configure.py index a313e634..559355e1 100644 --- a/azure-monitor-opentelemetry/tests/configuration/test_configure.py +++ b/azure-monitor-opentelemetry/tests/configuration/test_configure.py @@ -22,6 +22,7 @@ _setup_metrics, _setup_tracing, configure_azure_monitor, + _get_extra_exporters, ) @@ -162,6 +163,9 @@ def test_configure_azure_monitor_disable_metrics( metrics_mock.assert_not_called() instrumentation_mock.assert_called_once_with() + @patch( + "azure.monitor.opentelemetry._configure._get_extra_exporters", + ) @patch( "azure.monitor.opentelemetry._configure.BatchSpanProcessor", ) @@ -189,6 +193,7 @@ def test_setup_tracing( get_tracer_provider_mock, trace_exporter_mock, bsp_mock, + extra_exporters_mock, ): sampler_init_mock = Mock() sampler_mock.return_value = sampler_init_mock @@ -199,6 +204,7 @@ def test_setup_tracing( trace_exporter_mock.return_value = trace_exp_init_mock bsp_init_mock = Mock() bsp_mock.return_value = bsp_init_mock + extra_exporters_mock.return_value = [] configurations = { "connection_string": "test_cs", @@ -215,6 +221,9 @@ def test_setup_tracing( bsp_mock.assert_called_once_with(trace_exp_init_mock) tp_init_mock.add_span_processor.assert_called_once_with(bsp_init_mock) + @patch( + "azure.monitor.opentelemetry._configure._get_extra_exporters", + ) @patch( "azure.monitor.opentelemetry._configure.getLogger", ) @@ -246,6 +255,7 @@ def test_setup_logging( blrp_mock, logging_handler_mock, get_logger_mock, + extra_exporters_mock, ): lp_init_mock = Mock() lp_mock.return_value = lp_init_mock @@ -258,6 +268,7 @@ def test_setup_logging( logging_handler_mock.return_value = logging_handler_init_mock logger_mock = Mock() get_logger_mock.return_value = logger_mock + extra_exporters_mock.return_value = [] configurations = { "connection_string": "test_cs", @@ -283,6 +294,9 @@ def test_setup_logging( logging_handler_init_mock ) + @patch( + "azure.monitor.opentelemetry._configure._get_extra_exporters", + ) @patch( "azure.monitor.opentelemetry._configure.PeriodicExportingMetricReader", ) @@ -302,6 +316,7 @@ def test_setup_metrics( set_meter_provider_mock, metric_exporter_mock, reader_mock, + extra_exporters_mock, ): mp_init_mock = Mock() mp_mock.return_value = mp_init_mock @@ -309,6 +324,7 @@ def test_setup_metrics( metric_exporter_mock.return_value = metric_exp_init_mock reader_init_mock = Mock() reader_mock.return_value = reader_init_mock + extra_exporters_mock.return_value = [] configurations = { "connection_string": "test_cs", @@ -395,3 +411,29 @@ def test_setup_instrumentations_exception( ep_mock.load.assert_called_once() instrumentor_mock.instrument.assert_not_called() logger_mock.warning.assert_called_once() + + @patch.dict("os.environ", { + "EXPORTER_ENV_VAR": "custom_exporter1,azure_monitor_opentelemetry_exporter,custom_exporter2" + }) + @patch("azure.monitor.opentelemetry._configure.iter_entry_points") + def test_extra_exporters(self, iter_mock): + + ep_mock1 = Mock() + ep_mock1.name = "custom_exporter1" + exp_mock1 = Mock() + ep_mock1.load.return_value = exp_mock1 + + ep_mock_azmon = Mock() + ep_mock_azmon.name = "azure_monitor_opentelemetry_exporter" + exp_mock_azmon = Mock() + ep_mock_azmon.load.return_value = exp_mock_azmon + + ep_mock2 = Mock() + ep_mock2.name = "custom_exporter2" + exp_mock2 = Mock() + ep_mock2.load.return_value = exp_mock2 + + iter_mock.return_value = (ep_mock_azmon, ep_mock2, ep_mock1) + + exporter_entry_point_group = "exporter_entry_point_group" + self.assertEquals(_get_extra_exporters(exporter_entry_point_group, "EXPORTER_ENV_VAR"), [exp_mock2(), exp_mock1()]) From 741de62e8313a5edf54958f7318e8a1b14928fd3 Mon Sep 17 00:00:00 2001 From: jerevoss Date: Tue, 30 May 2023 15:22:38 -0700 Subject: [PATCH 3/8] lint --- .../azure/monitor/opentelemetry/_configure.py | 35 ++++++++++--------- .../tests/configuration/test_configure.py | 22 ++++++++---- 2 files changed, 33 insertions(+), 24 deletions(-) diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py index ff540c3b..288212f0 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py @@ -33,7 +33,10 @@ ) from opentelemetry.instrumentation.instrumentor import BaseInstrumentor from opentelemetry.metrics import set_meter_provider -from opentelemetry.sdk._configuration import _get_exporter_names, _import_config_components +from opentelemetry.sdk._configuration import ( + _get_exporter_names, + _import_config_components, +) from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler from opentelemetry.sdk._logs.export import BatchLogRecordProcessor from opentelemetry.sdk.metrics import MeterProvider @@ -104,10 +107,10 @@ def _setup_tracing(configurations: Dict[str, ConfigurationValue]): trace_exporter, ) get_tracer_provider().add_span_processor(span_processor) - for traces_exporter in _get_extra_exporters("opentelemetry_traces_exporter", OTEL_TRACES_EXPORTER): - span_processor = BatchSpanProcessor( - traces_exporter - ) + for traces_exporter in _get_extra_exporters( + "opentelemetry_traces_exporter", OTEL_TRACES_EXPORTER + ): + span_processor = BatchSpanProcessor(traces_exporter) get_tracer_provider().add_span_processor(span_processor) @@ -122,10 +125,10 @@ def _setup_logging(configurations: Dict[str, ConfigurationValue]): schedule_delay_millis=logging_export_interval_ms, ) get_logger_provider().add_log_record_processor(log_record_processor) - for logs_exporter in _get_extra_exporters("opentelemetry_logs_exporter", OTEL_LOGS_EXPORTER): - log_record_processor = BatchLogRecordProcessor( - logs_exporter - ) + for logs_exporter in _get_extra_exporters( + "opentelemetry_logs_exporter", OTEL_LOGS_EXPORTER + ): + log_record_processor = BatchLogRecordProcessor(logs_exporter) get_logger_provider().add_log_record_processor(log_record_processor) handler = LoggingHandler(logger_provider=get_logger_provider()) getLogger().addHandler(handler) @@ -137,12 +140,10 @@ def _setup_metrics(configurations: Dict[str, ConfigurationValue]): AzureMonitorMetricExporter(**configurations) ) ] - for metrics_exporter in _get_extra_exporters("opentelemetry_metrics_exporter", OTEL_METRICS_EXPORTER): - metric_readers.append( - PeriodicExportingMetricReader( - metrics_exporter - ) - ) + for metrics_exporter in _get_extra_exporters( + "opentelemetry_metrics_exporter", OTEL_METRICS_EXPORTER + ): + metric_readers.append(PeriodicExportingMetricReader(metrics_exporter)) meter_provider = MeterProvider( metric_readers=metric_readers, ) @@ -175,12 +176,12 @@ def _setup_instrumentations(): lib_name, exc_info=ex, ) - + def _get_extra_exporters(entry_point_group, env_var): exporter_entry_points = iter_entry_points(entry_point_group) selected_exporter_names_env_var = getenv(env_var, "").lower().strip() - selected_exporter_names = selected_exporter_names_env_var.split(',') + selected_exporter_names = selected_exporter_names_env_var.split(",") exporters = [] for ep in exporter_entry_points: if ep.name == "azure_monitor_opentelemetry_exporter": diff --git a/azure-monitor-opentelemetry/tests/configuration/test_configure.py b/azure-monitor-opentelemetry/tests/configuration/test_configure.py index 559355e1..fef32f37 100644 --- a/azure-monitor-opentelemetry/tests/configuration/test_configure.py +++ b/azure-monitor-opentelemetry/tests/configuration/test_configure.py @@ -412,9 +412,12 @@ def test_setup_instrumentations_exception( instrumentor_mock.instrument.assert_not_called() logger_mock.warning.assert_called_once() - @patch.dict("os.environ", { - "EXPORTER_ENV_VAR": "custom_exporter1,azure_monitor_opentelemetry_exporter,custom_exporter2" - }) + @patch.dict( + "os.environ", + { + "EXPORTER_ENV_VAR": "custom_exporter1,azure_monitor_opentelemetry_exporter,custom_exporter2" + }, + ) @patch("azure.monitor.opentelemetry._configure.iter_entry_points") def test_extra_exporters(self, iter_mock): @@ -422,18 +425,23 @@ def test_extra_exporters(self, iter_mock): ep_mock1.name = "custom_exporter1" exp_mock1 = Mock() ep_mock1.load.return_value = exp_mock1 - + ep_mock_azmon = Mock() ep_mock_azmon.name = "azure_monitor_opentelemetry_exporter" exp_mock_azmon = Mock() ep_mock_azmon.load.return_value = exp_mock_azmon - + ep_mock2 = Mock() ep_mock2.name = "custom_exporter2" exp_mock2 = Mock() ep_mock2.load.return_value = exp_mock2 - + iter_mock.return_value = (ep_mock_azmon, ep_mock2, ep_mock1) exporter_entry_point_group = "exporter_entry_point_group" - self.assertEquals(_get_extra_exporters(exporter_entry_point_group, "EXPORTER_ENV_VAR"), [exp_mock2(), exp_mock1()]) + self.assertEquals( + _get_extra_exporters( + exporter_entry_point_group, "EXPORTER_ENV_VAR" + ), + [exp_mock2(), exp_mock1()], + ) From 155c687c8383bde84a47750ce9bf4e17ef35470a Mon Sep 17 00:00:00 2001 From: jerevoss Date: Wed, 31 May 2023 14:23:03 -0700 Subject: [PATCH 4/8] Tests pass --- .../azure/monitor/opentelemetry/_configure.py | 5 +- .../samples/metrics/attributes.py | 1 - .../tests/configuration/test_configure.py | 66 ++++++++++++++----- 3 files changed, 53 insertions(+), 19 deletions(-) diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py index 288212f0..084e5452 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py @@ -128,7 +128,10 @@ def _setup_logging(configurations: Dict[str, ConfigurationValue]): for logs_exporter in _get_extra_exporters( "opentelemetry_logs_exporter", OTEL_LOGS_EXPORTER ): - log_record_processor = BatchLogRecordProcessor(logs_exporter) + log_record_processor = BatchLogRecordProcessor( + logs_exporter, + schedule_delay_millis=logging_export_interval_ms, + ) get_logger_provider().add_log_record_processor(log_record_processor) handler = LoggingHandler(logger_provider=get_logger_provider()) getLogger().addHandler(handler) diff --git a/azure-monitor-opentelemetry/samples/metrics/attributes.py b/azure-monitor-opentelemetry/samples/metrics/attributes.py index 5060e721..5c848e07 100644 --- a/azure-monitor-opentelemetry/samples/metrics/attributes.py +++ b/azure-monitor-opentelemetry/samples/metrics/attributes.py @@ -20,7 +20,6 @@ # Counter counter = meter.create_counter("attr1_counter") counter.add(1, attribute_set1) - # Counter2 counter2 = meter.create_counter("attr2_counter") counter2.add(10, attribute_set1) diff --git a/azure-monitor-opentelemetry/tests/configuration/test_configure.py b/azure-monitor-opentelemetry/tests/configuration/test_configure.py index fef32f37..53d82db6 100644 --- a/azure-monitor-opentelemetry/tests/configuration/test_configure.py +++ b/azure-monitor-opentelemetry/tests/configuration/test_configure.py @@ -13,7 +13,7 @@ # limitations under the License. import unittest -from unittest.mock import Mock, patch +from unittest.mock import Mock, patch, call from azure.monitor.opentelemetry._configure import ( _SUPPORTED_INSTRUMENTED_LIBRARIES, @@ -204,7 +204,12 @@ def test_setup_tracing( trace_exporter_mock.return_value = trace_exp_init_mock bsp_init_mock = Mock() bsp_mock.return_value = bsp_init_mock - extra_exporters_mock.return_value = [] + custom_exporter_mock1 = Mock() + custom_exporter_mock2 = Mock() + extra_exporters_mock.return_value = [ + custom_exporter_mock1, + custom_exporter_mock2, + ] configurations = { "connection_string": "test_cs", @@ -218,8 +223,16 @@ def test_setup_tracing( 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) - tp_init_mock.add_span_processor.assert_called_once_with(bsp_init_mock) + bsp_mock.assert_has_calls( + [ + call(trace_exp_init_mock), + call(custom_exporter_mock1), + call(custom_exporter_mock2), + ] + ) + tp_init_mock.add_span_processor.assert_has_calls( + [call(bsp_init_mock), call(bsp_init_mock), call(bsp_init_mock)] + ) @patch( "azure.monitor.opentelemetry._configure._get_extra_exporters", @@ -268,7 +281,12 @@ def test_setup_logging( logging_handler_mock.return_value = logging_handler_init_mock logger_mock = Mock() get_logger_mock.return_value = logger_mock - extra_exporters_mock.return_value = [] + custom_exporter_mock1 = Mock() + custom_exporter_mock2 = Mock() + extra_exporters_mock.return_value = [ + custom_exporter_mock1, + custom_exporter_mock2, + ] configurations = { "connection_string": "test_cs", @@ -280,11 +298,15 @@ def test_setup_logging( 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, schedule_delay_millis=10000 + blrp_mock.assert_has_calls( + [ + call(log_exp_init_mock, schedule_delay_millis=10000), + call(custom_exporter_mock1, schedule_delay_millis=10000), + call(custom_exporter_mock2, schedule_delay_millis=10000), + ] ) - lp_init_mock.add_log_record_processor.assert_called_once_with( - blrp_init_mock + lp_init_mock.add_log_record_processor.assert_has_calls( + [call(blrp_init_mock), call(blrp_init_mock), call(blrp_init_mock)] ) logging_handler_mock.assert_called_once_with( logger_provider=lp_init_mock @@ -324,18 +346,33 @@ def test_setup_metrics( metric_exporter_mock.return_value = metric_exp_init_mock reader_init_mock = Mock() reader_mock.return_value = reader_init_mock - extra_exporters_mock.return_value = [] + custom_exporter_mock1 = Mock() + custom_exporter_mock2 = Mock() + extra_exporters_mock.return_value = [ + custom_exporter_mock1, + custom_exporter_mock2, + ] configurations = { "connection_string": "test_cs", } _setup_metrics(configurations) mp_mock.assert_called_once_with( - metric_readers=[reader_init_mock], + metric_readers=[ + reader_init_mock, + reader_init_mock, + reader_init_mock, + ], ) set_meter_provider_mock.assert_called_once_with(mp_init_mock) metric_exporter_mock.assert_called_once_with(**configurations) - reader_mock.assert_called_once_with(metric_exp_init_mock) + reader_mock.assert_has_calls( + [ + call(metric_exp_init_mock), + call(custom_exporter_mock1), + call(custom_exporter_mock2), + ] + ) @patch( "azure.monitor.opentelemetry._configure.get_dist_dependency_conflicts" @@ -420,24 +457,19 @@ def test_setup_instrumentations_exception( ) @patch("azure.monitor.opentelemetry._configure.iter_entry_points") def test_extra_exporters(self, iter_mock): - ep_mock1 = Mock() ep_mock1.name = "custom_exporter1" exp_mock1 = Mock() ep_mock1.load.return_value = exp_mock1 - ep_mock_azmon = Mock() ep_mock_azmon.name = "azure_monitor_opentelemetry_exporter" exp_mock_azmon = Mock() ep_mock_azmon.load.return_value = exp_mock_azmon - ep_mock2 = Mock() ep_mock2.name = "custom_exporter2" exp_mock2 = Mock() ep_mock2.load.return_value = exp_mock2 - iter_mock.return_value = (ep_mock_azmon, ep_mock2, ep_mock1) - exporter_entry_point_group = "exporter_entry_point_group" self.assertEquals( _get_extra_exporters( From 98d9f98a102536d115a3783c5767db5477bb3e17 Mon Sep 17 00:00:00 2001 From: jerevoss Date: Wed, 31 May 2023 15:22:38 -0700 Subject: [PATCH 5/8] lint --- .../tests/configuration/test_configure.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-monitor-opentelemetry/tests/configuration/test_configure.py b/azure-monitor-opentelemetry/tests/configuration/test_configure.py index 53d82db6..0e08805e 100644 --- a/azure-monitor-opentelemetry/tests/configuration/test_configure.py +++ b/azure-monitor-opentelemetry/tests/configuration/test_configure.py @@ -17,12 +17,12 @@ from azure.monitor.opentelemetry._configure import ( _SUPPORTED_INSTRUMENTED_LIBRARIES, + _get_extra_exporters, _setup_instrumentations, _setup_logging, _setup_metrics, _setup_tracing, configure_azure_monitor, - _get_extra_exporters, ) From cd75f56861fef43ab3b87960558c0af4a1601033 Mon Sep 17 00:00:00 2001 From: jerevoss Date: Wed, 31 May 2023 15:42:47 -0700 Subject: [PATCH 6/8] lint --- .../azure/monitor/opentelemetry/_configure.py | 2 +- .../tests/configuration/test_configure.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py index 084e5452..0ffb798e 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py @@ -4,8 +4,8 @@ # license information. # -------------------------------------------------------------------------- from logging import getLogger -from typing import Dict from os import environ, getenv +from typing import Dict from azure.monitor.opentelemetry._constants import ( DISABLE_LOGGING_ARG, diff --git a/azure-monitor-opentelemetry/tests/configuration/test_configure.py b/azure-monitor-opentelemetry/tests/configuration/test_configure.py index 0e08805e..2cca16da 100644 --- a/azure-monitor-opentelemetry/tests/configuration/test_configure.py +++ b/azure-monitor-opentelemetry/tests/configuration/test_configure.py @@ -13,7 +13,7 @@ # limitations under the License. import unittest -from unittest.mock import Mock, patch, call +from unittest.mock import Mock, call, patch from azure.monitor.opentelemetry._configure import ( _SUPPORTED_INSTRUMENTED_LIBRARIES, From c8edc0cafe8af8e69ee06353cf28156087c95ee0 Mon Sep 17 00:00:00 2001 From: jerevoss Date: Wed, 31 May 2023 15:48:15 -0700 Subject: [PATCH 7/8] lint --- .../azure/monitor/opentelemetry/_configure.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py index 0ffb798e..22a961d4 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py @@ -4,7 +4,7 @@ # license information. # -------------------------------------------------------------------------- from logging import getLogger -from os import environ, getenv +from os import getenv from typing import Dict from azure.monitor.opentelemetry._constants import ( @@ -33,10 +33,6 @@ ) from opentelemetry.instrumentation.instrumentor import BaseInstrumentor from opentelemetry.metrics import set_meter_provider -from opentelemetry.sdk._configuration import ( - _get_exporter_names, - _import_config_components, -) from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler from opentelemetry.sdk._logs.export import BatchLogRecordProcessor from opentelemetry.sdk.metrics import MeterProvider From 4cd07e1b98a35849458b5393a0ca0b4e71eb1d08 Mon Sep 17 00:00:00 2001 From: jerevoss Date: Wed, 31 May 2023 17:26:02 -0700 Subject: [PATCH 8/8] Changelog --- CHANGELOG.md | 2 +- azure-monitor-opentelemetry/samples/metrics/attributes.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5efc43a0..fe88282c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ## Unreleased - Enable custom exporters - ([#XXX](https://github.com/microsoft/ApplicationInsights-Python/pull/XXX)) + ([#288](https://github.com/microsoft/ApplicationInsights-Python/pull/288)) - Update samples ([#281](https://github.com/microsoft/ApplicationInsights-Python/pull/281)) diff --git a/azure-monitor-opentelemetry/samples/metrics/attributes.py b/azure-monitor-opentelemetry/samples/metrics/attributes.py index 5c848e07..5060e721 100644 --- a/azure-monitor-opentelemetry/samples/metrics/attributes.py +++ b/azure-monitor-opentelemetry/samples/metrics/attributes.py @@ -20,6 +20,7 @@ # Counter counter = meter.create_counter("attr1_counter") counter.add(1, attribute_set1) + # Counter2 counter2 = meter.create_counter("attr2_counter") counter2.add(10, attribute_set1)