VOOZH about

URL: https://dev.to/kevinmel2000/manual-add-telemetry-jaeger-on-java-spring-boot-2jfn

⇱ Manual Add Telemetry jaeger on Java Spring-boot - DEV Community


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>

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) {}
 }
}

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);

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

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

2) Extract

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

This creates:

/root/jaeger-1.57.0-linux-amd64/

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

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

4) Verify it’s running
Open UI:

http://localhost:16686

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

Acess on http://localhost:16686 Jaeger Dashboard