Add OpenTelemetry Tracing Support to WildFly

In  observability

Overview

OpenTelemetry is an ambitious specification that aims to encapsulate APIs for tracing, metrics, and logging. With OpenTracing (which WildFly already supports) having shutdown in favor of OpenTelemetry, we need to migrate our support as well. This project will only cover the tracing aspects of OpenTelemetry. Any future support for the metrics and logging parts of the OpenTelemetry spec will need to be handled by a separate effort.

Issue Metadata

Dev Contacts

QE Contacts

Testing By

  • [X] Engineering

  • [X] QE

Affected Projects or Components

Other Interested Projects

Relevant Installation Types

  • Traditional standalone server (unzipped or provisioned by Galleon)

  • Managed domain

  • OpenShift s2i

  • Bootable jar

Requirements

Hard Requirements

  • The server/domain administrator should be able to configure OpenTelemetry export and span processor options

  • Jakarta REST endpoints should be automatically traced

  • Context propagation should work for both incoming and outgoing request (e.g., a ClientRequestFilter)

  • Adherence to the Observability Standard for Runtimes

Nice-to-Have Requirements

Non-Requirements

  • Multiple span processor support (if desired, users should submit an RFE)

  • Metrics API support

  • Logging API support

  • Use of the OpenTracing shim to allow existing OpenTracing apps to continue to function without modification (OpenTracing will not be removed until and if MicroProfile dictates that we do)

Test Plan

  • Add tests to testsuite/integration

    • Tests in testsuite/integration/basic to check for injection support correctness

    • Test in testsuite/integration/manualmode to test integration with Jaeger

Community Documentation

The feature will be documented in WildFly Admin Guide in a new observability section.

Release Note Content

Support for the tracing aspects of the OpenTelemetry spec have been added, allowing for the injection of the OpenTelemetry and Tracer objects from the specification, as well as implicit tracing of Jakarta REST endpoints.