<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-api</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk</artifactId>
<version>1.4.0</version>
</dependency>
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
public class InstrumentationExample {
private static final Tracer tracer = initTracer();
private static Tracer initTracer() {
SdkTracerProvider tracerProvider = SdkTracerProvider.builder().build();
tracerProvider.addSpanProcessor(SimpleSpanProcessor.create(new LoggingExporter()));
OpenTelemetrySdk openTelemetrySdk = OpenTelemetrySdk.builder()
.setTracerProvider(tracerProvider)
.setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance()))
.build();
OpenTelemetry.set(openTelemetrySdk);
return openTelemetrySdk.getTracer("instrumentation-example");
}
}
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.context.Scope;
public class InstrumentedClass {
private static final Tracer tracer = OpenTelemetry.getTracer("instrumentation-example");
public void myMethod() {
Span span = tracer.spanBuilder("myMethod").startSpan();
try (Scope scope = span.makeCurrent()) {
// ...
} finally {
span.end();
}
}
}
import io.opentelemetry.sdk.trace.export.SpanExporter;
public class LoggingExporter implements SpanExporter {
@Override
public CompletableResultCode export(Collection<SpanData> spans) {
for (SpanData span : spans) {
System.out.println("Exporting span: " + span);
}
return CompletableResultCode.ofSuccess();
}
}