DEV Community

Cover image for Manual Add Telemetry jaeger on Java Spring-boot
Teddy Zugana
Teddy Zugana

Posted on

Manual Add Telemetry jaeger on Java Spring-boot

Spring Boot dependencies (manual setup)

If you prefer code-level control:

Add dependency (Maven) Pom

<dependency>
  <groupId>io.opentelemetry.instrumentation</groupId>
  <artifactId>opentelemetry-spring-boot-starter</artifactId>
  <version>2.0.0</version>
</dependency>

<dependency>
  <groupId>io.opentelemetry</groupId>
  <artifactId>opentelemetry-api</artifactId>
</dependency>

<dependency>
  <groupId>io.opentelemetry</groupId>
 <artifactId>opentelemetry-sdk</artifactId>
</dependency>

<dependency>
 <groupId>io.opentelemetry</groupId>
 <artifactId>opentelemetry-exporter-otlp</artifactId>
</dependency>

Enter fullscreen mode Exit fullscreen mode

1) Minimal working example (manual span)


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

@RestController
public class AuthController {

    private final Tracer tracer;

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

    @GetMapping("/login")
    public String login() {

        Span span = tracer.spanBuilder("getLoginAPI").startSpan();

        try (Scope scope = span.makeCurrent()) {

            // Your business logic
            simulateWork();

            span.setAttribute("endpoint", "/login");
            span.setAttribute("custom.tag", "example");

            return "Login success";

        } catch (Exception e) {
            span.recordException(e);
            span.setStatus(io.opentelemetry.api.trace.StatusCode.ERROR);
            throw e;

        } finally {
            span.end(); // VERY IMPORTANT
        }
    }

    private void simulateWork() {
        try {
            Thread.sleep(100);
        } catch (InterruptedException ignored) {}
    }
}
Enter fullscreen mode Exit fullscreen mode

2) Important concepts (don’t skip these)

✅ spanBuilder("getLoginAPI")
This is the span name shown in Jaeger UI

✅ try (Scope scope = span.makeCurrent())
Makes this span the active context
Ensures child spans attach correctly

✅ span.end()
If you forget this → span never appears

✅ Error handling

span.recordException(e);
span.setStatus(StatusCode.ERROR);

Enter fullscreen mode Exit fullscreen mode

This ensures Jaeger marks the trace as failed.

Run And Build The Jar Yout Spring-Boot System Sample After Then:

Run Command Sample :

/opt/jdk-17.0.2/bin/java\
     -Dotel.service.name=service_api \
     -Dotel.traces.exporter=otlp \
     -Dotel.metrics.exporter=none \
     -Dotel.logs.exporter=none \
     -Dotel.exporter.otlp.endpoint=http://127.0.0.1:4317 \
     -Dotel.resource.attributes=deployment.environment=dev \
     -debug -Djava.awt.headless=true\
     -Xmx8G -Xms6G -jar /service_api-1.0.jar 8830

Enter fullscreen mode Exit fullscreen mode

Next Step U need Download Run The Jaeger

1) Download Jaeger

cd /root

wget https://github.com/jaegertracing/jaeger/releases/download/v1.57.0/jaeger-1.57.0-linux-amd64.tar.gz

Enter fullscreen mode Exit fullscreen mode

2) Extract

tar -xvzf jaeger-1.57.0-linux-amd64.tar.gz

Enter fullscreen mode Exit fullscreen mode

This creates:

/root/jaeger-1.57.0-linux-amd64/
Enter fullscreen mode Exit fullscreen mode

3) Run Jaeger (All-in-One + OTLP)

/root/jaeger-1.57.0-linux-amd64/jaeger-all-in-one \
  --collector.otlp.enabled=true
Enter fullscreen mode Exit fullscreen mode

4) Verify it’s running
Open UI:

http://localhost:16686
Enter fullscreen mode Exit fullscreen mode

You should see the Jaeger dashboard to see App Log telemetry Almost Look like Grafana

Acess on http://localhost:16686 Jaeger Dashboard

Top comments (0)