From 833b1b7681ab1857dab1c05933d8090cad0a846e Mon Sep 17 00:00:00 2001 From: Leighton Date: Tue, 23 Jun 2020 14:19:12 -0700 Subject: [PATCH 1/6] remove --- README.md | 15 +++++++------- azure_monitor/setup.cfg | 1 + .../sdk/auto_collection/__init__.py | 2 +- .../sdk/auto_collection/request_metrics.py | 20 +++++++++++-------- 4 files changed, 21 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 248dece..e9c47a6 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ The online documentation is available at https://opentelemetry-azure-monitor-pyt ### Trace -The **Azure Monitor Trace Exporter** allows you to export [OpenTelemetry](https://opentelemetry.io/) traces to [Azure Monitor](https://docs.microsoft.com/azure/azure-monitor/). +The **Azure Monitor Span Exporter** allows you to export [OpenTelemetry](https://opentelemetry.io/) traces to [Azure Monitor](https://docs.microsoft.com/azure/azure-monitor/). This example shows how to send a span "hello" to Azure Monitor. @@ -33,17 +33,13 @@ from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchExportSpanProcessor trace.set_tracer_provider(TracerProvider()) - -# We tell OpenTelemetry who it is that is creating spans. In this case, we have -# no real name (no setup.py), so we make one up. If we had a version, we would -# also specify it here. tracer = trace.get_tracer(__name__) +# SpanExporter receives the spans and send them to the target location exporter = AzureMonitorSpanExporter( connection_string='InstrumentationKey=', ) -# SpanExporter receives the spans and send them to the target location. span_processor = BatchExportSpanProcessor(exporter) trace.get_tracer_provider().add_span_processor(span_processor) @@ -75,12 +71,14 @@ trace.set_tracer_provider(TracerProvider()) tracer_provider = trace.get_tracer_provider() exporter = AzureMonitorSpanExporter( - connection_string='InstrumentationKey=', - ) + connection_string='InstrumentationKey=', +) span_processor = BatchExportSpanProcessor(exporter) tracer_provider.add_span_processor(span_processor) RequestsInstrumentor().instrument() + +# This request will be traced response = requests.get(url="https://azure.microsoft.com/") ``` @@ -106,6 +104,7 @@ def callback_function(envelope): exporter = AzureMonitorSpanExporter( connection_string='InstrumentationKey=' ) +# This line will modify telemetry exporter.add_telemetry_processor(callback_function) trace.set_tracer_provider(TracerProvider()) diff --git a/azure_monitor/setup.cfg b/azure_monitor/setup.cfg index 35b6b72..3728d63 100644 --- a/azure_monitor/setup.cfg +++ b/azure_monitor/setup.cfg @@ -20,6 +20,7 @@ classifiers = Programming Language :: Python :: 3.5 Programming Language :: Python :: 3.6 Programming Language :: Python :: 3.7 + Programming Language :: Python :: 3.8 [options] python_requires = >=3.4 diff --git a/azure_monitor/src/azure_monitor/sdk/auto_collection/__init__.py b/azure_monitor/src/azure_monitor/sdk/auto_collection/__init__.py index 4c33a14..9811358 100644 --- a/azure_monitor/src/azure_monitor/sdk/auto_collection/__init__.py +++ b/azure_monitor/src/azure_monitor/sdk/auto_collection/__init__.py @@ -44,4 +44,4 @@ def __init__( ): col_type = AutoCollectionType.STANDARD_METRICS self._performance_metrics = PerformanceMetrics(meter, labels, col_type) - self._request_metrics = RequestMetrics(meter, labels, span_processor) + self._request_metrics = RequestMetrics(meter, labels, span_processor, col_type) diff --git a/azure_monitor/src/azure_monitor/sdk/auto_collection/request_metrics.py b/azure_monitor/src/azure_monitor/sdk/auto_collection/request_metrics.py index 24d70de..9177f06 100644 --- a/azure_monitor/src/azure_monitor/sdk/auto_collection/request_metrics.py +++ b/azure_monitor/src/azure_monitor/sdk/auto_collection/request_metrics.py @@ -11,6 +11,8 @@ AzureMetricsSpanProcessor, ) +from azure_monitor.sdk.auto_collection.utils import AutoCollectionType + logger = logging.getLogger(__name__) requests_map = dict() @@ -32,19 +34,21 @@ def __init__( meter: Meter, labels: Dict[str, str], span_processor: AzureMetricsSpanProcessor, + collection_type: AutoCollectionType, ): self._meter = meter self._labels = labels self._span_processor = span_processor - meter.register_observer( - callback=self._track_request_failed_rate, - name="\\ApplicationInsights\\Requests Failed/Sec", - description="Incoming Requests Failed Rate", - unit="rps", - value_type=float, - observer_type=UpDownSumObserver, - ) + if collection_type == AutoCollectionType.LIVE_METRICS: + meter.register_observer( + callback=self._track_request_failed_rate, + name="\\ApplicationInsights\\Requests Failed/Sec", + description="Incoming Requests Failed Rate", + unit="rps", + value_type=float, + observer_type=UpDownSumObserver, + ) meter.register_observer( callback=self._track_request_duration, name="\\ASP.NET Applications(??APP_W3SVC_PROC??)\\Request Execution Time", From 1d9d5e6de4cbf9a49b9c5339940bd27a4ae61607 Mon Sep 17 00:00:00 2001 From: Leighton Date: Tue, 23 Jun 2020 14:36:13 -0700 Subject: [PATCH 2/6] fix tests --- .../sdk/auto_collection/__init__.py | 4 +- .../auto_collection/test_request_metrics.py | 80 ++----------------- 2 files changed, 8 insertions(+), 76 deletions(-) diff --git a/azure_monitor/src/azure_monitor/sdk/auto_collection/__init__.py b/azure_monitor/src/azure_monitor/sdk/auto_collection/__init__.py index 9811358..59e0705 100644 --- a/azure_monitor/src/azure_monitor/sdk/auto_collection/__init__.py +++ b/azure_monitor/src/azure_monitor/sdk/auto_collection/__init__.py @@ -44,4 +44,6 @@ def __init__( ): col_type = AutoCollectionType.STANDARD_METRICS self._performance_metrics = PerformanceMetrics(meter, labels, col_type) - self._request_metrics = RequestMetrics(meter, labels, span_processor, col_type) + self._request_metrics = RequestMetrics( + meter, labels, span_processor, col_type + ) diff --git a/azure_monitor/tests/auto_collection/test_request_metrics.py b/azure_monitor/tests/auto_collection/test_request_metrics.py index 2d0b121..ec2f613 100644 --- a/azure_monitor/tests/auto_collection/test_request_metrics.py +++ b/azure_monitor/tests/auto_collection/test_request_metrics.py @@ -11,6 +11,7 @@ from azure_monitor.sdk.auto_collection.metrics_span_processor import ( AzureMetricsSpanProcessor, ) +from azure_monitor.sdk.auto_collection.utils import AutoCollectionType # pylint: disable=protected-access @@ -35,18 +36,12 @@ def test_constructor(self): meter=mock_meter, labels=self._test_labels, span_processor=self._span_processor, + collection_type=AutoCollectionType.STANDARD_METRICS, ) self.assertEqual(request_metrics_collector._meter, mock_meter) self.assertEqual(request_metrics_collector._labels, self._test_labels) self.assertEqual(mock_meter.register_observer.call_count, 3) create_metric_calls = mock_meter.register_observer.call_args_list - create_metric_calls[0].assert_called_with( - callback=request_metrics_collector._track_request_failed_rate, - name="\\ApplicationInsights\\Requests Failed/Sec", - description="Incoming Requests Failed Rate", - unit="rps", - value_type=float, - ) create_metric_calls[1].assert_called_with( callback=request_metrics_collector._track_request_duration, name="\\ASP.NET Applications(??APP_W3SVC_PROC??)\\Request Execution Time", @@ -68,6 +63,7 @@ def test_track_request_duration(self): meter=self._meter, labels=self._test_labels, span_processor=self._span_processor, + collection_type=AutoCollectionType.STANDARD_METRICS, ) self._span_processor.request_duration = 100 self._span_processor.request_count = 10 @@ -90,6 +86,7 @@ def test_track_request_duration_error(self): meter=self._meter, labels=self._test_labels, span_processor=self._span_processor, + collection_type=AutoCollectionType.STANDARD_METRICS, ) self._span_processor.request_duration = 100 self._span_processor.request_count = 10 @@ -113,6 +110,7 @@ def test_track_request_rate(self, time_mock): meter=self._meter, labels=self._test_labels, span_processor=self._span_processor, + collection_type=AutoCollectionType.STANDARD_METRICS, ) time_mock.time.return_value = 100 request_metrics.requests_map["last_time"] = 98 @@ -174,71 +172,3 @@ def test_track_request_rate_error(self, time_mock): self.assertEqual( obs.aggregators[tuple(self._test_labels.items())].current, 5.0 ) - - @mock.patch("azure_monitor.sdk.auto_collection.request_metrics.time") - def test_track_request_failed_rate(self, time_mock): - request_metrics_collector = request_metrics.RequestMetrics( - meter=self._meter, - labels=self._test_labels, - span_processor=self._span_processor, - ) - time_mock.time.return_value = 100 - request_metrics.requests_map["last_time"] = 98 - self._span_processor.failed_request_count = 4 - obs = Observer( - callback=request_metrics_collector._track_request_failed_rate, - name="test", - description="test", - unit="test", - value_type=float, - meter=self._meter, - ) - request_metrics_collector._track_request_failed_rate(obs) - self.assertEqual( - obs.aggregators[tuple(self._test_labels.items())].current, 2.0 - ) - - @mock.patch("azure_monitor.sdk.auto_collection.request_metrics.time") - def test_track_request_failed_rate_time_none(self, time_mock): - time_mock.time.return_value = 100 - request_metrics_collector = request_metrics.RequestMetrics( - meter=self._meter, - labels=self._test_labels, - span_processor=self._span_processor, - ) - request_metrics.requests_map["last_time"] = None - obs = Observer( - callback=request_metrics_collector._track_request_failed_rate, - name="test", - description="test", - unit="test", - value_type=float, - meter=self._meter, - ) - request_metrics_collector._track_request_failed_rate(obs) - self.assertEqual( - obs.aggregators[tuple(self._test_labels.items())].current, 0.0 - ) - - @mock.patch("azure_monitor.sdk.auto_collection.request_metrics.time") - def test_track_request_failed_rate_error(self, time_mock): - request_metrics_collector = request_metrics.RequestMetrics( - meter=self._meter, - labels=self._test_labels, - span_processor=self._span_processor, - ) - time_mock.time.return_value = 100 - request_metrics.requests_map["last_rate"] = 5.0 - request_metrics.requests_map["last_time"] = 100 - obs = Observer( - callback=request_metrics_collector._track_request_failed_rate, - name="test", - description="test", - unit="test", - value_type=float, - meter=self._meter, - ) - request_metrics_collector._track_request_failed_rate(obs) - self.assertEqual( - obs.aggregators[tuple(self._test_labels.items())].current, 5.0 - ) From 8caf678d4c2b41116ed2709f8c3fd75ac33feb6c Mon Sep 17 00:00:00 2001 From: Leighton Date: Tue, 23 Jun 2020 14:51:15 -0700 Subject: [PATCH 3/6] fix tests --- .../azure_monitor/sdk/auto_collection/request_metrics.py | 1 - .../tests/auto_collection/test_request_metrics.py | 8 +++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/azure_monitor/src/azure_monitor/sdk/auto_collection/request_metrics.py b/azure_monitor/src/azure_monitor/sdk/auto_collection/request_metrics.py index 9177f06..c78294d 100644 --- a/azure_monitor/src/azure_monitor/sdk/auto_collection/request_metrics.py +++ b/azure_monitor/src/azure_monitor/sdk/auto_collection/request_metrics.py @@ -10,7 +10,6 @@ from azure_monitor.sdk.auto_collection.metrics_span_processor import ( AzureMetricsSpanProcessor, ) - from azure_monitor.sdk.auto_collection.utils import AutoCollectionType logger = logging.getLogger(__name__) diff --git a/azure_monitor/tests/auto_collection/test_request_metrics.py b/azure_monitor/tests/auto_collection/test_request_metrics.py index ec2f613..a367834 100644 --- a/azure_monitor/tests/auto_collection/test_request_metrics.py +++ b/azure_monitor/tests/auto_collection/test_request_metrics.py @@ -40,9 +40,9 @@ def test_constructor(self): ) self.assertEqual(request_metrics_collector._meter, mock_meter) self.assertEqual(request_metrics_collector._labels, self._test_labels) - self.assertEqual(mock_meter.register_observer.call_count, 3) + self.assertEqual(mock_meter.register_observer.call_count, 2) create_metric_calls = mock_meter.register_observer.call_args_list - create_metric_calls[1].assert_called_with( + create_metric_calls[0].assert_called_with( callback=request_metrics_collector._track_request_duration, name="\\ASP.NET Applications(??APP_W3SVC_PROC??)\\Request Execution Time", description="Incoming Requests Average Execution Time", @@ -50,7 +50,7 @@ def test_constructor(self): value_type=int, ) - create_metric_calls[2].assert_called_with( + create_metric_calls[1].assert_called_with( callback=request_metrics_collector._track_request_rate, name="\\ASP.NET Applications(??APP_W3SVC_PROC??)\\Requests/Sec", description="Incoming Requests Rate", @@ -135,6 +135,7 @@ def test_track_request_rate_time_none(self, time_mock): meter=self._meter, labels=self._test_labels, span_processor=self._span_processor, + collection_type=AutoCollectionType.STANDARD_METRICS, ) request_metrics.requests_map["last_time"] = None obs = Observer( @@ -156,6 +157,7 @@ def test_track_request_rate_error(self, time_mock): meter=self._meter, labels=self._test_labels, span_processor=self._span_processor, + collection_type=AutoCollectionType.STANDARD_METRICS, ) time_mock.time.return_value = 100 request_metrics.requests_map["last_rate"] = 5.0 From 8f123dc9b5958ad8313a76ec7c8745046ab80208 Mon Sep 17 00:00:00 2001 From: Leighton Date: Tue, 23 Jun 2020 15:01:34 -0700 Subject: [PATCH 4/6] fix test --- .../azure_monitor/sdk/auto_collection/live_metrics/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure_monitor/src/azure_monitor/sdk/auto_collection/live_metrics/__init__.py b/azure_monitor/src/azure_monitor/sdk/auto_collection/live_metrics/__init__.py index 8c2cb46..cf0b343 100644 --- a/azure_monitor/src/azure_monitor/sdk/auto_collection/live_metrics/__init__.py +++ b/azure_monitor/src/azure_monitor/sdk/auto_collection/live_metrics/__init__.py @@ -44,7 +44,7 @@ def __init__( self._dependency_metrics = DependencyMetrics( meter, labels, span_processor ) - self._request_metrics = RequestMetrics(meter, labels, span_processor) + self._request_metrics = RequestMetrics(meter, labels, span_processor, col_type) self._manager = LiveMetricsManager( meter, instrumentation_key, span_processor ) From a8fb8f73a5478f4bece3d45fd83bb84d57e4f995 Mon Sep 17 00:00:00 2001 From: Leighton Date: Tue, 23 Jun 2020 15:18:57 -0700 Subject: [PATCH 5/6] black --- .../sdk/auto_collection/live_metrics/__init__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/azure_monitor/src/azure_monitor/sdk/auto_collection/live_metrics/__init__.py b/azure_monitor/src/azure_monitor/sdk/auto_collection/live_metrics/__init__.py index cf0b343..0bd1428 100644 --- a/azure_monitor/src/azure_monitor/sdk/auto_collection/live_metrics/__init__.py +++ b/azure_monitor/src/azure_monitor/sdk/auto_collection/live_metrics/__init__.py @@ -44,7 +44,9 @@ def __init__( self._dependency_metrics = DependencyMetrics( meter, labels, span_processor ) - self._request_metrics = RequestMetrics(meter, labels, span_processor, col_type) + self._request_metrics = RequestMetrics( + meter, labels, span_processor, col_type + ) self._manager = LiveMetricsManager( meter, instrumentation_key, span_processor ) From 10f8c5106ee4f0cc4ef15f72e82566206d20df94 Mon Sep 17 00:00:00 2001 From: Leighton Date: Tue, 23 Jun 2020 15:24:45 -0700 Subject: [PATCH 6/6] changelog --- azure_monitor/CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/azure_monitor/CHANGELOG.md b/azure_monitor/CHANGELOG.md index 2c0131e..30cd696 100644 --- a/azure_monitor/CHANGELOG.md +++ b/azure_monitor/CHANGELOG.md @@ -2,8 +2,10 @@ ## Unreleased +- Remove request failed per second metrics from auto-collection + ([#102](https://github.com/microsoft/opentelemetry-azure-monitor-python/pull/102)) - Remove dependency metrics from auto-collection -- ([#92](https://github.com/microsoft/opentelemetry-azure-monitor-python/pull/92)) + ([#92](https://github.com/microsoft/opentelemetry-azure-monitor-python/pull/92)) ## 0.3b.1 Released 2020-05-21