= Geronimo OpenTracing

Geronimo OpenTracing provides an OpenTracing implementation and a Microprofile OpenTracing implementation at once.

NOTE: sampling is not yet supported because it leads to push inconsistent spans to the backend, however you can always specialize (CDI)
your `FinishSpan` observer to implement it if desired.

== Configuration

NOTE: if you are using Microprofile Config it is used, otherwise it uses system properties.

|===
| Key | Description | Default
|geronimo.opentracing.filter.active|Should OpenTracing be activated|true
|geronimo.opentracing.filter.forcedTracing.urls|Urls for which the tracking should be activated automatically. The urls are actually the requets uri minus the context path.|-
|geronimo.opentracing.filter.skippedTracing.urls|Urls for which the tracking should be skipped.|-
|geronimo.opentracing.filter.skippedTracing.matcherType|Type of matcher for the url, default is `prefix` which means a `startsWith` is used on the url but you can also use `regex` which compiles the url as a `Pattern`|prefix
|geronimo.opentracing.filter.forcedTracing.matcherType|Type of matcher for the url, default is `prefix` which means a `startsWith` is used on the url but you can also use `regex` which compiles the url as a `Pattern`|prefix
|geronimo.opentracing.filter.forcedTracing.skipDefaultTags|Should `HTTP_METHOD`, `HTTP_URL` not be added to tags|false
|geronimo.opentracing.server.filter.request.skip.<endpoint class>_<endpoint method>|Should server instrumentation be ignored|false
|geronimo.opentracing.server.filter.request.skip|Should server instrumentation be ignored (if previous is not set)|false
|geronimo.opentracing.server.filter.request.skipDefaultTags|Should `HTTP_METHOD`, `HTTP_URL` not be added to tags|false
|geronimo.opentracing.server.filter.request.operationName.usePath|Should the operationName use the `@Path` annotations instead of class names.|false
|geronimo.opentracing.client.filter.request.skip|Should client instrumentation be ignored|false
|geronimo.opentracing.client.filter.request.skipDefaultTags|Should `HTTP_METHOD`, `HTTP_URL` not be added to tags|false
|geronimo.opentracing.client.filter.request.skipPeerTags|Should `PEER_HOSTNAME`, `PEER_PORT` not be added to tags|false
|geronimo.opentracing.propagation.headers.parentSpanId|Name of the header used to host the parent spanId value|`X-B3-ParentSpanId`
|geronimo.opentracing.propagation.headers.spanId|Name of the header used to host the spanId value|`X-B3-SpanId`
|geronimo.opentracing.propagation.headers.traceId|Name of the header used to host the traceId value|`X-B3-TraceId`
|geronimo.opentracing.propagation.headers.baggagePrefix|Prefix of headers used to host the baggage values|`baggage-`
|geronimo.opentracing.id.generator|`counter` (to generate longs), `uuid` (to generate random uuids) or `hex` (to use the hexa representation of the uuid generator). Specifies which kind of trace and span id are in use.|counter
|geronimo.opentracing.id.generator.hex.prefix|For hex generator, a prefix to prepend to all ids.|-
|geronimo.opentracing.span.converter.zipkin.active|Should spans converted to a zipkin representation. True until there is a standard opentracing format.|true
|geronimo.opentracing.span.converter.zipkin.serviceName|The local serviceName.|hostname-jvmid
|geronimo.opentracing.span.converter.zipkin.logger.active|Should a logger named `org.apache.geronimo.opentracing.zipkin` log each span as a Zipkin JSON. This allows to use a logger implementation to push the spans to any backend (like log4j2 kafka appender). It uses JUL as a facade.|true
|geronimo.opentracing.span.converter.zipkin.logger.wrapAsList|Should zipkin JSON be logged wrapped in a list.|true
|===

== ExecutorServices

To monitor a CDI executor service, you can decorate it with `@TracedExecutorService`.
