// Do not edit directly!
// This file was generated by camel-quarkus-maven-plugin:update-extension-doc-page
[id="extensions-opentelemetry"]
= OpenTelemetry
:linkattrs:
:cq-artifact-id: camel-quarkus-opentelemetry
:cq-native-supported: true
:cq-status: Stable
:cq-status-deprecation: Stable
:cq-description: Distributed tracing using OpenTelemetry
:cq-deprecated: false
:cq-jvm-since: 2.1.0
:cq-native-since: 2.1.0

ifeval::[{doc-show-badges} == true]
[.badges]
[.badge-key]##JVM since##[.badge-supported]##2.1.0## [.badge-key]##Native since##[.badge-supported]##2.1.0##
endif::[]

Distributed tracing using OpenTelemetry

[id="extensions-opentelemetry-whats-inside"]
== What's inside

* xref:{cq-camel-components}:others:opentelemetry.adoc[OpenTelemetry]

Please refer to the above link for usage and configuration details.

[id="extensions-opentelemetry-maven-coordinates"]
== Maven coordinates

https://{link-quarkus-code-generator}/?extension-search=camel-quarkus-opentelemetry[Create a new project with this extension on {link-quarkus-code-generator}, window="_blank"]

Or add the coordinates to your existing project:

[source,xml]
----
<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-opentelemetry</artifactId>
</dependency>
----
ifeval::[{doc-show-user-guide-link} == true]
Check the xref:user-guide/index.adoc[User guide] for more information about writing Camel Quarkus applications.
endif::[]

[id="extensions-opentelemetry-usage"]
== Usage
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.

[source,properties]
----
# Identifier for the origin of spans created by the application
quarkus.application.name=my-camel-application

# For OTLP
quarkus.opentelemetry.tracer.exporter.otlp.endpoint=http://localhost:4317

# For Jaeger
quarkus.opentelemetry.tracer.exporter.jaeger.endpoint=http://localhost:14250
----

Note that you must add a dependency to the OpenTelemetry exporter that you want to work with. 

ifeval::[{doc-show-advanced-features} == true]

At present, Quarkus has support for Jaeger and the OpenTelemetry Protocol Specification (OTLP).

For Jaeger:

[source,xml]
----
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-opentelemetry-exporter-jaeger</artifactId>
</dependency>
----

For OTLP:
[source,xml]
----
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-opentelemetry-exporter-otlp</artifactId>
</dependency>
----

endif::[]

Refer to the https://github.com/quarkusio/quarkus/blob/{quarkus-version}/docs/src/main/asciidoc/opentelemetry.adoc[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:

[source,properties]
----
# Exclude all direct & netty-http endpoints from tracing
quarkus.camel.opentelemetry.exclude-patterns=direct:*,netty-http:*
----


[id="extensions-opentelemetry-additional-camel-quarkus-configuration"]
== Additional Camel Quarkus configuration

[width="100%",cols="80,5,15",options="header"]
|===
| Configuration property | Type | Default


|icon:lock[title=Fixed at build time] [[quarkus.camel.opentelemetry.encoding]]`link:#quarkus.camel.opentelemetry.encoding[quarkus.camel.opentelemetry.encoding]`

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.
| `boolean`
| `false`

|icon:lock[title=Fixed at build time] [[quarkus.camel.opentelemetry.exclude-patterns]]`link:#quarkus.camel.opentelemetry.exclude-patterns[quarkus.camel.opentelemetry.exclude-patterns]`

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/.++*++
| `string`
| 
|===

[.configuration-legend]
{doc-link-icon-lock}[title=Fixed at build time] Configuration property fixed at build time. All other configuration properties are overridable at runtime.

