From 68ee47108a808ad22bfa19618107263ac173e72f Mon Sep 17 00:00:00 2001 From: John Watson Date: Mon, 1 Feb 2021 09:24:02 -0800 Subject: [PATCH] Example updates for 0.15.0 (#2611) * WIP on updating examples for 0.15.0 * final updates to 0.15.0 * make the getter static --- examples/build.gradle | 3 ++- .../example/grpc/ExampleConfiguration.java | 2 +- .../example/grpc/HelloWorldClientStream.java | 9 +++---- .../example/grpc/HelloWorldServer.java | 16 ++++++------ examples/http/build.gradle | 5 ++-- .../example/http/ExampleConfiguration.java | 2 +- .../example/jaeger/ExampleConfiguration.java | 22 +++++++++------- examples/metrics/build.gradle | 2 +- .../example/metrics/LongCounterExample.java | 5 ++-- examples/otlp/build.gradle | 10 +++---- .../example/otlp/ExampleConfiguration.java | 16 +++++------- examples/prometheus/build.gradle | 2 +- .../ConfigureSpanProcessorExample.java | 4 +-- .../sdk/example/ConfigureTraceExample.java | 23 +++++++--------- .../example/zipkin/ExampleConfiguration.java | 26 ++++++++++--------- 15 files changed, 71 insertions(+), 76 deletions(-) diff --git a/examples/build.gradle b/examples/build.gradle index d07a28fe50..ba3d61d7cd 100644 --- a/examples/build.gradle +++ b/examples/build.gradle @@ -13,7 +13,8 @@ subprojects { version = "0.1.0-SNAPSHOT" ext { - openTelemetryVersion = "0.14.1" + openTelemetryVersion = "0.15.0" + openTelemetryAlphaVersion = "0.15.0-alpha" grpcVersion = '1.34.1' protobufVersion = '3.11.4' protocVersion = protobufVersion diff --git a/examples/grpc/src/main/java/io/opentelemetry/example/grpc/ExampleConfiguration.java b/examples/grpc/src/main/java/io/opentelemetry/example/grpc/ExampleConfiguration.java index 7f5260459f..cfdd76e6f4 100644 --- a/examples/grpc/src/main/java/io/opentelemetry/example/grpc/ExampleConfiguration.java +++ b/examples/grpc/src/main/java/io/opentelemetry/example/grpc/ExampleConfiguration.java @@ -36,7 +36,7 @@ class ExampleConfiguration { () -> { System.err.println( "*** forcing the Span Exporter to shutdown and process the remaining spans"); - openTelemetrySdk.getTracerManagement().shutdown(); + sdkTracerProvider.shutdown(); System.err.println("*** Trace Exporter shut down"); })); diff --git a/examples/grpc/src/main/java/io/opentelemetry/example/grpc/HelloWorldClientStream.java b/examples/grpc/src/main/java/io/opentelemetry/example/grpc/HelloWorldClientStream.java index ae04da7fe4..7652b12373 100644 --- a/examples/grpc/src/main/java/io/opentelemetry/example/grpc/HelloWorldClientStream.java +++ b/examples/grpc/src/main/java/io/opentelemetry/example/grpc/HelloWorldClientStream.java @@ -21,7 +21,6 @@ import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.StatusCode; import io.opentelemetry.api.trace.Tracer; -import io.opentelemetry.api.trace.attributes.SemanticAttributes; import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator; import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; @@ -31,6 +30,7 @@ import io.opentelemetry.exporter.logging.LoggingSpanExporter; import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.trace.SdkTracerProvider; import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor; +import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import java.util.Arrays; import java.util.List; import java.util.concurrent.TimeUnit; @@ -163,12 +163,11 @@ public class HelloWorldClientStream { } private static OpenTelemetry initOpenTelemetry(LoggingSpanExporter exporter) { - // install the W3C Trace Context propagator - // Get the tracer management instance - SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder().build(); // Set to process the the spans by the LogExporter - sdkTracerProvider.addSpanProcessor(SimpleSpanProcessor.builder(exporter).build()); + SdkTracerProvider sdkTracerProvider = + SdkTracerProvider.builder().addSpanProcessor(SimpleSpanProcessor.create(exporter)).build(); + // install the W3C Trace Context propagator return OpenTelemetrySdk.builder() .setTracerProvider(sdkTracerProvider) .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance())) diff --git a/examples/grpc/src/main/java/io/opentelemetry/example/grpc/HelloWorldServer.java b/examples/grpc/src/main/java/io/opentelemetry/example/grpc/HelloWorldServer.java index 126583eeb5..e0447be9d2 100644 --- a/examples/grpc/src/main/java/io/opentelemetry/example/grpc/HelloWorldServer.java +++ b/examples/grpc/src/main/java/io/opentelemetry/example/grpc/HelloWorldServer.java @@ -34,15 +34,8 @@ public class HelloWorldServer { // lifecycle. private static final OpenTelemetry openTelemetry = ExampleConfiguration.initOpenTelemetry(); - private Server server; - - private final Tracer tracer = - openTelemetry.getTracer("io.opentelemetry.example.HelloWorldServer"); - private final TextMapPropagator textFormat = - openTelemetry.getPropagators().getTextMapPropagator(); - // Extract the Distributed Context from the gRPC metadata - TextMapPropagator.Getter getter = + private static final TextMapPropagator.Getter getter = new TextMapPropagator.Getter<>() { @Override public Iterable keys(Metadata carrier) { @@ -59,6 +52,13 @@ public class HelloWorldServer { } }; + private Server server; + + private final Tracer tracer = + openTelemetry.getTracer("io.opentelemetry.example.HelloWorldServer"); + private final TextMapPropagator textFormat = + openTelemetry.getPropagators().getTextMapPropagator(); + private void start() throws IOException { /* The port on which the server should run */ diff --git a/examples/http/build.gradle b/examples/http/build.gradle index 709fc8aa82..3d6bbb9191 100644 --- a/examples/http/build.gradle +++ b/examples/http/build.gradle @@ -7,10 +7,9 @@ ext.moduleName = "io.opentelemetry.examples.http" dependencies { compile("io.opentelemetry:opentelemetry-api") - compile("io.opentelemetry:opentelemetry-semconv") + compile("io.opentelemetry:opentelemetry-semconv:${openTelemetryAlphaVersion}") compile("io.opentelemetry:opentelemetry-sdk") - compile("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure") + compile("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure:${openTelemetryAlphaVersion}") compile("io.opentelemetry:opentelemetry-exporter-logging") compile "io.grpc:grpc-context" - } diff --git a/examples/http/src/main/java/io/opentelemetry/example/http/ExampleConfiguration.java b/examples/http/src/main/java/io/opentelemetry/example/http/ExampleConfiguration.java index bdacc416b2..1a14ccbaee 100644 --- a/examples/http/src/main/java/io/opentelemetry/example/http/ExampleConfiguration.java +++ b/examples/http/src/main/java/io/opentelemetry/example/http/ExampleConfiguration.java @@ -37,7 +37,7 @@ class ExampleConfiguration { .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance())) .build(); - Runtime.getRuntime().addShutdownHook(new Thread(() -> sdk.getTracerManagement().shutdown())); + Runtime.getRuntime().addShutdownHook(new Thread(sdkTracerProvider::shutdown)); return sdk; } } diff --git a/examples/jaeger/src/main/java/io/opentelemetry/example/jaeger/ExampleConfiguration.java b/examples/jaeger/src/main/java/io/opentelemetry/example/jaeger/ExampleConfiguration.java index cd3a9e6395..9c764712cd 100644 --- a/examples/jaeger/src/main/java/io/opentelemetry/example/jaeger/ExampleConfiguration.java +++ b/examples/jaeger/src/main/java/io/opentelemetry/example/jaeger/ExampleConfiguration.java @@ -8,10 +8,13 @@ package io.opentelemetry.example.jaeger; import io.grpc.ManagedChannel; import io.grpc.ManagedChannelBuilder; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.common.Attributes; import io.opentelemetry.exporter.jaeger.JaegerGrpcSpanExporter; import io.opentelemetry.sdk.OpenTelemetrySdk; +import io.opentelemetry.sdk.resources.Resource; import io.opentelemetry.sdk.trace.SdkTracerProvider; import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor; +import io.opentelemetry.semconv.resource.attributes.ResourceAttributes; import java.util.concurrent.TimeUnit; /** @@ -34,23 +37,24 @@ class ExampleConfiguration { // Export traces to Jaeger JaegerGrpcSpanExporter jaegerExporter = JaegerGrpcSpanExporter.builder() - .setServiceName("otel-jaeger-example") .setChannel(jaegerChannel) .setTimeout(30, TimeUnit.SECONDS) .build(); + Resource serviceNameResource = + Resource.create(Attributes.of(ResourceAttributes.SERVICE_NAME, "otel-jaeger-example")); + // Set to process the spans by the Jaeger Exporter - OpenTelemetrySdk openTelemetry = - OpenTelemetrySdk.builder() - .setTracerProvider( - SdkTracerProvider.builder() - .addSpanProcessor(SimpleSpanProcessor.create(jaegerExporter)) - .build()) + SdkTracerProvider tracerProvider = + SdkTracerProvider.builder() + .addSpanProcessor(SimpleSpanProcessor.create(jaegerExporter)) + .setResource(Resource.getDefault().merge(serviceNameResource)) .build(); + OpenTelemetrySdk openTelemetry = + OpenTelemetrySdk.builder().setTracerProvider(tracerProvider).build(); // it's always a good idea to shut down the SDK cleanly at JVM exit. - Runtime.getRuntime() - .addShutdownHook(new Thread(() -> openTelemetry.getTracerManagement().shutdown())); + Runtime.getRuntime().addShutdownHook(new Thread(tracerProvider::shutdown)); return openTelemetry; } diff --git a/examples/metrics/build.gradle b/examples/metrics/build.gradle index 0d702a3aa2..06ee0a600b 100644 --- a/examples/metrics/build.gradle +++ b/examples/metrics/build.gradle @@ -7,5 +7,5 @@ ext.moduleName = "io.opentelemetry.examples.metrics" dependencies { compile("io.opentelemetry:opentelemetry-api") - compile("io.opentelemetry:opentelemetry-api-metrics:${openTelemetryVersion}-alpha") + compile("io.opentelemetry:opentelemetry-api-metrics:${openTelemetryAlphaVersion}") } diff --git a/examples/metrics/src/main/java/io/opentelemetry/example/metrics/LongCounterExample.java b/examples/metrics/src/main/java/io/opentelemetry/example/metrics/LongCounterExample.java index a8465b88d7..d51fb16a1d 100644 --- a/examples/metrics/src/main/java/io/opentelemetry/example/metrics/LongCounterExample.java +++ b/examples/metrics/src/main/java/io/opentelemetry/example/metrics/LongCounterExample.java @@ -3,9 +3,9 @@ package io.opentelemetry.example.metrics; import io.opentelemetry.api.DefaultOpenTelemetry; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.common.Labels; +import io.opentelemetry.api.metrics.BoundLongCounter; import io.opentelemetry.api.metrics.GlobalMetricsProvider; import io.opentelemetry.api.metrics.LongCounter; -import io.opentelemetry.api.metrics.LongCounter.BoundLongCounter; import io.opentelemetry.api.metrics.Meter; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.Span.Kind; @@ -16,8 +16,7 @@ import java.io.File; import javax.swing.filechooser.FileSystemView; /** - * Example of using {@link LongCounter} and {@link LongCounter.BoundLongCounter} to count searched - * directories. + * Example of using {@link LongCounter} and {@link BoundLongCounter} to count searched directories. */ public class LongCounterExample { private static final OpenTelemetry openTelemetry = DefaultOpenTelemetry.builder().build(); diff --git a/examples/otlp/build.gradle b/examples/otlp/build.gradle index 78d249fd7b..4f221368b0 100644 --- a/examples/otlp/build.gradle +++ b/examples/otlp/build.gradle @@ -9,11 +9,11 @@ dependencies { implementation("io.opentelemetry:opentelemetry-api") implementation("io.opentelemetry:opentelemetry-sdk") implementation("io.opentelemetry:opentelemetry-exporter-otlp") - //pull in the autoconfigure extension so we parse the `otel.resource.attributes` system property used in the example. - implementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure") - implementation("io.opentelemetry:opentelemetry-api-metrics:${openTelemetryVersion}-alpha") - implementation("io.opentelemetry:opentelemetry-sdk-metrics:${openTelemetryVersion}-alpha") - implementation("io.opentelemetry:opentelemetry-exporter-otlp-metrics:${openTelemetryVersion}-alpha") + //pull in the autoconfigure extension so we parse the `otel.resource.attributes` system property used in the example. + implementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure:${openTelemetryAlphaVersion}") + implementation("io.opentelemetry:opentelemetry-api-metrics:${openTelemetryAlphaVersion}") + implementation("io.opentelemetry:opentelemetry-sdk-metrics:${openTelemetryAlphaVersion}") + implementation("io.opentelemetry:opentelemetry-exporter-otlp-metrics:${openTelemetryAlphaVersion}") implementation "io.grpc:grpc-netty-shaded" } diff --git a/examples/otlp/src/main/java/io/opentelemetry/example/otlp/ExampleConfiguration.java b/examples/otlp/src/main/java/io/opentelemetry/example/otlp/ExampleConfiguration.java index e6e8185f04..727939240c 100644 --- a/examples/otlp/src/main/java/io/opentelemetry/example/otlp/ExampleConfiguration.java +++ b/examples/otlp/src/main/java/io/opentelemetry/example/otlp/ExampleConfiguration.java @@ -37,17 +37,15 @@ public class ExampleConfiguration { .setScheduleDelay(100, TimeUnit.MILLISECONDS) .build(); + SdkTracerProvider tracerProvider = + SdkTracerProvider.builder() + .addSpanProcessor(spanProcessor) + .setResource(Resource.getDefault()) + .build(); OpenTelemetrySdk openTelemetrySdk = - OpenTelemetrySdk.builder() - .setTracerProvider( - SdkTracerProvider.builder() - .addSpanProcessor(spanProcessor) - .setResource(Resource.getDefault()) - .build()) - .buildAndRegisterGlobal(); + OpenTelemetrySdk.builder().setTracerProvider(tracerProvider).buildAndRegisterGlobal(); - Runtime.getRuntime() - .addShutdownHook(new Thread(() -> openTelemetrySdk.getTracerManagement().shutdown())); + Runtime.getRuntime().addShutdownHook(new Thread(tracerProvider::shutdown)); return openTelemetrySdk; } diff --git a/examples/prometheus/build.gradle b/examples/prometheus/build.gradle index d68945c59d..e1b7c22368 100644 --- a/examples/prometheus/build.gradle +++ b/examples/prometheus/build.gradle @@ -8,7 +8,7 @@ ext.moduleName = "io.opentelemetry.examples.prometheus" dependencies { compile("io.opentelemetry:opentelemetry-api") compile("io.opentelemetry:opentelemetry-sdk") - compile("io.opentelemetry:opentelemetry-exporter-prometheus") + compile("io.opentelemetry:opentelemetry-exporter-prometheus:${openTelemetryAlphaVersion}") compile("io.prometheus:simpleclient:0.8.1") compile("io.prometheus:simpleclient_httpserver:0.8.1") } diff --git a/examples/sdk-usage/src/main/java/io/opentelemetry/sdk/example/ConfigureSpanProcessorExample.java b/examples/sdk-usage/src/main/java/io/opentelemetry/sdk/example/ConfigureSpanProcessorExample.java index 1dbf3f9eaa..24ad33b332 100644 --- a/examples/sdk-usage/src/main/java/io/opentelemetry/sdk/example/ConfigureSpanProcessorExample.java +++ b/examples/sdk-usage/src/main/java/io/opentelemetry/sdk/example/ConfigureSpanProcessorExample.java @@ -8,7 +8,6 @@ package io.opentelemetry.sdk.example; import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.exporter.logging.LoggingSpanExporter; import io.opentelemetry.sdk.OpenTelemetrySdk; -import io.opentelemetry.sdk.trace.SdkTracerManagement; import io.opentelemetry.sdk.trace.SdkTracerProvider; import io.opentelemetry.sdk.trace.SpanProcessor; import io.opentelemetry.sdk.trace.export.BatchSpanProcessor; @@ -21,7 +20,7 @@ public class ConfigureSpanProcessorExample { private static final LoggingSpanExporter exporter = new LoggingSpanExporter(); private static final OpenTelemetrySdk openTelemetry = OpenTelemetrySdk.builder().build(); // Get the Tracer Management interface - private static final SdkTracerManagement tracerManagement = openTelemetry.getTracerManagement(); + private static final SdkTracerProvider tracerManagement = openTelemetry.getSdkTracerProvider(); // Acquire a tracer private static final Tracer tracer = openTelemetry.getTracer("ConfigureSpanProcessorExample"); @@ -64,7 +63,6 @@ public class ConfigureSpanProcessorExample { // Configure the batch spans processor. This span processor exports span in batches. BatchSpanProcessor batchSpansProcessor = BatchSpanProcessor.builder(exporter) - .setExportOnlySampled(true) // send to the exporter only spans that have been sampled .setMaxExportBatchSize(512) // set the maximum batch size to use .setMaxQueueSize(2048) // set the queue size. This must be >= the export batch size .setExporterTimeout( diff --git a/examples/sdk-usage/src/main/java/io/opentelemetry/sdk/example/ConfigureTraceExample.java b/examples/sdk-usage/src/main/java/io/opentelemetry/sdk/example/ConfigureTraceExample.java index 7e629e839b..78bd6b32c4 100644 --- a/examples/sdk-usage/src/main/java/io/opentelemetry/sdk/example/ConfigureTraceExample.java +++ b/examples/sdk-usage/src/main/java/io/opentelemetry/sdk/example/ConfigureTraceExample.java @@ -17,6 +17,7 @@ import io.opentelemetry.sdk.trace.config.TraceConfig; import io.opentelemetry.sdk.trace.data.LinkData; import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor; import io.opentelemetry.sdk.trace.samplers.Sampler; +import io.opentelemetry.sdk.trace.samplers.SamplingDecision; import io.opentelemetry.sdk.trace.samplers.SamplingResult; import java.util.List; @@ -71,10 +72,7 @@ class ConfigureTraceExample { // - alwaysOn: it samples all traces // - alwaysOff: it rejects all traces // - probability: it samples traces based on the probability passed in input - TraceConfig alwaysOff = TraceConfig.builder().setSampler(Sampler.alwaysOff()).build(); - TraceConfig alwaysOn = TraceConfig.builder().setSampler(Sampler.alwaysOn()).build(); - TraceConfig probability = - TraceConfig.builder().setSampler(Sampler.traceIdRatioBased(0.5)).build(); + Sampler traceIdRatioBased = Sampler.traceIdRatioBased(0.5); // We build an SDK with the alwaysOff sampler. openTelemetrySdk = @@ -82,7 +80,7 @@ class ConfigureTraceExample { .setTracerProvider( SdkTracerProvider.builder() .addSpanProcessor(SimpleSpanProcessor.create(new LoggingSpanExporter())) - .setTraceConfig(alwaysOff) + .setSampler(Sampler.alwaysOff()) .build()) .build(); @@ -98,7 +96,7 @@ class ConfigureTraceExample { .setTracerProvider( SdkTracerProvider.builder() .addSpanProcessor(SimpleSpanProcessor.create(new LoggingSpanExporter())) - .setTraceConfig(alwaysOn) + .setSampler(Sampler.alwaysOn()) .build()) .build(); printTraceConfig(openTelemetrySdk); @@ -115,7 +113,7 @@ class ConfigureTraceExample { .setTracerProvider( SdkTracerProvider.builder() .addSpanProcessor(SimpleSpanProcessor.create(new LoggingSpanExporter())) - .setTraceConfig(probability) + .setSampler(traceIdRatioBased) .build()) .build(); printTraceConfig(openTelemetrySdk); @@ -142,9 +140,7 @@ class ConfigureTraceExample { Attributes attributes, List parentLinks) { return SamplingResult.create( - name.contains("SAMPLE") - ? SamplingResult.Decision.RECORD_AND_SAMPLE - : SamplingResult.Decision.DROP); + name.contains("SAMPLE") ? SamplingDecision.RECORD_AND_SAMPLE : SamplingDecision.DROP); } @Override @@ -154,13 +150,12 @@ class ConfigureTraceExample { } // Add MySampler to the Trace Configuration - TraceConfig mySampler = TraceConfig.builder().setSampler(new MySampler()).build(); openTelemetrySdk = OpenTelemetrySdk.builder() .setTracerProvider( SdkTracerProvider.builder() .addSpanProcessor(SimpleSpanProcessor.create(new LoggingSpanExporter())) - .setTraceConfig(mySampler) + .setSampler(new MySampler()) .build()) .build(); printTraceConfig(openTelemetrySdk); @@ -181,7 +176,7 @@ class ConfigureTraceExample { } private static void printTraceConfig(OpenTelemetrySdk sdk) { - TraceConfig config = sdk.getTracerManagement().getActiveTraceConfig(); + TraceConfig config = sdk.getSdkTracerProvider().getActiveTraceConfig(); System.err.println("=================================="); System.err.print("Max number of attributes: "); System.err.println(config.getMaxNumberOfAttributes()); @@ -194,6 +189,6 @@ class ConfigureTraceExample { System.err.print("Max number of links: "); System.err.println(config.getMaxNumberOfLinks()); System.err.print("Sampler: "); - System.err.println(config.getSampler().getDescription()); + System.err.println(sdk.getSdkTracerProvider().getSampler().getDescription()); } } diff --git a/examples/zipkin/src/main/java/io/opentelemetry/example/zipkin/ExampleConfiguration.java b/examples/zipkin/src/main/java/io/opentelemetry/example/zipkin/ExampleConfiguration.java index 0400225d38..7843c7d008 100644 --- a/examples/zipkin/src/main/java/io/opentelemetry/example/zipkin/ExampleConfiguration.java +++ b/examples/zipkin/src/main/java/io/opentelemetry/example/zipkin/ExampleConfiguration.java @@ -6,10 +6,13 @@ package io.opentelemetry.example.zipkin; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.common.Attributes; import io.opentelemetry.exporter.zipkin.ZipkinSpanExporter; import io.opentelemetry.sdk.OpenTelemetrySdk; +import io.opentelemetry.sdk.resources.Resource; import io.opentelemetry.sdk.trace.SdkTracerProvider; import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor; +import io.opentelemetry.semconv.resource.attributes.ResourceAttributes; /** * All SDK management takes place here, away from the instrumentation code, which should only access @@ -26,23 +29,22 @@ public class ExampleConfiguration { static OpenTelemetry initializeOpenTelemetry(String ip, int port) { String httpUrl = String.format("http://%s:%s", ip, port); ZipkinSpanExporter zipkinExporter = - ZipkinSpanExporter.builder() - .setEndpoint(httpUrl + ENDPOINT_V2_SPANS) - .setServiceName(SERVICE_NAME) - .build(); + ZipkinSpanExporter.builder().setEndpoint(httpUrl + ENDPOINT_V2_SPANS).build(); + + Resource serviceNameResource = + Resource.create(Attributes.of(ResourceAttributes.SERVICE_NAME, SERVICE_NAME)); // Set to process the spans by the Zipkin Exporter + SdkTracerProvider tracerProvider = + SdkTracerProvider.builder() + .addSpanProcessor(SimpleSpanProcessor.create(zipkinExporter)) + .setResource(Resource.getDefault().merge(serviceNameResource)) + .build(); OpenTelemetrySdk openTelemetry = - OpenTelemetrySdk.builder() - .setTracerProvider( - SdkTracerProvider.builder() - .addSpanProcessor(SimpleSpanProcessor.create(zipkinExporter)) - .build()) - .buildAndRegisterGlobal(); + OpenTelemetrySdk.builder().setTracerProvider(tracerProvider).buildAndRegisterGlobal(); // add a shutdown hook to shut down the SDK - Runtime.getRuntime() - .addShutdownHook(new Thread(() -> openTelemetry.getTracerManagement().shutdown())); + Runtime.getRuntime().addShutdownHook(new Thread(tracerProvider::shutdown)); // return the configured instance so it can be used for instrumentation. return openTelemetry;