Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

In the following subsections we are going to walk through many different scenarios to illustrate the distributed tracing in action, starting from the simplest ones and finishing with asynchronous JAX-RS services. All examples assume that configuration has been done (see please Configuring Client  and Configuring Server sections above). In this example, both client and server use OpenTelemetry tracing bridge:

Code Block
java
java
final Resource resource = Resource.getDefault().merge(
    Resource.create(Attributes.of(ResourceAttributes.SERVICE_NAME, "...")));

final SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder()
    .addSpanProcessor(BatchSpanProcessor.builder(OtlpGrpcSpanExporter.builder().build()).build())
    .setSampler(Sampler.alwaysOn())
    .setResource(resource)
    .build();

final OpenTelemetrySdk openTelemetrySdk = OpenTelemetrySdk.builder()
    .setTracerProvider(sdkTracerProvider)
    .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance()))
    .buildAndRegisterGlobal();

final OtelCurrentTraceContext bridgeContext = new OtelCurrentTraceContext();
final io.opentelemetry.api.trace.Tracer otelTracer = openTelemetrySdk.getTracer("...");

final OtelPropagator propagator = new OtelPropagator(ContextPropagators.create(
    TextMapPropagator.composite(W3CTraceContextPropagator.getInstance())), otelTracer);

final Slf4JEventListener slf4JEventListener = new Slf4JEventListener();
final Slf4JBaggageEventListener slf4JBaggageEventListener = new Slf4JBaggageEventListener(Collections.emptyList());

final ObservationRegistry observationRegistry = ObservationRegistry.create();
final OtelTracer tracer = new OtelTracer(otelTracer, bridgeContext, event -> {
        slf4JEventListener.onEvent(event);
        slf4JBaggageEventListener.onEvent(event);
    });

observationRegistry.observationConfig().observationHandler(
        new FirstMatchingCompositeObservationHandler(
            new PropagatingSenderTracingObservationHandler<>(tracer, propagator),
            new PropagatingReceiverTracingObservationHandler<>(tracer, propagator)
        )
    );

Example #1: Client and Server with default distributed tracing configured

...