Skip to content
Open
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## Unreleased

- `opentelemetry-exporter-prometheus`: Add `default_aggregation` parameter to `PrometheusMetricReader` to allow configuring default aggregation per instrument kind
([#5109](https://github.com/open-telemetry/opentelemetry-python/issues/5109))
Comment thread
MikeGoldsmith marked this conversation as resolved.
Outdated
- `opentelemetry-sdk`: fix YAML structure injection via environment variable substitution in declarative file configuration; values containing newlines are now emitted as quoted YAML scalars per spec requirement
([#5091](https://github.com/open-telemetry/opentelemetry-python/pull/5091))
- `opentelemetry-sdk`: Add `create_logger_provider`/`configure_logger_provider` to declarative file configuration, enabling LoggerProvider instantiation from config files without reading env vars
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,9 @@
MetricsData,
Sum,
)
from opentelemetry.sdk.metrics.view import (
Aggregation,
)
from opentelemetry.semconv._incubating.attributes.otel_attributes import (
OtelComponentTypeValues,
)
Expand Down Expand Up @@ -135,7 +138,10 @@ class PrometheusMetricReader(MetricReader):
"""Prometheus metric exporter for OpenTelemetry."""

def __init__(
self, disable_target_info: bool = False, prefix: str = ""
self,
disable_target_info: bool = False,
prefix: str = "",
default_aggregation: dict[type, Aggregation] | None = None,
) -> None:
super().__init__(
preferred_temporality={
Expand All @@ -146,6 +152,7 @@ def __init__(
ObservableUpDownCounter: AggregationTemporality.CUMULATIVE,
ObservableGauge: AggregationTemporality.CUMULATIVE,
},
preferred_aggregation=default_aggregation,
Comment thread
MikeGoldsmith marked this conversation as resolved.
Outdated
otel_component_type=OtelComponentTypeValues.PROMETHEUS_HTTP_TEXT_METRIC_EXPORTER,
)
self._collector = _CustomCollector(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
_CustomCollector,
)
from opentelemetry.metrics import NoOpMeterProvider
from opentelemetry.sdk.metrics import Histogram as HistogramInstrument
from opentelemetry.sdk.metrics import MeterProvider
from opentelemetry.sdk.metrics.export import (
AggregationTemporality,
Expand All @@ -38,6 +39,7 @@
ResourceMetrics,
ScopeMetrics,
)
from opentelemetry.sdk.metrics.view import ExplicitBucketHistogramAggregation
from opentelemetry.sdk.resources import Resource
from opentelemetry.test.metrictestutil import (
_generate_gauge,
Expand Down Expand Up @@ -719,3 +721,21 @@ def test_multiple_data_points_with_different_label_sets(self):
"""
),
)

def test_default_aggregation(self):
"""Test that default_aggregation parameter is passed to MetricReader."""
custom_aggregation = {
HistogramInstrument: ExplicitBucketHistogramAggregation(
boundaries=[1.0, 5.0, 10.0]
)
}
reader = PrometheusMetricReader(
default_aggregation=custom_aggregation
)
self.assertEqual(
reader._instrument_class_aggregation[
HistogramInstrument
].__class__,
ExplicitBucketHistogramAggregation,
)
reader.shutdown()
Comment thread
MikeGoldsmith marked this conversation as resolved.
Outdated
Loading