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;
|
package io.opentelemetry.example.jaeger;
|
||||||
|
|
||||||
import io.grpc.ManagedChannel;
|
import io.opentelemetry.api.OpenTelemetry;
|
||||||
import io.grpc.ManagedChannelBuilder;
|
|
||||||
import io.opentelemetry.api.trace.Span;
|
import io.opentelemetry.api.trace.Span;
|
||||||
import io.opentelemetry.api.trace.Tracer;
|
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 {
|
public class JaegerExample {
|
||||||
|
|
||||||
// OTel API
|
|
||||||
private final SdkTracerManagement sdkTracerManagement;
|
|
||||||
private final Tracer tracer;
|
private final Tracer tracer;
|
||||||
|
|
||||||
public JaegerExample(String ip, int port) {
|
public JaegerExample(OpenTelemetry openTelemetry) {
|
||||||
OpenTelemetrySdk sdk = initOpenTelemetry(ip, port);
|
tracer = openTelemetry.getTracer("io.opentelemetry.example.JaegerExample");
|
||||||
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();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void myWonderfulUseCase() {
|
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) {
|
public static void main(String[] args) {
|
||||||
// Parsing the input
|
// Parsing the input
|
||||||
if (args.length < 2) {
|
if (args.length < 2) {
|
||||||
System.out.println("Missing [hostname] [port]");
|
System.out.println("Missing [hostname] [port]");
|
||||||
System.exit(1);
|
System.exit(1);
|
||||||
}
|
}
|
||||||
String ip = args[0];
|
String jaegerHostName = args[0];
|
||||||
int port = Integer.parseInt(args[1]);
|
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
|
// Start the example
|
||||||
JaegerExample example = new JaegerExample(ip, port);
|
JaegerExample example = new JaegerExample(openTelemetry);
|
||||||
example.initOpenTelemetry(ip, port);
|
|
||||||
// generate a few sample spans
|
// generate a few sample spans
|
||||||
for (int i = 0; i < 10; i++) {
|
for (int i = 0; i < 10; i++) {
|
||||||
example.myWonderfulUseCase();
|
example.myWonderfulUseCase();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Shutdown example
|
|
||||||
example.shutdown();
|
|
||||||
|
|
||||||
System.out.println("Bye");
|
System.out.println("Bye");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue