Skip to content

Commit

Permalink
xray propagation in an IT test
Browse files Browse the repository at this point in the history
  • Loading branch information
brunobat committed Apr 12, 2023
1 parent 68e6c86 commit 2268def
Show file tree
Hide file tree
Showing 13 changed files with 74 additions and 172 deletions.
72 changes: 0 additions & 72 deletions bom/application/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,6 @@
<opentracing-mongo.version>0.1.5</opentracing-mongo.version>
<opentelemetry.version>1.23.1</opentelemetry.version>
<opentelemetry-alpha.version>1.23.0-alpha</opentelemetry-alpha.version>
<opentelemetry-aws.contrib.version>1.23.0-alpha</opentelemetry-aws.contrib.version>
<opentelemetry-aws-xray.contrib.version>1.23.0</opentelemetry-aws-xray.contrib.version>
<jaeger.version>1.8.1</jaeger.version>
<quarkus-http.version>5.0.1.Final</quarkus-http.version>
<micrometer.version>1.10.5</micrometer.version><!-- keep in sync with hdrhistogram -->
Expand Down Expand Up @@ -3923,76 +3921,6 @@
<artifactId>rxjava</artifactId>
<version>${rxjava.version}</version>
</dependency>
<!-- OpenTelemetry contrib libraries don't have a bom and are independently released -->
<dependency>
<groupId>io.opentelemetry.contrib</groupId>
<artifactId>opentelemetry-aws-xray-propagator</artifactId>
<version>${opentelemetry-aws.contrib.version}</version>
<exclusions>
<exclusion>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.opentelemetry.contrib</groupId>
<artifactId>opentelemetry-aws-resources</artifactId>
<version>${opentelemetry-aws.contrib.version}</version>
<exclusions>
<exclusion>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-api</artifactId>
</exclusion>
<exclusion>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk</artifactId>
</exclusion>
<exclusion>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-semconv</artifactId>
</exclusion>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</exclusion>
<exclusion>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.opentelemetry.contrib</groupId>
<artifactId>opentelemetry-aws-xray</artifactId>
<version>${opentelemetry-aws-xray.contrib.version}</version>
<exclusions>
<exclusion>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk</artifactId>
</exclusion>
<exclusion>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk-trace</artifactId>
</exclusion>
<exclusion>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-semconv</artifactId>
</exclusion>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</exclusion>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</exclusion>
<exclusion>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.opentracing</groupId>
<artifactId>opentracing-api</artifactId>
Expand Down
16 changes: 8 additions & 8 deletions docs/src/main/asciidoc/opentelemetry.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -263,9 +263,9 @@ data across the lifespan of a distributed transaction.
By default, the OpenTelemetry extension enables the https://www.w3.org/TR/trace-context/[W3C Trace Context] and the https://www.w3.org/TR/baggage/[W3C Baggage]
propagators, you can however choose any of the supported OpenTelemetry propagators by setting the `propagators` config that is described in the <<configuration-reference>>.

[NOTE]
====
The `b3`, `b3multi`, `jaeger` and `ottrace` propagators will need the https://github.com/open-telemetry/opentelemetry-java/tree/main/extensions/trace-propagators[trace-propagators]
==== Additional Propagators

* The `b3`, `b3multi`, `jaeger` and `ottrace` propagators will need the https://github.com/open-telemetry/opentelemetry-java/tree/main/extensions/trace-propagators[trace-propagators]
extension to be added as a dependency to your project.

[source,xml,role="primary asciidoc-tabs-target-sync-cli asciidoc-tabs-target-sync-maven"]
Expand All @@ -283,23 +283,23 @@ extension to be added as a dependency to your project.
implementation("io.opentelemetry:opentelemetry-extension-trace-propagators")
----

The `xray` propagator will need the https://github.com/open-telemetry/opentelemetry-java/tree/main/extensions/aws[aws] extension to be added as a dependency to your project.
* The `xray` propagator will need the https://github.com/open-telemetry/opentelemetry-java-contrib/tree/main/aws-xray-propagator[aws]
extension to be added as a dependency to your project.

[source,xml,role="primary asciidoc-tabs-target-sync-cli asciidoc-tabs-target-sync-maven"]
.pom.xml
----
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-extension-aws</artifactId>
<groupId>io.opentelemetry.contrib</groupId>
<artifactId>opentelemetry-aws-xray-propagator</artifactId>
</dependency>
----

[source,gradle,role="secondary asciidoc-tabs-target-sync-gradle"]
.build.gradle
----
implementation("io.opentelemetry:opentelemetry-extension-aws")
implementation("io.opentelemetry.contrib:opentelemetry-aws-xray-propagator")
----
====

=== Resource
A https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/overview.md#resources[resource] is a representation
Expand Down
17 changes: 0 additions & 17 deletions extensions/opentelemetry/deployment/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -116,23 +116,6 @@
<artifactId>opentelemetry-jdbc</artifactId>
<scope>test</scope>
</dependency>

<!-- brunobat: aws dependencies commented. This will be soon moved to an independent IT Project. -->
<!-- <dependency>-->
<!-- <groupId>io.opentelemetry.contrib</groupId>-->
<!-- <artifactId>opentelemetry-aws-xray-propagator</artifactId>-->
<!-- <scope>test</scope>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>io.opentelemetry.contrib</groupId>-->
<!-- <artifactId>opentelemetry-aws-resources</artifactId>-->
<!-- <scope>test</scope>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>io.opentelemetry.contrib</groupId>-->
<!-- <artifactId>opentelemetry-aws-xray</artifactId>-->
<!-- <scope>test</scope>-->
<!-- </dependency>-->
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jdbc-h2-deployment</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import org.jboss.jandex.IndexView;
import org.jboss.jandex.MethodInfo;

import io.opentelemetry.context.propagation.TextMapPropagator;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.sdk.trace.IdGenerator;
import io.opentelemetry.sdk.trace.SpanProcessor;
Expand Down Expand Up @@ -46,6 +47,7 @@ public class TracerProcessor {
private static final DotName SAMPLER = DotName.createSimple(Sampler.class.getName());
private static final DotName SPAN_EXPORTER = DotName.createSimple(SpanExporter.class.getName());
private static final DotName SPAN_PROCESSOR = DotName.createSimple(SpanProcessor.class.getName());
private static final DotName TEXT_MAP_PROPAGATOR = DotName.createSimple(TextMapPropagator.class.getName());

@BuildStep
UnremovableBeanBuildItem ensureProducersAreRetained(
Expand Down Expand Up @@ -83,6 +85,9 @@ UnremovableBeanBuildItem ensureProducersAreRetained(
knownClasses.add(SPAN_PROCESSOR.toString());
index.getAllKnownImplementors(SPAN_PROCESSOR)
.forEach(classInfo -> knownClasses.add(classInfo.name().toString()));
knownClasses.add(TEXT_MAP_PROPAGATOR.toString());
index.getAllKnownImplementors(TEXT_MAP_PROPAGATOR)
.forEach(classInfo -> knownClasses.add(classInfo.name().toString()));

Set<String> retainProducers = new HashSet<>();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

import java.util.Arrays;

import jakarta.inject.Inject;

import org.junit.jupiter.api.Test;
Expand All @@ -21,6 +23,7 @@ class OpenTelemetryLegacyConfigurationTest {
static final QuarkusUnitTest TEST = new QuarkusUnitTest()
.overrideConfigKey("quarkus.opentelemetry.enabled", "false")
.overrideConfigKey("quarkus.opentelemetry.tracer.enabled", "false")
.overrideConfigKey("quarkus.opentelemetry.propagators", "tracecontext")
.overrideConfigKey("quarkus.opentelemetry.tracer.suppress-non-application-uris", "false")
.overrideConfigKey("quarkus.opentelemetry.tracer.include-static-resources", "true")
.overrideConfigKey("quarkus.opentelemetry.tracer.sampler", "off")
Expand All @@ -43,6 +46,7 @@ void config() {
assertEquals(FALSE, oTelBuildConfig.enabled());
assertTrue(oTelBuildConfig.traces().enabled().isPresent());
assertEquals(FALSE, oTelBuildConfig.traces().enabled().get());
assertEquals(Arrays.asList("tracecontext"), oTelBuildConfig.propagators()); // will not include the default baggagge
assertEquals(FALSE, oTelRuntimeConfig.traces().suppressNonApplicationUris());
assertEquals(TRUE, oTelRuntimeConfig.traces().includeStaticResources());
assertEquals("always_off", oTelBuildConfig.traces().sampler());
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,22 +1,13 @@
package io.quarkus.opentelemetry.runtime;

import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.ServiceLoader;
import java.util.Set;

import io.opentelemetry.api.baggage.propagation.W3CBaggagePropagator;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.SpanContext;
import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.context.propagation.TextMapPropagator;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurablePropagatorProvider;
import io.opentelemetry.sdk.trace.ReadableSpan;
import io.quarkus.vertx.core.runtime.VertxMDC;

Expand All @@ -29,41 +20,6 @@ public final class OpenTelemetryUtil {
private OpenTelemetryUtil() {
}

private static TextMapPropagator getPropagator(
String name, Map<String, TextMapPropagator> spiPropagators) {
if ("tracecontext".equals(name)) {
return W3CTraceContextPropagator.getInstance();
}
if ("baggage".equals(name)) {
return W3CBaggagePropagator.getInstance();
}

TextMapPropagator spiPropagator = spiPropagators.get(name);
if (spiPropagator != null) {
return spiPropagator;
}
throw new IllegalArgumentException(
"Unrecognized value for propagator: " + name
+ ". Make sure the artifact including the propagator is on the classpath.");
}

public static ContextPropagators mapPropagators(List<String> propagators) {
Map<String, TextMapPropagator> spiPropagators = new HashMap<>();
for (var provider : ServiceLoader.load(ConfigurablePropagatorProvider.class)) {
// Even though this param was added, propagators currently don't use any config properties
// when the time arrives, and they do use it, we will need to implement a Quarkus
// backed `ConfigProperties` class
spiPropagators.put(provider.getName(), provider.getPropagator(null));
}

Set<TextMapPropagator> selectedPropagators = new HashSet<>(propagators.size());
for (String propagator : propagators) {
selectedPropagators.add(getPropagator(propagator.trim(), spiPropagators));
}

return ContextPropagators.create(TextMapPropagator.composite(selectedPropagators));
}

/**
* Converts a list of "key=value" pairs into a map.
* Empty entries will be removed.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ public OTelFallbackConfigSourceInterceptor() {
super(Map.of(
"quarkus.otel.enabled", "quarkus.opentelemetry.enabled",
"quarkus.otel.traces.enabled", "quarkus.opentelemetry.tracer.enabled",
"quarkus.otel.propagators", "quarkus.opentelemetry.propagators",
"quarkus.otel.traces.suppress-non-application-uris",
"quarkus.opentelemetry.tracer.suppress-non-application-uris",
"quarkus.otel.traces.include-static-resources", "quarkus.opentelemetry.tracer.include-static-resources",
Expand Down Expand Up @@ -50,6 +51,7 @@ public Iterator<String> iterateNames(final ConfigSourceInterceptorContext contex
// TODO - Required because the defaults ConfigSource for mappings does not provide configuration names.
names.add("quarkus.otel.enabled");
names.add("quarkus.otel.metrics.exporter");
names.add("quarkus.otel.propagators");
names.add("quarkus.otel.logs.exporter");
names.add("quarkus.otel.traces.enabled");
names.add("quarkus.otel.traces.exporter");
Expand Down
6 changes: 6 additions & 0 deletions integration-tests/opentelemetry-spi/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,12 @@
<artifactId>opentelemetry-sdk-testing</artifactId>
</dependency>

<dependency>
<groupId>io.opentelemetry.contrib</groupId>
<artifactId>opentelemetry-aws-xray-propagator</artifactId>
<version>1.23.0-alpha</version>
</dependency>

<!-- Test Dependencies -->
<dependency>
<groupId>io.quarkus</groupId>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.quarkus.it.opentelemetry.spi;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

Expand All @@ -11,6 +12,8 @@
import jakarta.ws.rs.Path;
import jakarta.ws.rs.core.Response;

import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.context.propagation.TextMapPropagator;
import io.opentelemetry.sdk.testing.exporter.InMemorySpanExporter;
import io.opentelemetry.sdk.trace.data.SpanData;

Expand All @@ -19,6 +22,9 @@ public class ExporterResource {
@Inject
InMemorySpanExporter inMemorySpanExporter;

@Inject
OpenTelemetry openTelemetry;

@GET
@Path("/reset")
public Response reset() {
Expand All @@ -35,6 +41,13 @@ public List<SpanData> export() {
.collect(Collectors.toList());
}

@GET
@Path("/export/propagation")
public List<String> exportPropagation() throws NoSuchFieldException, IllegalAccessException {
TextMapPropagator textMapPropagator = openTelemetry.getPropagators().getTextMapPropagator();
return new ArrayList<>(textMapPropagator.fields());
}

@ApplicationScoped
static class InMemorySpanExporterProducer {
@Produces
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ quarkus.application.name=opentelemetry-integration-test-spi
quarkus.application.version=999-SNAPSHOT

quarkus.otel.traces.sampler=custom-spi-sampler
quarkus.otel.propagators=tracecontext,xray

# speed up build
quarkus.otel.bsp.schedule.delay=100
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package io.quarkus.it.opentelemetry.spi.propagation;

import io.quarkus.test.junit.QuarkusIntegrationTest;

@QuarkusIntegrationTest
public class OpenTelemetryPropagatorsIT extends OpenTelemetryPropagatorsTest {
}
Loading

0 comments on commit 2268def

Please sign in to comment.