OpenTelemetry Java Tracing Guide

OpenTelemetry is an open-source, cross-language toolkit for instrumenting, collecting, and observing open-source, cloud, and microservice applications. This guide provides an overview of OpenTelemetry Java Tracing.

Getting Started

Before you start, make sure you have Java installed on your system. You can download it from Oracle's official website.

Setting Up Your Project

  1. Create a new Java project using your preferred IDE or command line.
  2. Add the OpenTelemetry dependencies to your project's build file. For Maven, add the following to your pom.xml:
<dependencies>
    <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-api</artifactId>
        <version>1.10.0</version>
    </dependency>
    <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-sdk</artifactId>
        <version>1.10.0</version>
    </dependency>
    <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-exporter-jaeger</artifactId>
        <version>1.10.0</version>
    </dependency>
</dependencies>

For Gradle, add the following to your build.gradle:

dependencies {
    implementation 'io.opentelemetry:opentelemetry-api:1.10.0'
    implementation 'io.opentelemetry:opentelemetry-sdk:1.10.0'
    implementation 'io.opentelemetry:opentelemetry-exporter-jaeger:1.10.0'
}
  1. Configure your project to use the Jaeger exporter by adding the following code to your main application class:
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.trace.export.JaegerGrpcSpanExporter;

public class OpenTelemetryExample {
    public static void main(String[] args) {
        JaegerGrpcSpanExporter jaegerExporter = JaegerGrpcSpanExporter.builder().build();
        OpenTelemetrySdk openTelemetry = OpenTelemetrySdk.builder().addSpanProcessor(jaegerExporter).buildAndRegisterGlobal();
        Tracer tracer = openTelemetry.getTracer("my-application");

        // Your application code here
    }
}

Instrumenting Your Application

To instrument your application, you can use OpenTelemetry's API to create spans and attributes. Here's an example of how to instrument a simple HTTP client:

import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.context.Context;

public class HttpClient {
    private final Tracer tracer;

    public HttpClient(Tracer tracer) {
        this.tracer = tracer;
    }

    public void sendRequest(String url) {
        Context context = Context.current();
        Span span = tracer.spanBuilder("send_request").startSpan(context);
        try {
            // Send the HTTP request here
        } finally {
            span.end();
        }
    }
}

For more detailed information on instrumenting your application, refer to the OpenTelemetry Java documentation.

Further Reading

Jaeger Logo