Skip to content

Commit b8aad6c

Browse files
committed
Add AWS SDK exception event extractor wiring
1 parent a7571ea commit b8aad6c

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/internal/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.internal;
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;
@@ -81,7 +85,7 @@ public Instrumenter<Request<?>, Response<?>> requestInstrumenter() {
8185
new AwsSdkSpanNameExtractor(),
8286
SpanKindExtractor.alwaysClient(),
8387
attributesExtractors(),
84-
emptyList(),
88+
builder -> setRpcClientExceptionEventExtractor(builder),
8589
true);
8690
}
8791

@@ -110,6 +114,7 @@ public Instrumenter<SqsReceiveRequest, Response<?>> consumerReceiveInstrumenter(
110114
SpanKindExtractor.alwaysConsumer(),
111115
toSqsRequestExtractors(attributesExtractors()),
112116
singletonList(messagingAttributeExtractor),
117+
builder -> setMessagingReceiveExceptionEventExtractor(builder),
113118
messagingReceiveInstrumentationEnabled);
114119
}
115120

@@ -126,6 +131,7 @@ public Instrumenter<SqsProcessRequest, Response<?>> consumerProcessInstrumenter(
126131
MessagingSpanNameExtractor.create(getter, operation))
127132
.addAttributesExtractors(toSqsRequestExtractors(attributesExtractors()))
128133
.addAttributesExtractor(messagingAttributeExtractor);
134+
setMessagingProcessExceptionEventExtractor(builder);
129135

130136
if (messagingReceiveInstrumentationEnabled) {
131137
builder.addSpanLinksExtractor(
@@ -178,6 +184,7 @@ public Instrumenter<Request<?>, Response<?>> producerInstrumenter() {
178184
SpanKindExtractor.alwaysProducer(),
179185
attributesExtractors(),
180186
singletonList(messagingAttributeExtractor),
187+
builder -> setMessagingSendExceptionEventExtractor(builder),
181188
true);
182189
}
183190

@@ -187,10 +194,12 @@ public Instrumenter<Request<?>, Response<?>> dynamoDbInstrumenter() {
187194
new AwsSdkSpanNameExtractor(),
188195
SpanKindExtractor.alwaysClient(),
189196
attributesExtractors(),
190-
builder ->
191-
builder
192-
.addAttributesExtractor(new DynamoDbAttributesExtractor())
193-
.addOperationMetrics(DbClientMetrics.get()),
197+
builder -> {
198+
builder
199+
.addAttributesExtractor(new DynamoDbAttributesExtractor())
200+
.addOperationMetrics(DbClientMetrics.get());
201+
setDbClientExceptionEventExtractor(builder);
202+
},
194203
true);
195204
}
196205

@@ -200,13 +209,17 @@ private static <REQUEST, RESPONSE> Instrumenter<REQUEST, RESPONSE> createInstrum
200209
SpanKindExtractor<REQUEST> spanKindExtractor,
201210
List<? extends AttributesExtractor<? super REQUEST, ? super RESPONSE>> attributeExtractors,
202211
List<AttributesExtractor<REQUEST, RESPONSE>> additionalAttributeExtractors,
212+
Consumer<InstrumenterBuilder<REQUEST, RESPONSE>> exceptionEventCustomizer,
203213
boolean enabled) {
204214
return createInstrumenter(
205215
openTelemetry,
206216
spanNameExtractor,
207217
spanKindExtractor,
208218
attributeExtractors,
209-
builder -> builder.addAttributesExtractors(additionalAttributeExtractors),
219+
builder -> {
220+
builder.addAttributesExtractors(additionalAttributeExtractors);
221+
exceptionEventCustomizer.accept(builder);
222+
},
210223
enabled);
211224
}
212225

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)