Skip to content

A109: Target Attribute Filter for OpenTelemetry Metrics#528

Open
becomeStar wants to merge 4 commits into
grpc:masterfrom
becomeStar:otel-target-filter
Open

A109: Target Attribute Filter for OpenTelemetry Metrics#528
becomeStar wants to merge 4 commits into
grpc:masterfrom
becomeStar:otel-target-filter

Conversation

@becomeStar

@becomeStar becomeStar commented Dec 22, 2025

Copy link
Copy Markdown

Summary

This gRFC proposes an optional Java API for controlling how grpc.target is recorded in gRPC Java OpenTelemetry client metrics. Targets accepted by the filter are recorded as-is; rejected targets are recorded as "other" to reduce metric cardinality while preserving existing behavior by default.

Background

This addresses the concrete Java cardinality issue reported in grpc/grpc-java#12322, where clients connecting to thousands of targets can exceed OpenTelemetry cardinality limits for grpc.client.* metrics.

The Java implementation has already been reviewed and merged in grpc/grpc-java#12587.

Scope

This proposal is scoped to Java OpenTelemetry client metrics covered by A66/A96. It does not change channel behavior, target resolution, OpenTelemetry View behavior, or the deprecated C++ target filter API.

The deprecated C++ SetTargetAttributeFilter API is described only as related history.

kannanjgithub pushed a commit to grpc/grpc-java that referenced this pull request Jan 9, 2026
Introduce an optional Predicate<String> targetAttributeFilter to control how grpc.target is recorded in OpenTelemetry client metrics.

When a filter is provided, targets rejected by the predicate are normalized to "other" to reduce grpc.target metric cardinality, while accepted targets are recorded as-is. If no filter is set, existing behavior is preserved.

This change adds a new Builder API on GrpcOpenTelemetry to allow applications to configure the filter. Tests verify both the Builder
wiring and the target normalization behavior.

This is an optional API; annotation (e.g., experimental) can be added
per maintainer guidance.

Refs #12322
Related: gRFC A109 – Target Attribute Filter for OpenTelemetry Metrics
grpc/proposal#528
jdcormie pushed a commit to jdcormie/grpc-java that referenced this pull request Feb 11, 2026
Introduce an optional Predicate<String> targetAttributeFilter to control how grpc.target is recorded in OpenTelemetry client metrics.

When a filter is provided, targets rejected by the predicate are normalized to "other" to reduce grpc.target metric cardinality, while accepted targets are recorded as-is. If no filter is set, existing behavior is preserved.

This change adds a new Builder API on GrpcOpenTelemetry to allow applications to configure the filter. Tests verify both the Builder
wiring and the target normalization behavior.

This is an optional API; annotation (e.g., experimental) can be added
per maintainer guidance.

Refs grpc#12322
Related: gRFC A109 – Target Attribute Filter for OpenTelemetry Metrics
grpc/proposal#528
@becomeStar

Copy link
Copy Markdown
Author

Hello @ejona86 and @markdroth, could you help route this gRFC to an APPROVER?

I updated the proposal to narrow the scope based on grpc/grpc-java#12322:

  • The proposal now focuses on the concrete Java OpenTelemetry cardinality issue.
  • The Java implementation in opentelemetry: Add target attribute filter for metrics grpc-java#12587 is linked and noted as merged.
  • The deprecated C++ SetTargetAttributeFilter API is described only as related history.
  • The proposal explicitly says it does not change channel behavior, target resolution, OpenTelemetry View behavior, or the deprecated C++ target filter API.

Could you advise whether this framing is appropriate, and whether this should remain A109, be handled as an A66/A96 update, or be converted to a Java-specific proposal?

Once an APPROVER is assigned, I will send the required grpc-io notification and update the Discussion at link.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant