Chapter 59. OpenTelemetry
Distributed tracing using OpenTelemetry
59.1. What’s inside Copy linkLink copied to clipboard!
Please refer to the above link for usage and configuration details.
59.2. Maven coordinates Copy linkLink copied to clipboard!
Create a new project with this extension on code.quarkus.redhat.com
Or add the coordinates to your existing project:
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-opentelemetry</artifactId> </dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-opentelemetry</artifactId>
</dependency>
59.3. Usage Copy linkLink copied to clipboard!
The extension automatically creates a Camel OpenTelemetryTracer
and binds it to the Camel registry.
In order to send the captured traces to a tracing system, you need to configure some properties within application.properties
like those below.
Note that you must add a dependency to the OpenTelemetry exporter that you want to work with.
At present, Quarkus has support for Jaeger and the OpenTelemetry Protocol Specification (OTLP).
For Jaeger:
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-opentelemetry-exporter-jaeger</artifactId> </dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-opentelemetry-exporter-jaeger</artifactId>
</dependency>
For OTLP:
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-opentelemetry-exporter-otlp</artifactId> </dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-opentelemetry-exporter-otlp</artifactId>
</dependency>
Refer to the Quarkus OpenTelemetry guide for a full list of configuration options.
Route endpoints can be excluded from tracing by configuring a property named quarkus.camel.opentelemetry.exclude-patterns
in application.properties
. For example:
Exclude all direct & netty-http endpoints from tracing
# Exclude all direct & netty-http endpoints from tracing
quarkus.camel.opentelemetry.exclude-patterns=direct:*,netty-http:*
59.3.1. Tracing CDI bean method execution Copy linkLink copied to clipboard!
When instrumenting the execution of CDI bean methods from Camel routes, you should annotate such methods with io.opentelemetry.extension.annotations.WithSpan
. Methods annotated with @WithSpan
will create a new Span and establish any required relationships with the current Trace context.
For example, to instrument a CDI bean from a Camel route, first ensure the appropriate methods are annotated with @WithTrace
.
Next, use the bean in your Camel route.
To ensure that the sequence of recorded spans is correct, you must use the full to("bean:")
endpoint URI and not the shortened .bean()
EIP DSL method.
There is more information about CDI instrumentation in the Quarkus OpenTelemetry guide.
59.4. Additional Camel Quarkus configuration Copy linkLink copied to clipboard!
Configuration property | Type | Default |
---|---|---|
Sets whether header names need to be encoded. Can be useful in situations where OpenTelemetry propagators potentially set header name values in formats that are not compatible with the target system. E.g for JMS where the specification mandates header names are valid Java identifiers. |
|
|
Sets whether to disable tracing for endpoint URIs that match the given patterns. The pattern can take the following forms: 1. An exact match on the endpoint URI. E.g platform-http:/some/path 2. A wildcard match. E.g platform-http:* 3. A regular expression matching the endpoint URI. E.g platform-http:/prefix/.* |
|
Configuration property fixed at build time. All other configuration properties are overridable at runtime.