Type to search.

OpenTracing bridge

Serverless Observability

Elastic Cloud Serverless projects are autoscaled environments, fully managed by Elastic and available on Elastic Cloud.

Availability

  • Generally available

    This functionality is generally available and ready for production usage.

Stack

The Elastic Stack includes Elastic's core products such as Elasticsearch, Kibana, Logstash, and Beats.

Availability

  • Generally available

    This functionality is generally available and ready for production usage.

Unless stated otherwise on the page, this functionality is available when your Elastic Stack is deployed on Elastic Cloud Hosted, Elastic Cloud Enterprise, Elastic Cloud on Kubernetes, and self-managed environments.

This documentation corresponds to the latest patch available for each minor version. If you're not using the latest patch, check the release notes for changes.

APM Agent Java

The Elastic APM Java agent enables you to trace the execution of operations in your Java applications, sending performance metrics and errors to the Elastic APM Server.

Availability

  • Generally available

    This functionality is generally available and ready for production usage.

This documentation corresponds to the latest patch available for each minor version. If you're not using the latest patch, check the release notes for changes.

Note

OpenTracing is discontinued in favor of OpenTelemetry. Consider using the OpenTelemetry bridge instead.
Latest supported OpenTracing version: 0.33 (as of agent and OpenTracing-bridge version 1.9.0)

The Elastic APM OpenTracing bridge allows creating Elastic APM Transactions and Spans, using the OpenTracing API. In other words, it translates the calls to the OpenTracing API to Elastic APM and thus allows for reusing existing instrumentation.

The first span of a service will be converted to an Elastic APM Transaction, subsequent spans are mapped to Elastic APM Span.

The first step in getting started with the OpenTracing API bridge is to declare a dependency to the API:

Xml
<dependency>
    <groupId>co.elastic.apm</groupId>
    <artifactId>apm-opentracing</artifactId>
    <version>${elastic-apm.version}</version>
</dependency>
Groovy
compile "co.elastic.apm:apm-opentracing:$elasticApmVersion"

Replace the version placeholders with the latest version from maven central: Maven Central

Java
import co.elastic.apm.opentracing.ElasticApmTracer;
import io.opentracing.Tracer;

Tracer tracer = new ElasticApmTracer();

Since version 1.22.0, the OpenTracing bridge supports Tracer lookup and initialization through the ServiceLoader mechanism. An example for a system that relies on this capability is tracer-resolver, which is used by various OpenTracing libraries, for example the Apache Camel OpenTracing component. When such is used, no code changes are required, only the addition of dependencies for the OpenTracing library and the Elastic OpenTracing bridge.

Elastic APM defines some tags which are not included in the OpenTracing API but are relevant in the context of Elastic APM.

  • type - sets the type of the transaction/span, for example request, ext or db
  • subtype - sets the subtype of the span, for example http, mysql or jsf
  • action - sets the action related to a span, for example query, execute or render
  • user.id - sets the user id, appears in the "User" tab in the transaction details in the Elastic APM app
  • user.email - sets the user email, appears in the "User" tab in the transaction details in the Elastic APM app
  • user.username - sets the user name, appears in the "User" tab in the transaction details in the Elastic APM app
  • result - sets the result of the transaction. Overrides the default value of success. If the error tag is set to true, the default value is error. Setting http.status_code to 200, for example, implicitly sets the result to HTTP 2xx if not explicitly set otherwise.

Not all features of the OpenTracing API are supported.

This bridge only supports the formats Format.Builtin.TEXT_MAP and Format.Builtin.HTTP_HEADERS. Format.Builtin.BINARY is currently not supported.

Currently, this bridge only supports child_of references. Other references, like follows_from are not supported yet.

The Span.setBaggageItem(String, String) method is not supported. Baggage items are silently dropped.

Only exception logging is supported. Logging an Exception on the OpenTracing span will create an Elastic APM Error. Example:

Java
Exception e = ...
span.log(
    Map.of(
        "event", "error",
        "error.object", e
    )
)

Other logs are silently dropped.