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:
parent
933fa5490e
commit
e9c71e590a
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue