diff --git a/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTelemetryBuilder.java b/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTelemetryBuilder.java index 1ce44d1dbc44..0d12781177dd 100644 --- a/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTelemetryBuilder.java +++ b/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTelemetryBuilder.java @@ -48,6 +48,8 @@ public final class GrpcTelemetryBuilder { additionalExtractors = new ArrayList<>(); private final List> additionalClientExtractors = new ArrayList<>(); + private final List> + additionalServerExtractors = new ArrayList<>(); private boolean captureExperimentalSpanAttributes; @@ -78,6 +80,18 @@ public GrpcTelemetryBuilder addClientAttributeExtractor( return this; } + /** + * Adds an extra server-only {@link AttributesExtractor} to invoke to set attributes to + * instrumented items. The {@link AttributesExtractor} will be executed after all default + * extractors. + */ + @CanIgnoreReturnValue + public GrpcTelemetryBuilder addServerAttributeExtractor( + AttributesExtractor attributesExtractor) { + additionalServerExtractors.add(attributesExtractor); + return this; + } + /** Sets custom client {@link SpanNameExtractor} via transform function. */ @CanIgnoreReturnValue public GrpcTelemetryBuilder setClientSpanNameExtractor( @@ -154,6 +168,7 @@ public GrpcTelemetry build() { .addAttributesExtractor(RpcServerAttributesExtractor.create(rpcAttributesGetter)) .addAttributesExtractor( NetServerAttributesExtractor.create(new GrpcNetServerAttributesGetter())) + .addAttributesExtractors(additionalServerExtractors) .addOperationMetrics(RpcServerMetrics.get()); if (peerService != null) {