Skip to content

Latest commit

 

History

History
105 lines (78 loc) · 3.22 KB

File metadata and controls

105 lines (78 loc) · 3.22 KB

Overview

  1. Java specific tracing setup (Java 17+)

General overview

  1. See common/tracing doc

build.gradle.kts

        ...
        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")
        ...

Depencency Injection

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

Register Global

  1. TODO

If using OkHTTP

    @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();
    }

Run Jaeger container

Other Resources

  1. https://github.com/open-telemetry/opentelemetry-java-docs#java-opentelemetry-examples
  2. https://github.com/open-telemetry/opentelemetry-java
  3. https://opentelemetry.io/docs/instrumentation/java/#status-and-releases