Add OpenTelemetry Tracing Support to WildFly
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
Related Issues
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
-
Tracing of JDBC calls
-
Tracing of EJB calls
-
A WildFly Quickstart (https://issues.redhat.com/browse/EAP7-1799)
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.