This version is still in development and is not considered stable yet. For the latest stable version, please use Micrometer Tracing 1.4.1!

Tracing support

Purpose

The problem of tracing is not new. Application developers have been creating ways to track the state of their applications for a long time. For much of that time, developers had to create the necessary tracing framework themselves.

In 2016, the Spring Cloud team created a tracing library that could help a lot of developers. It was called Spring Cloud Sleuth. The Spring team realized that tracing could be separated from Spring Cloud and created the Micrometer Tracing project, which is, essentially, a Spring-agnostic copy of Spring Cloud Sleuth. Micrometer Tracing had its 1.0.0 GA release in November 2022 and has been getting steadily better ever since.

Micrometer Tracing provides a simple facade for the most popular tracer libraries, letting you instrument your JVM-based application code without vendor lock-in. It is designed to add little to no overhead to your tracing collection activity while maximizing the portability of your tracing effort.

It also provides a tracing extension to Micrometer’s ObservationHandler (from Micrometer 1.10.0). Whenever an Observation is used, a corresponding span is created, started, stopped and reported.

Installing

Micrometer Tracing comes with a Bill of Materials (BOM), which is a project that contains all the project versions for you.

The following example shows the required dependency in Gradle:

implementation platform('io.micrometer:micrometer-tracing-bom:latest.release')
implementation 'io.micrometer:micrometer-tracing'

The following example shows the required dependency in Maven:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-tracing-bom</artifactId>
            <version>${micrometer-tracing.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
      <groupId>io.micrometer</groupId>
      <artifactId>micrometer-tracing</artifactId>
    </dependency>
</dependencies>

You should add a tracing bridge, such as micrometer-tracing-bridge-brave or micrometer-tracing-bridge-otel and span exporters / reporters. When you add a bridge, the micrometer-tracing library is added transitively.