From 644dfd338123f82824d7c3f1f4d71a5ed81f27cc Mon Sep 17 00:00:00 2001 From: kyyril Date: Thu, 21 May 2026 05:47:07 +0700 Subject: [PATCH 1/3] docs: document interaction between View attribute filtering and Exemplars Fixes #8391 --- .../src/main/java/io/opentelemetry/sdk/metrics/View.java | 4 ++++ .../java/io/opentelemetry/sdk/metrics/ViewBuilder.java | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/View.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/View.java index 32f4309b600..4896425ccac 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/View.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/View.java @@ -17,6 +17,10 @@ *

Views are registered with the SDK {@link * SdkMeterProviderBuilder#registerView(InstrumentSelector, View)}. * + *

Note: When a view filters out attributes, the dropped attributes may still appear on + * recorded exemplars. If you need to remove sensitive data from exemplars, you must configure a + * custom {@link ExemplarFilter} or disable exemplars entirely. + * * @since 1.14.0 */ @AutoValue diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/ViewBuilder.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/ViewBuilder.java index b387481b474..5ba5fa5f43e 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/ViewBuilder.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/ViewBuilder.java @@ -71,6 +71,10 @@ public ViewBuilder setAggregation(Aggregation aggregation) { /** * Sets a filter which retains attribute keys included in {@code keysToRetain}. * + *

Note: Attributes dropped by this filter may still appear on recorded exemplars. If + * you need to remove sensitive data from exemplars, you must configure a custom {@link + * ExemplarFilter} or disable exemplars entirely. + * * @since 1.30.0 */ public ViewBuilder setAttributeFilter(Set keysToRetain) { @@ -89,6 +93,10 @@ public ViewBuilder setAttributeFilter(Set keysToRetain) { * *

Only attribute keys that pass the supplied {@link Predicate} will be included in the output. * + *

Note: Attributes dropped by this filter may still appear on recorded exemplars. If + * you need to remove sensitive data from exemplars, you must configure a custom {@link + * ExemplarFilter} or disable exemplars entirely. + * * @param keyFilter filter for attribute keys to include. */ public ViewBuilder setAttributeFilter(Predicate keyFilter) { From aa12105090bbd02bbd7403d8536cac29bb4ae082 Mon Sep 17 00:00:00 2001 From: kyyril Date: Thu, 21 May 2026 22:52:52 +0700 Subject: [PATCH 2/3] docs: address reviewer comments on View and ViewBuilder --- .../main/java/io/opentelemetry/sdk/metrics/View.java | 4 ---- .../io/opentelemetry/sdk/metrics/ViewBuilder.java | 12 ++++++------ 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/View.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/View.java index 4896425ccac..32f4309b600 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/View.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/View.java @@ -17,10 +17,6 @@ *

Views are registered with the SDK {@link * SdkMeterProviderBuilder#registerView(InstrumentSelector, View)}. * - *

Note: When a view filters out attributes, the dropped attributes may still appear on - * recorded exemplars. If you need to remove sensitive data from exemplars, you must configure a - * custom {@link ExemplarFilter} or disable exemplars entirely. - * * @since 1.14.0 */ @AutoValue diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/ViewBuilder.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/ViewBuilder.java index 5ba5fa5f43e..1354c6558af 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/ViewBuilder.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/ViewBuilder.java @@ -71,9 +71,9 @@ public ViewBuilder setAggregation(Aggregation aggregation) { /** * Sets a filter which retains attribute keys included in {@code keysToRetain}. * - *

Note: Attributes dropped by this filter may still appear on recorded exemplars. If - * you need to remove sensitive data from exemplars, you must configure a custom {@link - * ExemplarFilter} or disable exemplars entirely. + *

Note: Attributes dropped by this filter may still appear on recorded exemplars. If you need + * to remove sensitive data from exemplars, you must configure a custom {@link ExemplarFilter} or + * disable exemplars entirely. * * @since 1.30.0 */ @@ -93,9 +93,9 @@ public ViewBuilder setAttributeFilter(Set keysToRetain) { * *

Only attribute keys that pass the supplied {@link Predicate} will be included in the output. * - *

Note: Attributes dropped by this filter may still appear on recorded exemplars. If - * you need to remove sensitive data from exemplars, you must configure a custom {@link - * ExemplarFilter} or disable exemplars entirely. + *

Note: Attributes dropped by this filter may still appear on recorded exemplars. If you need + * to remove sensitive data from exemplars, you must configure a custom {@link ExemplarFilter} or + * disable exemplars entirely. * * @param keyFilter filter for attribute keys to include. */ From cd5f33e9a859d8230e460fef9aaf56c636e12d62 Mon Sep 17 00:00:00 2001 From: kyyril Date: Fri, 22 May 2026 05:38:21 +0700 Subject: [PATCH 3/3] docs: clarify custom ExemplarFilter is not supported in Java --- .../io/opentelemetry/sdk/metrics/ViewBuilder.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/ViewBuilder.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/ViewBuilder.java index 1354c6558af..0d1d6824c1b 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/ViewBuilder.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/ViewBuilder.java @@ -72,8 +72,10 @@ public ViewBuilder setAggregation(Aggregation aggregation) { * Sets a filter which retains attribute keys included in {@code keysToRetain}. * *

Note: Attributes dropped by this filter may still appear on recorded exemplars. If you need - * to remove sensitive data from exemplars, you must configure a custom {@link ExemplarFilter} or - * disable exemplars entirely. + * to remove sensitive data from exemplars, you must disable exemplars entirely (e.g., using + * {@link SdkMeterProviderBuilder#setExemplarFilter(ExemplarFilter)} with {@link + * ExemplarFilter#alwaysOff()}), filter them using a delegating exporter, or filter them in the + * OpenTelemetry Collector. * * @since 1.30.0 */ @@ -94,8 +96,10 @@ public ViewBuilder setAttributeFilter(Set keysToRetain) { *

Only attribute keys that pass the supplied {@link Predicate} will be included in the output. * *

Note: Attributes dropped by this filter may still appear on recorded exemplars. If you need - * to remove sensitive data from exemplars, you must configure a custom {@link ExemplarFilter} or - * disable exemplars entirely. + * to remove sensitive data from exemplars, you must disable exemplars entirely (e.g., using + * {@link SdkMeterProviderBuilder#setExemplarFilter(ExemplarFilter)} with {@link + * ExemplarFilter#alwaysOff()}), filter them using a delegating exporter, or filter them in the + * OpenTelemetry Collector. * * @param keyFilter filter for attribute keys to include. */