Skip to content

Commit fb7de31

Browse files
committed
Add AWS SDK exception event extractor wiring
1 parent ce0b996 commit fb7de31

2 files changed

Lines changed: 47 additions & 18 deletions

File tree

instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkInstrumenterFactory.java

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,12 @@
55

66
package io.opentelemetry.instrumentation.awssdk.v1_11;
77

8+
import static io.opentelemetry.instrumentation.api.incubator.semconv.db.internal.DbExceptionEventExtractors.setDbClientExceptionEventExtractor;
9+
import static io.opentelemetry.instrumentation.api.incubator.semconv.messaging.internal.MessagingExceptionEventExtractors.setMessagingProcessExceptionEventExtractor;
10+
import static io.opentelemetry.instrumentation.api.incubator.semconv.messaging.internal.MessagingExceptionEventExtractors.setMessagingReceiveExceptionEventExtractor;
11+
import static io.opentelemetry.instrumentation.api.incubator.semconv.messaging.internal.MessagingExceptionEventExtractors.setMessagingSendExceptionEventExtractor;
12+
import static io.opentelemetry.instrumentation.api.incubator.semconv.rpc.internal.RpcExceptionEventExtractors.setRpcClientExceptionEventExtractor;
813
import static java.util.Arrays.asList;
9-
import static java.util.Collections.emptyList;
1014
import static java.util.Collections.singletonList;
1115

1216
import com.amazonaws.Request;
@@ -77,7 +81,7 @@ Instrumenter<Request<?>, Response<?>> requestInstrumenter() {
7781
new AwsSdkSpanNameExtractor(),
7882
SpanKindExtractor.alwaysClient(),
7983
attributesExtractors(),
80-
emptyList(),
84+
builder -> setRpcClientExceptionEventExtractor(builder),
8185
true);
8286
}
8387

@@ -106,6 +110,7 @@ Instrumenter<SqsReceiveRequest, Response<?>> consumerReceiveInstrumenter() {
106110
SpanKindExtractor.alwaysConsumer(),
107111
toSqsRequestExtractors(attributesExtractors()),
108112
singletonList(messagingAttributeExtractor),
113+
builder -> setMessagingReceiveExceptionEventExtractor(builder),
109114
messagingReceiveInstrumentationEnabled);
110115
}
111116

@@ -122,6 +127,7 @@ Instrumenter<SqsProcessRequest, Response<?>> consumerProcessInstrumenter() {
122127
MessagingSpanNameExtractor.create(getter, operation))
123128
.addAttributesExtractors(toSqsRequestExtractors(attributesExtractors()))
124129
.addAttributesExtractor(messagingAttributeExtractor);
130+
setMessagingProcessExceptionEventExtractor(builder);
125131

126132
if (messagingReceiveInstrumentationEnabled) {
127133
builder.addSpanLinksExtractor(
@@ -174,6 +180,7 @@ Instrumenter<Request<?>, Response<?>> producerInstrumenter() {
174180
SpanKindExtractor.alwaysProducer(),
175181
attributesExtractors(),
176182
singletonList(messagingAttributeExtractor),
183+
builder -> setMessagingSendExceptionEventExtractor(builder),
177184
true);
178185
}
179186

@@ -183,10 +190,12 @@ Instrumenter<Request<?>, Response<?>> dynamoDbInstrumenter() {
183190
new AwsSdkSpanNameExtractor(),
184191
SpanKindExtractor.alwaysClient(),
185192
attributesExtractors(),
186-
builder ->
187-
builder
188-
.addAttributesExtractor(new DynamoDbAttributesExtractor())
189-
.addOperationMetrics(DbClientMetrics.get()),
193+
builder -> {
194+
builder
195+
.addAttributesExtractor(new DynamoDbAttributesExtractor())
196+
.addOperationMetrics(DbClientMetrics.get());
197+
setDbClientExceptionEventExtractor(builder);
198+
},
190199
true);
191200
}
192201

@@ -196,13 +205,17 @@ private static <REQUEST, RESPONSE> Instrumenter<REQUEST, RESPONSE> createInstrum
196205
SpanKindExtractor<REQUEST> spanKindExtractor,
197206
List<? extends AttributesExtractor<? super REQUEST, ? super RESPONSE>> attributeExtractors,
198207
List<AttributesExtractor<REQUEST, RESPONSE>> additionalAttributeExtractors,
208+
Consumer<InstrumenterBuilder<REQUEST, RESPONSE>> exceptionEventCustomizer,
199209
boolean enabled) {
200210
return createInstrumenter(
201211
openTelemetry,
202212
spanNameExtractor,
203213
spanKindExtractor,
204214
attributeExtractors,
205-
builder -> builder.addAttributesExtractors(additionalAttributeExtractors),
215+
builder -> {
216+
builder.addAttributesExtractors(additionalAttributeExtractors);
217+
exceptionEventCustomizer.accept(builder);
218+
},
206219
enabled);
207220
}
208221

instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/AwsSdkInstrumenterFactory.java

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,13 @@
55

66
package io.opentelemetry.instrumentation.awssdk.v2_2.internal;
77

8+
import static io.opentelemetry.instrumentation.api.incubator.semconv.db.internal.DbExceptionEventExtractors.setDbClientExceptionEventExtractor;
9+
import static io.opentelemetry.instrumentation.api.incubator.semconv.genai.internal.GenAiExceptionEventExtractors.setGenAiClientExceptionEventExtractor;
10+
import static io.opentelemetry.instrumentation.api.incubator.semconv.messaging.internal.MessagingExceptionEventExtractors.setMessagingProcessExceptionEventExtractor;
11+
import static io.opentelemetry.instrumentation.api.incubator.semconv.messaging.internal.MessagingExceptionEventExtractors.setMessagingReceiveExceptionEventExtractor;
12+
import static io.opentelemetry.instrumentation.api.incubator.semconv.messaging.internal.MessagingExceptionEventExtractors.setMessagingSendExceptionEventExtractor;
13+
import static io.opentelemetry.instrumentation.api.incubator.semconv.rpc.internal.RpcExceptionEventExtractors.setRpcClientExceptionEventExtractor;
814
import static java.util.Arrays.asList;
9-
import static java.util.Collections.emptyList;
1015
import static java.util.Collections.singletonList;
1116

1217
import io.opentelemetry.api.OpenTelemetry;
@@ -103,7 +108,7 @@ public Instrumenter<ExecutionAttributes, Response> requestInstrumenter() {
103108
AwsSdkInstrumenterFactory::spanName,
104109
SpanKindExtractor.alwaysClient(),
105110
attributesExtractors(),
106-
emptyList(),
111+
builder -> setRpcClientExceptionEventExtractor(builder),
107112
true);
108113
}
109114

@@ -138,6 +143,7 @@ public Instrumenter<SqsReceiveRequest, Response> consumerReceiveInstrumenter() {
138143
SpanKindExtractor.alwaysConsumer(),
139144
toSqsRequestExtractors(consumerAttributesExtractors()),
140145
singletonList(messagingAttributeExtractor),
146+
builder -> setMessagingReceiveExceptionEventExtractor(builder),
141147
messagingReceiveInstrumentationEnabled);
142148
}
143149

@@ -152,6 +158,7 @@ public Instrumenter<SqsProcessRequest, Response> consumerProcessInstrumenter() {
152158
MessagingSpanNameExtractor.create(getter, operation))
153159
.addAttributesExtractors(toSqsRequestExtractors(consumerAttributesExtractors()))
154160
.addAttributesExtractor(messagingAttributesExtractor(getter, operation));
161+
setMessagingProcessExceptionEventExtractor(builder);
155162

156163
if (messagingReceiveInstrumentationEnabled) {
157164
builder.addSpanLinksExtractor(
@@ -205,6 +212,7 @@ public Instrumenter<ExecutionAttributes, Response> producerInstrumenter() {
205212
SpanKindExtractor.alwaysProducer(),
206213
attributesExtractors(),
207214
singletonList(messagingAttributeExtractor),
215+
builder -> setMessagingSendExceptionEventExtractor(builder),
208216
true);
209217
}
210218

@@ -214,10 +222,12 @@ public Instrumenter<ExecutionAttributes, Response> dynamoDbInstrumenter() {
214222
AwsSdkInstrumenterFactory::spanName,
215223
SpanKindExtractor.alwaysClient(),
216224
attributesExtractors(),
217-
builder ->
218-
builder
219-
.addAttributesExtractor(new DynamoDbAttributesExtractor())
220-
.addOperationMetrics(DbClientMetrics.get()),
225+
builder -> {
226+
builder
227+
.addAttributesExtractor(new DynamoDbAttributesExtractor())
228+
.addOperationMetrics(DbClientMetrics.get());
229+
setDbClientExceptionEventExtractor(builder);
230+
},
221231
true);
222232
}
223233

@@ -228,10 +238,12 @@ public Instrumenter<ExecutionAttributes, Response> bedrockRuntimeInstrumenter()
228238
GenAiSpanNameExtractor.create(getter),
229239
SpanKindExtractor.alwaysClient(),
230240
attributesExtractors(),
231-
builder ->
232-
builder
233-
.addAttributesExtractor(GenAiAttributesExtractor.create(getter))
234-
.addOperationMetrics(GenAiClientMetrics.get()),
241+
builder -> {
242+
builder
243+
.addAttributesExtractor(GenAiAttributesExtractor.create(getter))
244+
.addOperationMetrics(GenAiClientMetrics.get());
245+
setGenAiClientExceptionEventExtractor(builder);
246+
},
235247
true);
236248
}
237249

@@ -245,14 +257,18 @@ private static <REQUEST, RESPONSE> Instrumenter<REQUEST, RESPONSE> createInstrum
245257
SpanKindExtractor<REQUEST> spanKindExtractor,
246258
List<? extends AttributesExtractor<? super REQUEST, ? super RESPONSE>> attributeExtractors,
247259
List<AttributesExtractor<REQUEST, RESPONSE>> additionalAttributeExtractors,
260+
Consumer<InstrumenterBuilder<REQUEST, RESPONSE>> exceptionEventCustomizer,
248261
boolean enabled) {
249262

250263
return createInstrumenter(
251264
openTelemetry,
252265
spanNameExtractor,
253266
spanKindExtractor,
254267
attributeExtractors,
255-
builder -> builder.addAttributesExtractors(additionalAttributeExtractors),
268+
builder -> {
269+
builder.addAttributesExtractors(additionalAttributeExtractors);
270+
exceptionEventCustomizer.accept(builder);
271+
},
256272
enabled);
257273
}
258274

0 commit comments

Comments
 (0)