- Java specific tracing setup (Java 17+)
- See common/tracing doc
...
implementation("io.opentelemetry:opentelemetry-api")
implementation("io.opentelemetry:opentelemetry-context")
implementation("io.opentelemetry:opentelemetry-exporter-otlp")
implementation("io.opentelemetry:opentelemetry-exporters-jaeger")
implementation("io.opentelemetry:opentelemetry-sdk")
implementation("io.opentelemetry:opentelemetry-sdk-logs")
implementation("io.opentelemetry:opentelemetry-sdk-trace")
implementation("io.opentelemetry:opentelemetry-semconv")
...
private static final String DEFAULT_JAEGER_ENDPOINT = "http://localhost:4317";
private final String serviceName = "..."; // TODO: pass into this guice module
...
@Provides
@Singleton
OpenTelemetry openTelemetry() {
final String jaegerEndpoint = DEFAULT_JAEGER_ENDPOINT;
OtlpGrpcSpanExporter otlpExporter =
OtlpGrpcSpanExporter.builder()
.setEndpoint(jaegerEndpoint) // eg. you can default to DEFAULT_JAEGER_ENDPOINT
.setTimeout(30, TimeUnit.SECONDS)
.build();
Resource serviceNameResource =
Resource.create(Attributes.of(ResourceAttributes.SERVICE_NAME, serviceName));
SdkTracerProvider tracerProvider =
SdkTracerProvider.builder()
.addSpanProcessor(BatchSpanProcessor.builder(otlpExporter).build())
.setResource(Resource.getDefault().merge(serviceNameResource))
.build();
OpenTelemetrySdk openTelemetry =
OpenTelemetrySdk.builder()
.setPropagators(
ContextPropagators.create(W3CTraceContextPropagator.getInstance()))
.setTracerProvider(tracerProvider)
.build();
Runtime.getRuntime().addShutdownHook(new Thread(tracerProvider::close));
return openTelemetry;
}
@Provides
@Singleton
Tracer tracer(OpenTelemetry openTelemetry) {
return openTelemetry.getTracer(tracerName);
}
- TODO
@Provides
@Singleton
ContextPropagators contextPropagators(OpenTelemetry openTelemetry) {
return openTelemetry.getPropagators();
}
@Provides
@Singleton
OkTracingInterceptor okTracingInterceptor(
ContextPropagators contextPropagators, Tracer tracer) {
return OkTracingInterceptor.builder()
.propagators(contextPropagators)
.tracer(tracer)
.build();
}
- https://github.com/open-telemetry/opentelemetry-java-docs#java-opentelemetry-examples
- https://github.com/open-telemetry/opentelemetry-java
- https://opentelemetry.io/docs/instrumentation/java/#status-and-releases