Thanks to visit codestin.com
Credit goes to github.com

Skip to content
This repository was archived by the owner on Nov 16, 2023. It is now read-only.

Remove requests failed rate from perf counters #102

Merged
merged 6 commits into from
Jun 24, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 7 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand All @@ -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=<your-ikey-here>',
)

# SpanExporter receives the spans and send them to the target location.
span_processor = BatchExportSpanProcessor(exporter)
trace.get_tracer_provider().add_span_processor(span_processor)

Expand Down Expand Up @@ -75,12 +71,14 @@ trace.set_tracer_provider(TracerProvider())
tracer_provider = trace.get_tracer_provider()

exporter = AzureMonitorSpanExporter(
connection_string='InstrumentationKey=<your-ikey-here>',
)
connection_string='InstrumentationKey=<your-ikey-here>',
)
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/")
```

Expand All @@ -106,6 +104,7 @@ def callback_function(envelope):
exporter = AzureMonitorSpanExporter(
connection_string='InstrumentationKey=<your-ikey-here>'
)
# This line will modify telemetry
exporter.add_telemetry_processor(callback_function)

trace.set_tracer_provider(TracerProvider())
Expand Down
4 changes: 3 additions & 1 deletion azure_monitor/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions azure_monitor/setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
self._request_metrics = RequestMetrics(
meter, labels, span_processor, col_type
)
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,9 @@ 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
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from azure_monitor.sdk.auto_collection.metrics_span_processor import (
AzureMetricsSpanProcessor,
)
from azure_monitor.sdk.auto_collection.utils import AutoCollectionType

logger = logging.getLogger(__name__)
requests_map = dict()
Expand All @@ -32,19 +33,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",
Expand Down
86 changes: 9 additions & 77 deletions azure_monitor/tests/auto_collection/test_request_metrics.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -35,27 +36,21 @@ 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)
self.assertEqual(mock_meter.register_observer.call_count, 2)
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",
description="Incoming Requests Average Execution Time",
unit="milliseconds",
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",
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -137,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(
Expand All @@ -158,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
Expand All @@ -174,71 +174,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
)