Skip to content

Commit c79bb8a

Browse files
authored
Update to OpenTelemetry api/sdk 1.12.0rc1 (#24619)
1 parent cfea582 commit c79bb8a

7 files changed

Lines changed: 184 additions & 180 deletions

File tree

sdk/monitor/azure-monitor-opentelemetry-exporter/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
([#23960](https://github.com/Azure/azure-sdk-for-python/pull/23960))
1414

1515
### Breaking Changes
16+
- Update to OpenTelemetry api/sdk 1.12.0rc1
17+
([#24619](https://github.com/Azure/azure-sdk-for-python/pull/24619))
1618

1719
### Bugs Fixed
1820

sdk/monitor/azure-monitor-opentelemetry-exporter/azure/monitor/opentelemetry/exporter/export/metrics/_exporter.py

Lines changed: 66 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
11
# Copyright (c) Microsoft Corporation. All rights reserved.
22
# Licensed under the MIT License.
33
import logging
4-
from typing import Sequence, Any
5-
6-
from opentelemetry.sdk._metrics.export import MetricExporter, MetricExportResult
7-
from opentelemetry.sdk._metrics.point import (
8-
Gauge,
9-
Histogram,
10-
Metric,
11-
Sum,
4+
5+
from typing import Optional, Any
6+
7+
from opentelemetry.sdk.metrics.export import (
8+
DataPointT,
9+
HistogramDataPoint,
10+
MetricExporter,
11+
MetricExportResult,
12+
MetricsData as OTMetricsData,
13+
NumberDataPoint,
1214
)
15+
from opentelemetry.sdk.resources import Resource
16+
from opentelemetry.sdk.util.instrumentation import InstrumentationScope
1317

1418
from azure.monitor.opentelemetry.exporter import _utils
1519
from azure.monitor.opentelemetry.exporter._generated.models import (
@@ -32,14 +36,32 @@ class AzureMonitorMetricExporter(BaseExporter, MetricExporter):
3236
"""Azure Monitor Metric exporter for OpenTelemetry."""
3337

3438
def export(
35-
self, metrics: Sequence[Metric], **kwargs: Any # pylint: disable=unused-argument
39+
self,
40+
metrics_data: OTMetricsData,
41+
timeout_millis: float = 10_000, # pylint: disable=unused-argument
42+
**kwargs: Any, # pylint: disable=unused-argument
3643
) -> MetricExportResult:
3744
"""Exports a batch of metric data
3845
:param metrics: Open Telemetry Metric(s) to export.
39-
:type metrics: Sequence[~opentelemetry._metrics.point.Metric]
40-
:rtype: ~opentelemetry.sdk._metrics.export.MetricExportResult
46+
:type metrics_data: Sequence[~opentelemetry.sdk.metrics._internal.point.MetricsData]
47+
:rtype: ~opentelemetry.sdk.metrics.export.MetricExportResult
4148
"""
42-
envelopes = [self._metric_to_envelope(metric) for metric in metrics]
49+
envelopes = []
50+
if metrics_data is None:
51+
return MetricExportResult.SUCCESS
52+
for resource_metric in metrics_data.resource_metrics:
53+
for scope_metric in resource_metric.scope_metrics:
54+
for metric in scope_metric.metrics:
55+
for point in metric.data.data_points:
56+
if point is not None:
57+
envelopes.append(
58+
self._point_to_envelope(
59+
point,
60+
metric.name,
61+
resource_metric.resource,
62+
scope_metric.scope
63+
)
64+
)
4365
try:
4466
result = self._transmit(envelopes)
4567
if result == ExportResult.FAILED_RETRYABLE:
@@ -53,17 +75,25 @@ def export(
5375
_logger.exception("Exception occurred while exporting the data.")
5476
return _get_metric_export_result(ExportResult.FAILED_NOT_RETRYABLE)
5577

56-
def shutdown(self) -> None:
78+
def shutdown(
79+
self,
80+
timeout_millis: float = 30_000, # pylint: disable=unused-argument
81+
**kwargs: Any, # pylint: disable=unused-argument
82+
) -> None:
5783
"""Shuts down the exporter.
5884
5985
Called when the SDK is shut down.
6086
"""
6187
self.storage.close()
6288

63-
def _metric_to_envelope(self, metric: Metric) -> TelemetryItem:
64-
if not metric:
65-
return None
66-
envelope = _convert_metric_to_envelope(metric)
89+
def _point_to_envelope(
90+
self,
91+
point: DataPointT,
92+
name: str,
93+
resource: Optional[Resource] = None,
94+
scope: Optional[InstrumentationScope] = None
95+
) -> TelemetryItem:
96+
envelope = _convert_point_to_envelope(point, name, resource, scope)
6797
envelope.instrumentation_key = self._instrumentation_key
6898
return envelope
6999

@@ -86,33 +116,39 @@ def from_connection_string(
86116

87117

88118
# pylint: disable=protected-access
89-
def _convert_metric_to_envelope(metric: Metric) -> TelemetryItem:
90-
point = metric.point
119+
def _convert_point_to_envelope(
120+
point: DataPointT,
121+
name: str,
122+
resource: Optional[Resource] = None,
123+
scope: Optional[InstrumentationScope] = None # pylint: disable=unused-argument
124+
) -> TelemetryItem:
91125
envelope = _utils._create_telemetry_item(point.time_unix_nano)
92126
envelope.name = "Microsoft.ApplicationInsights.Metric"
93-
envelope.tags.update(_utils._populate_part_a_fields(metric.resource))
94-
properties = metric.attributes
127+
envelope.tags.update(_utils._populate_part_a_fields(resource))
95128
value = 0
96-
# TODO
97129
count = 1
98-
# min = None
99-
# max = None
130+
min_ = None
131+
max_ = None
100132
# std_dev = None
101133

102-
if isinstance(point, (Gauge, Sum)):
134+
if isinstance(point, NumberDataPoint):
103135
value = point.value
104-
elif isinstance(point, Histogram):
105-
value = sum(point.bucket_counts)
106-
count = sum(point.bucket_counts)
136+
elif isinstance(point, HistogramDataPoint):
137+
value = point.sum
138+
count = point.count
139+
min_ = point.min
140+
max_ = point.max
107141

108142
data_point = MetricDataPoint(
109-
name=metric.name,
143+
name=name,
110144
value=value,
111145
data_point_type="Aggregation",
112146
count=count,
147+
min=min_,
148+
max=max_,
113149
)
114150
data = MetricsData(
115-
properties=properties,
151+
properties=dict(point.attributes),
116152
metrics=[data_point],
117153
)
118154

sdk/monitor/azure-monitor-opentelemetry-exporter/samples/metrics/sample_instruments.py

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,42 +6,45 @@
66
AzureMonitorMetricsExporter.
77
"""
88
import os
9+
from typing import Iterable
910

10-
from opentelemetry import _metrics
11-
from opentelemetry._metrics.measurement import Measurement
12-
from opentelemetry.sdk._metrics import MeterProvider
13-
from opentelemetry.sdk._metrics.export import PeriodicExportingMetricReader
11+
from opentelemetry import metrics
12+
from opentelemetry.metrics import CallbackOptions, Observation
13+
from opentelemetry.sdk.metrics import MeterProvider
14+
from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader
1415

1516
from azure.monitor.opentelemetry.exporter import AzureMonitorMetricExporter
1617

1718
exporter = AzureMonitorMetricExporter.from_connection_string(
1819
os.environ["APPLICATIONINSIGHTS_CONNECTION_STRING"]
1920
)
2021
reader = PeriodicExportingMetricReader(exporter, export_interval_millis=5000)
21-
_metrics.set_meter_provider(MeterProvider(metric_readers=[reader]))
22+
metrics.set_meter_provider(MeterProvider(metric_readers=[reader]))
2223

2324
# Create a namespaced meter
24-
meter = _metrics.get_meter_provider().get_meter("sample")
25+
meter = metrics.get_meter_provider().get_meter("sample")
2526

2627
# Callback functions for observable instruments
27-
def observable_counter_func():
28-
yield Measurement(1, {})
28+
def observable_counter_func(options: CallbackOptions) -> Iterable[Observation]:
29+
yield Observation(1, {})
2930

3031

31-
def observable_up_down_counter_func():
32-
yield Measurement(-10, {})
32+
def observable_up_down_counter_func(
33+
options: CallbackOptions,
34+
) -> Iterable[Observation]:
35+
yield Observation(-10, {})
3336

3437

35-
def observable_gauge_func():
36-
yield Measurement(9, {})
38+
def observable_gauge_func(options: CallbackOptions) -> Iterable[Observation]:
39+
yield Observation(9, {})
3740

3841
# Counter
3942
counter = meter.create_counter("counter")
4043
counter.add(1)
4144

4245
# Async Counter
4346
observable_counter = meter.create_observable_counter(
44-
"observable_counter", observable_counter_func
47+
"observable_counter", [observable_counter_func]
4548
)
4649

4750
# UpDownCounter
@@ -51,14 +54,12 @@ def observable_gauge_func():
5154

5255
# Async UpDownCounter
5356
observable_updown_counter = meter.create_observable_up_down_counter(
54-
"observable_updown_counter", observable_up_down_counter_func
57+
"observable_updown_counter", [observable_up_down_counter_func]
5558
)
5659

5760
# Histogram
5861
histogram = meter.create_histogram("histogram")
5962
histogram.record(99.9)
6063

6164
# Async Gauge
62-
gauge = meter.create_observable_gauge("gauge", observable_gauge_func)
63-
64-
input(...)
65+
gauge = meter.create_observable_gauge("gauge", [observable_gauge_func])

sdk/monitor/azure-monitor-opentelemetry-exporter/samples/metrics/sample_metrics.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,20 @@
66
"""
77
import os
88

9-
from opentelemetry import _metrics
10-
from opentelemetry.sdk._metrics import MeterProvider
11-
from opentelemetry.sdk._metrics.export import PeriodicExportingMetricReader
9+
from opentelemetry import metrics
10+
from opentelemetry.sdk.metrics import MeterProvider
11+
from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader
1212

1313
from azure.monitor.opentelemetry.exporter import AzureMonitorMetricExporter
1414

1515
exporter = AzureMonitorMetricExporter.from_connection_string(
1616
os.environ["APPLICATIONINSIGHTS_CONNECTION_STRING"]
1717
)
1818
reader = PeriodicExportingMetricReader(exporter, export_interval_millis=5000)
19-
_metrics.set_meter_provider(MeterProvider(metric_readers=[reader]))
19+
metrics.set_meter_provider(MeterProvider(metric_readers=[reader]))
2020

2121
# Create a namespaced meter
22-
meter = _metrics.get_meter_provider().get_meter("sample")
22+
meter = metrics.get_meter_provider().get_meter("sample")
2323

2424
# Create Counter instrument with the meter
2525
counter = meter.create_counter("counter")

sdk/monitor/azure-monitor-opentelemetry-exporter/setup.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@
8282
install_requires=[
8383
"azure-core<2.0.0,>=1.23.0",
8484
"msrest>=0.6.10",
85-
"opentelemetry-api<2.0.0,>=1.11.1,!=1.10a0",
86-
"opentelemetry-sdk<2.0.0,>=1.11.1,!=1.10a0",
85+
"opentelemetry-api<2.0.0,>=1.12.0rc1,!=1.10a0",
86+
"opentelemetry-sdk<2.0.0,>=1.12.0rc1,!=1.10a0",
8787
],
8888
)
8989

0 commit comments

Comments
 (0)