Update the grpc example to more carefully match our best practices (#2538)
This commit is contained in:
		
							parent
							
								
									41a298c848
								
							
						
					
					
						commit
						13f9d3169e
					
				|  | @ -6,12 +6,12 @@ description = 'OpenTelemetry Examples for gRPC' | |||
| ext.moduleName = "io.opentelemetry.examples.grpc" | ||||
| 
 | ||||
| dependencies { | ||||
|     compile "io.opentelemetry:opentelemetry-api" | ||||
|     compile "io.opentelemetry:opentelemetry-sdk" | ||||
|     compile "io.opentelemetry:opentelemetry-exporter-logging" | ||||
|     compile "io.grpc:grpc-protobuf" | ||||
|     compile "io.grpc:grpc-stub" | ||||
|     compile "io.grpc:grpc-netty-shaded" | ||||
|     implementation "io.opentelemetry:opentelemetry-api" | ||||
|     implementation "io.opentelemetry:opentelemetry-sdk" | ||||
|     implementation "io.opentelemetry:opentelemetry-exporter-logging" | ||||
|     implementation "io.grpc:grpc-protobuf" | ||||
|     implementation "io.grpc:grpc-stub" | ||||
|     implementation "io.grpc:grpc-netty-shaded" | ||||
| 
 | ||||
|     if (JavaVersion.current().isJava9Compatible()) { | ||||
|         // Workaround for @javax.annotation.Generated | ||||
|  |  | |||
|  | @ -0,0 +1,45 @@ | |||
| /* | ||||
|  * Copyright The OpenTelemetry Authors | ||||
|  * SPDX-License-Identifier: Apache-2.0 | ||||
|  */ | ||||
| 
 | ||||
| package io.opentelemetry.example.grpc; | ||||
| 
 | ||||
| import io.opentelemetry.api.OpenTelemetry; | ||||
| import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator; | ||||
| import io.opentelemetry.context.propagation.ContextPropagators; | ||||
| import io.opentelemetry.exporter.logging.LoggingSpanExporter; | ||||
| import io.opentelemetry.sdk.OpenTelemetrySdk; | ||||
| import io.opentelemetry.sdk.trace.SdkTracerProvider; | ||||
| import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor; | ||||
| 
 | ||||
| class ExampleConfiguration { | ||||
| 
 | ||||
|   static OpenTelemetry initOpenTelemetry() { | ||||
| 
 | ||||
|     // Set to process the spans with the LoggingSpanExporter | ||||
|     LoggingSpanExporter exporter = new LoggingSpanExporter(); | ||||
|     SdkTracerProvider sdkTracerProvider = | ||||
|         SdkTracerProvider.builder().addSpanProcessor(SimpleSpanProcessor.create(exporter)).build(); | ||||
| 
 | ||||
|     OpenTelemetrySdk openTelemetrySdk = | ||||
|         OpenTelemetrySdk.builder() | ||||
|             .setTracerProvider(sdkTracerProvider) | ||||
|             // install the W3C Trace Context propagator | ||||
|             .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance())) | ||||
|             .build(); | ||||
| 
 | ||||
|     // it's always a good idea to shutdown the SDK when your process exits. | ||||
|     Runtime.getRuntime() | ||||
|         .addShutdownHook( | ||||
|             new Thread( | ||||
|                 () -> { | ||||
|                   System.err.println( | ||||
|                       "*** forcing the Span Exporter to shutdown and process the remaining spans"); | ||||
|                   openTelemetrySdk.getTracerManagement().shutdown(); | ||||
|                   System.err.println("*** Trace Exporter shut down"); | ||||
|                 })); | ||||
| 
 | ||||
|     return openTelemetrySdk; | ||||
|   } | ||||
| } | ||||
|  | @ -20,15 +20,9 @@ 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.propagation.W3CTraceContextPropagator; | ||||
| import io.opentelemetry.context.Context; | ||||
| import io.opentelemetry.context.Scope; | ||||
| import io.opentelemetry.context.propagation.ContextPropagators; | ||||
| import io.opentelemetry.context.propagation.TextMapPropagator; | ||||
| 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 java.util.concurrent.TimeUnit; | ||||
| import java.util.logging.Level; | ||||
| import java.util.logging.Logger; | ||||
|  | @ -40,14 +34,18 @@ public class HelloWorldClient { | |||
|   private final Integer serverPort; | ||||
|   private final GreeterGrpc.GreeterBlockingStub blockingStub; | ||||
| 
 | ||||
|   private static final OpenTelemetry openTelemetry = initOpenTelemetry(); | ||||
|   // it is important to initialize the OpenTelemetry SDK as early as possible in your application's | ||||
|   // lifecycle. | ||||
|   private static final OpenTelemetry openTelemetry = ExampleConfiguration.initOpenTelemetry(); | ||||
| 
 | ||||
|   // OTel API | ||||
|   private Tracer tracer = openTelemetry.getTracer("io.opentelemetry.example.HelloWorldClient"); | ||||
|   // OTel Tracing API | ||||
|   private final Tracer tracer = | ||||
|       openTelemetry.getTracer("io.opentelemetry.example.HelloWorldClient"); | ||||
|   // Share context via text headers | ||||
|   private TextMapPropagator textFormat = openTelemetry.getPropagators().getTextMapPropagator(); | ||||
|   private final TextMapPropagator textFormat = | ||||
|       openTelemetry.getPropagators().getTextMapPropagator(); | ||||
|   // Inject context into the gRPC request metadata | ||||
|   private TextMapPropagator.Setter<Metadata> setter = | ||||
|   private final TextMapPropagator.Setter<Metadata> setter = | ||||
|       (carrier, key, value) -> | ||||
|           carrier.put(Metadata.Key.of(key, Metadata.ASCII_STRING_MARSHALLER), value); | ||||
| 
 | ||||
|  | @ -116,20 +114,6 @@ public class HelloWorldClient { | |||
|     } | ||||
|   } | ||||
| 
 | ||||
|   private static OpenTelemetry initOpenTelemetry() { | ||||
|     // 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 | ||||
|     LoggingSpanExporter exporter = new LoggingSpanExporter(); | ||||
|     sdkTracerProvider.addSpanProcessor(SimpleSpanProcessor.builder(exporter).build()); | ||||
| 
 | ||||
|     return OpenTelemetrySdk.builder() | ||||
|         .setTracerProvider(sdkTracerProvider) | ||||
|         .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance())) | ||||
|         .build(); | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Greet server. If provided, the first element of {@code args} is the name to use in the | ||||
|    * greeting. | ||||
|  | @ -138,12 +122,14 @@ public class HelloWorldClient { | |||
|     // Access a service running on the local machine on port 50051 | ||||
|     HelloWorldClient client = new HelloWorldClient("localhost", 50051); | ||||
|     try { | ||||
|       String user = "world"; | ||||
|       String user = "World"; | ||||
|       // Use the arg as the name to greet if provided | ||||
|       if (args.length > 0) { | ||||
|         user = args[0]; | ||||
|       } | ||||
|       client.greet(user); | ||||
|       for (int i = 0; i < 10; i++) { | ||||
|         client.greet(user + " " + i); | ||||
|       } | ||||
|     } finally { | ||||
|       client.shutdown(); | ||||
|     } | ||||
|  |  | |||
|  | @ -17,15 +17,9 @@ import io.grpc.stub.StreamObserver; | |||
| import io.opentelemetry.api.OpenTelemetry; | ||||
| import io.opentelemetry.api.trace.Span; | ||||
| import io.opentelemetry.api.trace.Tracer; | ||||
| import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator; | ||||
| import io.opentelemetry.context.Context; | ||||
| import io.opentelemetry.context.Scope; | ||||
| import io.opentelemetry.context.propagation.ContextPropagators; | ||||
| import io.opentelemetry.context.propagation.TextMapPropagator; | ||||
| 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 java.io.IOException; | ||||
| import java.net.InetSocketAddress; | ||||
| import java.util.logging.Logger; | ||||
|  | @ -35,8 +29,10 @@ public class HelloWorldServer { | |||
|   private static final Logger logger = Logger.getLogger(HelloWorldServer.class.getName()); | ||||
| 
 | ||||
|   private static final int PORT = 50051; | ||||
|   private static final LoggingSpanExporter exporter = new LoggingSpanExporter(); | ||||
|   private static final OpenTelemetry openTelemetry = initOpenTelemetry(exporter); | ||||
| 
 | ||||
|   // it is important to initialize the OpenTelemetry SDK as early as possible in your application's | ||||
|   // lifecycle. | ||||
|   private static final OpenTelemetry openTelemetry = ExampleConfiguration.initOpenTelemetry(); | ||||
| 
 | ||||
|   private Server server; | ||||
| 
 | ||||
|  | @ -82,10 +78,6 @@ public class HelloWorldServer { | |||
|                   System.err.println("*** shutting down gRPC server since JVM is shutting down"); | ||||
|                   HelloWorldServer.this.stop(); | ||||
|                   System.err.println("*** server shut down"); | ||||
|                   System.err.println( | ||||
|                       "*** forcing also the Tracer Exporter to shutdown and process the remaining traces"); | ||||
|                   exporter.shutdown(); | ||||
|                   System.err.println("*** Trace Exporter shut down"); | ||||
|                 })); | ||||
|   } | ||||
| 
 | ||||
|  | @ -166,18 +158,6 @@ public class HelloWorldServer { | |||
|     } | ||||
|   } | ||||
| 
 | ||||
|   private static OpenTelemetry initOpenTelemetry(LoggingSpanExporter exporter) { | ||||
|     SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder().build(); | ||||
|     // Set to process the the spans by the LogExporter | ||||
|     sdkTracerProvider.addSpanProcessor(SimpleSpanProcessor.builder(exporter).build()); | ||||
| 
 | ||||
|     return OpenTelemetrySdk.builder() | ||||
|         .setTracerProvider(sdkTracerProvider) | ||||
|         // install the W3C Trace Context propagator | ||||
|         .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance())) | ||||
|         .build(); | ||||
|   } | ||||
| 
 | ||||
|   /** Main launches the server from the command line. */ | ||||
|   public static void main(String[] args) throws IOException, InterruptedException { | ||||
|     final HelloWorldServer server = new HelloWorldServer(); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue