update the Jaeger example to cleanly separate SDK and API usage (#2531)

* update the Jaeger example to cleanly separate SDK and API usage

* formatting
This commit is contained in:
John Watson 2021-01-14 19:42:17 -08:00 committed by GitHub
parent 933fa5490e
commit e9c71e590a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 67 additions and 50 deletions

View File

@ -0,0 +1,57 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.example.jaeger;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.exporter.jaeger.JaegerGrpcSpanExporter;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
import java.util.concurrent.TimeUnit;
/**
* All SDK management takes place here, away from the instrumentation code, which should only access
* the OpenTelemetry APIs.
*/
class ExampleConfiguration {
/**
* Initialize an OpenTelemetry SDK with a Jaeger exporter and a SimpleSpanProcessor.
*
* @param jaegerHost The host of your Jaeger instance.
* @param jaegerPort the port of your Jaeger instance.
* @return A ready-to-use {@link OpenTelemetry} instance.
*/
static OpenTelemetry initOpenTelemetry(String jaegerHost, int jaegerPort) {
// Create a channel towards Jaeger end point
ManagedChannel jaegerChannel =
ManagedChannelBuilder.forAddress(jaegerHost, jaegerPort).usePlaintext().build();
// Export traces to Jaeger
JaegerGrpcSpanExporter jaegerExporter =
JaegerGrpcSpanExporter.builder()
.setServiceName("otel-jaeger-example")
.setChannel(jaegerChannel)
.setTimeout(30, TimeUnit.SECONDS)
.build();
// Set to process the spans by the Jaeger Exporter
OpenTelemetrySdk openTelemetry =
OpenTelemetrySdk.builder()
.setTracerProvider(
SdkTracerProvider.builder()
.addSpanProcessor(SimpleSpanProcessor.create(jaegerExporter))
.build())
.build();
// it's always a good idea to shut down the SDK cleanly at JVM exit.
Runtime.getRuntime()
.addShutdownHook(new Thread(() -> openTelemetry.getTracerManagement().shutdown()));
return openTelemetry;
}
}

View File

@ -1,48 +1,15 @@
package io.opentelemetry.example.jaeger;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.exporter.jaeger.JaegerGrpcSpanExporter;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.trace.SdkTracerManagement;
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
import java.util.concurrent.TimeUnit;
public class JaegerExample {
// OTel API
private final SdkTracerManagement sdkTracerManagement;
private final Tracer tracer;
public JaegerExample(String ip, int port) {
OpenTelemetrySdk sdk = initOpenTelemetry(ip, port);
this.sdkTracerManagement = sdk.getTracerManagement();
tracer = sdk.getTracer("io.opentelemetry.example.JaegerExample");
}
private OpenTelemetrySdk initOpenTelemetry(String ip, int port) {
// Create a channel towards Jaeger end point
ManagedChannel jaegerChannel =
ManagedChannelBuilder.forAddress(ip, port).usePlaintext().build();
// Export traces to Jaeger
// Export traces to Jaeger
JaegerGrpcSpanExporter jaegerExporter =
JaegerGrpcSpanExporter.builder()
.setServiceName("otel-jaeger-example")
.setChannel(jaegerChannel)
.setTimeout(30, TimeUnit.SECONDS)
.build();
// Set to process the spans by the Jaeger Exporter
return OpenTelemetrySdk.builder()
.setTracerProvider(
SdkTracerProvider.builder()
.addSpanProcessor(SimpleSpanProcessor.create(jaegerExporter))
.build())
.build();
public JaegerExample(OpenTelemetry openTelemetry) {
tracer = openTelemetry.getTracer("io.opentelemetry.example.JaegerExample");
}
private void myWonderfulUseCase() {
@ -63,33 +30,26 @@ public class JaegerExample {
}
}
// graceful shutdown
public void shutdown() {
// note: this doesn't wait for everything to get cleaned up. We need an SDK update to enable
// that.
sdkTracerManagement.shutdown();
}
public static void main(String[] args) {
// Parsing the input
if (args.length < 2) {
System.out.println("Missing [hostname] [port]");
System.exit(1);
}
String ip = args[0];
int port = Integer.parseInt(args[1]);
String jaegerHostName = args[0];
int jaegerPort = Integer.parseInt(args[1]);
// it is important to initialize your SDK as early as possible in your application's lifecycle
OpenTelemetry openTelemetry =
ExampleConfiguration.initOpenTelemetry(jaegerHostName, jaegerPort);
// Start the example
JaegerExample example = new JaegerExample(ip, port);
example.initOpenTelemetry(ip, port);
JaegerExample example = new JaegerExample(openTelemetry);
// generate a few sample spans
for (int i = 0; i < 10; i++) {
example.myWonderfulUseCase();
}
// Shutdown example
example.shutdown();
System.out.println("Bye");
}
}