OpenTelemetry
Since Camel 3.5
The OpenTelemetry component is used for tracing and timing incoming and outgoing Camel messages using OpenTelemetry.
Events (spans) are captured for incoming and outgoing messages being sent to/from Camel.
Configuration
The configuration properties for the OpenTelemetry tracer are:
| Option | Default | Description |
|---|---|---|
instrumentationName |
camel |
A name uniquely identifying the instrumentation scope, such as the instrumentation library, package, or fully qualified class name. Must not be null. |
excludePatterns |
Sets exclude pattern(s) that will disable tracing for Camel messages that matches the pattern. The content is a Set<String> where the key is a pattern. The pattern uses the rules from Intercept. |
|
encoding |
false |
Sets whether the header keys need to be encoded (connector specific) or not. The value is a boolean. Dashes are required for instances to be encoded for JMS property keys. |
Using Camel OpenTelemetry
Include the camel-opentelemetry
component in your POM, along with any specific
dependencies associated with the
chosen OpenTelemetry compliant Tracer.
To explicitly configure OpenTelemetry support,
instantiate the OpenTelemetryTracer
and initialize the camel
context. You can optionally specify a Tracer,
or alternatively it can be implicitly discovered
using the
Registry
OpenTelemetryTracer otelTracer = new OpenTelemetryTracer();
// By default, it uses the DefaultTracer, but you can override it with a specific OpenTelemetry Tracer implementation.
otelTracer.setTracer(...);
// And then initialize the context
otelTracer.init(camelContext);
| You would still need OpenTelemetry to instrument your code, which can be done via a Java agent. |
Using it with standalone Camel
If you use camel-main as
standalone Camel, then you can enable and
use OpenTelemetry without Java code.
Add camel-opentelemetry
component in your POM, and configure in
application.properties:
camel.opentelemetry.enabled = true
# you can confiure the other options
# camel.opentelemetry.instrumentationName = myApp
| You would still need OpenTelemetry to instrument your code, which can be done via a Java agent. |
Spring Boot
If you are using Spring Boot then you can add
the camel-opentelemetry-starter
dependency, and turn on OpenTracing by
annotating
the main class with
@CamelOpenTelemetry.
The OpenTelemetryTracer will be
implicitly obtained from the camel context’s
Registry, unless
a OpenTelemetryTracer bean has been
defined by the application.
Java Agent
Download the latest version.
This package includes the instrumentation agent as well as instrumentations for all supported libraries and all available data exporters. The package provides a completely automatic, out-of-the-box experience.
Enable the instrumentation agent using the -javaagent
flag to the JVM.
java -javaagent:path/to/opentelemetry-javaagent.jar \
-jar myapp.jar
By default, the OpenTelemetry Java agent uses OTLP
exporter configured to send data to OpenTelemetry
collector at http://localhost:4317.
Configuration parameters are passed as Java
system properties (-D flags) or as
environment variables. See the
configuration documentation for the full
list of configuration items. For example:
java -javaagent:path/to/opentelemetry-javaagent.jar \
-Dotel.service.name=your-service-name \
-Dotel.traces.exporter=jaeger \
-jar myapp.jar