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
Top comments (0)