This is an automated email from the ASF dual-hosted git repository.

jamesnetherton pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git


The following commit(s) were added to refs/heads/main by this push:
     new 8ea7bacc58 Add support for opentelemetry2 traceHeadersInclusion tracer 
option
8ea7bacc58 is described below

commit 8ea7bacc583edd37d02319e8d5167bf715d97030
Author: James Netherton <[email protected]>
AuthorDate: Thu Feb 5 09:56:04 2026 +0000

    Add support for opentelemetry2 traceHeadersInclusion tracer option
    
    Fixes #8250
---
 .../ROOT/pages/reference/extensions/opentelemetry2.adoc    |  6 ++++++
 .../opentelemetry2/deployment/Opentelemetry2Test.java      |  2 ++
 .../opentelemetry2/CamelOpenTelemetry2Config.java          |  8 ++++++++
 .../opentelemetry2/OpenTelemetry2TracerProducer.java       | 12 +++---------
 .../opentelemetry2/it/OpenTelemetry2Resource.java          | 14 ++++++++++++++
 .../opentelemetry2/it/OpenTelemetry2RouteBuilder.java      |  3 +++
 .../src/main/resources/application.properties              |  1 +
 .../component/opentelemetry2/it/Opentelemetry2Test.java    | 11 +++++++++++
 8 files changed, 48 insertions(+), 9 deletions(-)

diff --git a/docs/modules/ROOT/pages/reference/extensions/opentelemetry2.adoc 
b/docs/modules/ROOT/pages/reference/extensions/opentelemetry2.adoc
index cc033fc7fd..77a5f4da20 100644
--- a/docs/modules/ROOT/pages/reference/extensions/opentelemetry2.adoc
+++ b/docs/modules/ROOT/pages/reference/extensions/opentelemetry2.adoc
@@ -142,6 +142,12 @@ Sets whether to create new OpenTelemetry spans for each 
Camel Processor. Use the
 out Processors.
 | `boolean`
 | `false`
+
+a| 
[[quarkus-camel-opentelemetry2-trace-headers-inclusion]]`link:#quarkus-camel-opentelemetry2-trace-headers-inclusion[quarkus.camel.opentelemetry2.trace-headers-inclusion]`
+
+If set to `true`, adds the generated telemetry `CAMEL_TRACE_ID` and 
`CAMEL_SPAN_ID` Exchange headers.
+| `boolean`
+| `false`
 |===
 
 [.configuration-legend]
diff --git 
a/extensions/opentelemetry2/deployment/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/deployment/Opentelemetry2Test.java
 
b/extensions/opentelemetry2/deployment/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/deployment/Opentelemetry2Test.java
index 5306f0a529..b11feb3c54 100644
--- 
a/extensions/opentelemetry2/deployment/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/deployment/Opentelemetry2Test.java
+++ 
b/extensions/opentelemetry2/deployment/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/deployment/Opentelemetry2Test.java
@@ -40,6 +40,7 @@ public class Opentelemetry2Test {
     static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
             
.overrideConfigKey("quarkus.camel.opentelemetry2.exclude-patterns", 
EXCLUDE_PATTERNS)
             
.overrideConfigKey("quarkus.camel.opentelemetry2.trace-processors", "true")
+            
.overrideConfigKey("quarkus.camel.opentelemetry2.trace-headers-inclusion", 
"true")
             .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class));
 
     @Inject
@@ -54,5 +55,6 @@ public class Opentelemetry2Test {
         assertInstanceOf(OpenTelemetryTracer.class, tracer);
         assertEquals(EXCLUDE_PATTERNS, tracer.getExcludePatterns());
         assertTrue(tracer.isTraceProcessors());
+        assertTrue(tracer.isTraceHeadersInclusion());
     }
 }
diff --git 
a/extensions/opentelemetry2/runtime/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/CamelOpenTelemetry2Config.java
 
b/extensions/opentelemetry2/runtime/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/CamelOpenTelemetry2Config.java
index f310af6c42..6bbcb4cb5a 100644
--- 
a/extensions/opentelemetry2/runtime/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/CamelOpenTelemetry2Config.java
+++ 
b/extensions/opentelemetry2/runtime/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/CamelOpenTelemetry2Config.java
@@ -48,4 +48,12 @@ public interface CamelOpenTelemetry2Config {
      */
     @WithDefault("false")
     boolean traceProcessors();
+
+    /**
+     * If set to `true`, adds the generated telemetry `CAMEL_TRACE_ID` and 
`CAMEL_SPAN_ID` Exchange headers.
+     *
+     * @asciidoclet
+     */
+    @WithDefault("false")
+    boolean traceHeadersInclusion();
 }
diff --git 
a/extensions/opentelemetry2/runtime/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/OpenTelemetry2TracerProducer.java
 
b/extensions/opentelemetry2/runtime/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/OpenTelemetry2TracerProducer.java
index 385a77de25..4457ab406d 100644
--- 
a/extensions/opentelemetry2/runtime/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/OpenTelemetry2TracerProducer.java
+++ 
b/extensions/opentelemetry2/runtime/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/OpenTelemetry2TracerProducer.java
@@ -39,16 +39,10 @@ public class OpenTelemetry2TracerProducer {
     public OpenTelemetryTracer getOpenTelemetry(CamelContext camelContext) {
         if (!oTelRuntimeConfig.sdkDisabled()) {
             OpenTelemetryTracer openTelemetryTracer = new 
OpenTelemetryTracer();
-            if (config.excludePatterns().isPresent()) {
-                
openTelemetryTracer.setExcludePatterns(config.excludePatterns().get());
-            }
-
-            if (config.traceProcessors()) {
-                
openTelemetryTracer.setTraceProcessors(config.traceProcessors());
-            }
-
+            
config.excludePatterns().ifPresent(openTelemetryTracer::setExcludePatterns);
+            openTelemetryTracer.setTraceProcessors(config.traceProcessors());
+            
openTelemetryTracer.setTraceHeadersInclusion(config.traceHeadersInclusion());
             openTelemetryTracer.init(camelContext);
-
             return openTelemetryTracer;
         }
         return null;
diff --git 
a/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2Resource.java
 
b/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2Resource.java
index fadf1361f1..9038dc22c8 100644
--- 
a/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2Resource.java
+++ 
b/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2Resource.java
@@ -23,7 +23,11 @@ import jakarta.ws.rs.Path;
 import jakarta.ws.rs.PathParam;
 import jakarta.ws.rs.Produces;
 import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
 import org.apache.camel.ProducerTemplate;
+import org.apache.camel.telemetry.Tracer;
 
 @Path("/opentelemetry2")
 @ApplicationScoped
@@ -53,4 +57,14 @@ public class OpenTelemetry2Resource {
         return producerTemplate.requestBody("direct:jdbcQuery", null, 
Long.class);
     }
 
+    @Path("/trace/headers")
+    @GET
+    public Response traceHeaders() {
+        Exchange result = 
producerTemplate.request("direct:traceHeaderInclusion", null);
+        Message message = result.getMessage();
+        return Response.noContent()
+                .header("spanId", message.getHeader(Tracer.SPAN_HEADER, 
String.class))
+                .header("traceId", message.getHeader(Tracer.TRACE_HEADER, 
String.class))
+                .build();
+    }
 }
diff --git 
a/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2RouteBuilder.java
 
b/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2RouteBuilder.java
index b21980d090..ac5acfa933 100644
--- 
a/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2RouteBuilder.java
+++ 
b/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2RouteBuilder.java
@@ -41,5 +41,8 @@ public class OpenTelemetry2RouteBuilder extends RouteBuilder {
 
         from("direct:jdbcQuery")
                 .to("bean:jdbcQueryBean");
+
+        from("direct:traceHeaderInclusion")
+                .log("Trace info: CAMEL_SPAN_ID=${header.CAMEL_SPAN_ID}, 
CAMEL_TRACE_ID=${header.CAMEL_TRACE_ID}");
     }
 }
diff --git 
a/integration-tests/opentelemetry2/src/main/resources/application.properties 
b/integration-tests/opentelemetry2/src/main/resources/application.properties
index 0be4baca18..ae57815127 100644
--- a/integration-tests/opentelemetry2/src/main/resources/application.properties
+++ b/integration-tests/opentelemetry2/src/main/resources/application.properties
@@ -15,6 +15,7 @@
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
 quarkus.camel.opentelemetry2.exclude-patterns = timer*
+quarkus.camel.opentelemetry2.trace-headers-inclusion=true
 quarkus.otel.bsp.schedule.delay=1
 quarkus.otel.bsp.export.timeout=5s
 quarkus.datasource.db-kind=postgresql
diff --git 
a/integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/Opentelemetry2Test.java
 
b/integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/Opentelemetry2Test.java
index a55c143632..4a5fde8c2b 100644
--- 
a/integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/Opentelemetry2Test.java
+++ 
b/integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/Opentelemetry2Test.java
@@ -31,6 +31,8 @@ import static 
io.opentelemetry.semconv.incubating.CodeIncubatingAttributes.CODE_
 import static 
org.apache.camel.quarkus.component.opentelemetry2.it.OpenTelemetry2TestHelper.getSpans;
 import static org.awaitility.Awaitility.await;
 import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.Matchers.emptyOrNullString;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
@@ -152,4 +154,13 @@ class Opentelemetry2Test {
         
assertEquals("org.apache.camel.quarkus.component.opentelemetry2.it.OpenTelemetry2Resource.jdbcQuery",
                 spans.get(5).get(CODE_FUNCTION_NAME.getKey()));
     }
+
+    @Test
+    void traceHeaderInclusion() {
+        RestAssured.get("/opentelemetry2/trace/headers")
+                .then()
+                .statusCode(204)
+                .header("spanId", not(emptyOrNullString()))
+                .header("traceId", not(emptyOrNullString()));
+    }
 }

Reply via email to