diff --git a/.changelog/5249.added b/.changelog/5249.added new file mode 100644 index 00000000000..5b35b3b9418 --- /dev/null +++ b/.changelog/5249.added @@ -0,0 +1 @@ +`opentelemetry-exporter-prometheus`: add `default_aggregation` to `PrometheusMetricReader` diff --git a/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/__init__.py b/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/__init__.py index 9b3d2efd34a..3f9a48991d8 100644 --- a/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/__init__.py +++ b/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/__init__.py @@ -94,6 +94,7 @@ MetricsData, Sum, ) +from opentelemetry.sdk.metrics.view import Aggregation from opentelemetry.semconv._incubating.attributes.otel_attributes import ( OtelComponentTypeValues, ) @@ -129,6 +130,7 @@ def __init__( prefix: str = "", *, registry: CollectorRegistry = REGISTRY, + default_aggregation: dict[type, Aggregation] | None = None, ) -> None: super().__init__( preferred_temporality={ @@ -139,6 +141,7 @@ def __init__( ObservableUpDownCounter: AggregationTemporality.CUMULATIVE, ObservableGauge: AggregationTemporality.CUMULATIVE, }, + preferred_aggregation=default_aggregation, otel_component_type=OtelComponentTypeValues.PROMETHEUS_HTTP_TEXT_METRIC_EXPORTER, ) self._collector = _CustomCollector( diff --git a/exporter/opentelemetry-exporter-prometheus/tests/test_prometheus_exporter.py b/exporter/opentelemetry-exporter-prometheus/tests/test_prometheus_exporter.py index d3d49ba467d..83924d3183b 100644 --- a/exporter/opentelemetry-exporter-prometheus/tests/test_prometheus_exporter.py +++ b/exporter/opentelemetry-exporter-prometheus/tests/test_prometheus_exporter.py @@ -17,7 +17,7 @@ _CustomCollector, ) from opentelemetry.metrics import NoOpMeterProvider -from opentelemetry.sdk.metrics import MeterProvider +from opentelemetry.sdk.metrics import Counter, MeterProvider from opentelemetry.sdk.metrics.export import ( AggregationTemporality, Histogram, @@ -27,6 +27,7 @@ ResourceMetrics, ScopeMetrics, ) +from opentelemetry.sdk.metrics.view import DropAggregation from opentelemetry.sdk.resources import Resource from opentelemetry.test.metrictestutil import ( _generate_gauge, @@ -89,6 +90,25 @@ def test_constructor(self): _ = PrometheusMetricReader() self.assertTrue(self._mock_registry_register.called) + def test_constructor_default_aggregation(self): + custom_registry = CollectorRegistry() + metric_reader = PrometheusMetricReader( + disable_target_info=True, + registry=custom_registry, + default_aggregation={Counter: DropAggregation()}, + ) + provider = MeterProvider(metric_readers=[metric_reader]) + + meter = provider.get_meter("getting-started", "0.1.2") + counter = meter.create_counter("counter") + counter.add(1) + + self.assertEqual( + generate_latest(custom_registry).decode("utf-8"), + "", # DropAggregation drops all measurements, so no metrics are exported + ) + provider.shutdown() + def test_shutdown(self): with patch( "prometheus_client.core.REGISTRY.unregister"