2626import io .grpc .examples .helloworld .HelloReply ;
2727import io .grpc .examples .helloworld .HelloRequest ;
2828import io .grpc .opentelemetry .GrpcOpenTelemetry ;
29+ import io .grpc .opentelemetry .GrpcTraceBinContextPropagator ;
30+ import io .opentelemetry .context .propagation .ContextPropagators ;
31+ import io .opentelemetry .context .propagation .TextMapPropagator ;
2932import io .opentelemetry .exporter .prometheus .PrometheusHttpServer ;
3033import io .opentelemetry .sdk .OpenTelemetrySdk ;
34+ import io .opentelemetry .api .common .Attributes ;
3135import io .opentelemetry .sdk .metrics .SdkMeterProvider ;
3236import java .util .concurrent .TimeUnit ;
3337import java .util .concurrent .atomic .AtomicBoolean ;
3438import java .util .logging .Level ;
3539import java .util .logging .Logger ;
40+ import io .opentelemetry .sdk .resources .Resource ;
41+ import io .opentelemetry .sdk .trace .SdkTracerProvider ;
42+ import io .opentelemetry .sdk .trace .SpanProcessor ;
43+ import io .opentelemetry .sdk .trace .export .BatchSpanProcessor ;
44+ import io .opentelemetry .sdk .trace .export .SimpleSpanProcessor ;
45+ import io .opentelemetry .semconv .ResourceAttributes ;
46+ import io .opentelemetry .exporter .otlp .trace .OtlpGrpcSpanExporter ;
3647
3748/**
3849 * A simple gRPC client that requests a greeting from the {@link HelloWorldServer} and
@@ -93,6 +104,35 @@ public static void main(String[] args) throws Exception {
93104
94105 Thread mainThread = Thread .currentThread ();
95106
107+
108+ // Adds a PrometheusHttpServer to convert OpenTelemetry metrics to Prometheus format and
109+ // expose these via a HttpServer exporter to the SdkMeterProvider.
110+ SdkMeterProvider sdkMeterProvider = SdkMeterProvider .builder ()
111+ .registerMetricReader (
112+ PrometheusHttpServer .builder ().setPort (prometheusPort ).build ())
113+ .build ();
114+ Resource resource = Resource .create (
115+ Attributes .of (ResourceAttributes .SERVICE_NAME , "client-service" )
116+ );
117+
118+ // Configure the OTLP Span Exporter with the custom Collector endpoint
119+ OtlpGrpcSpanExporter spanExporter = OtlpGrpcSpanExporter .builder ()
120+ .setEndpoint ("http://localhost:7080" ) // Default OTLP gRPC port
121+ .build ();
122+ SpanProcessor spanProcessor = SimpleSpanProcessor .create (spanExporter );
123+
124+ // Create the SdkTracerProvider
125+ SdkTracerProvider sdkTracerProvider = SdkTracerProvider .builder ()
126+ .addSpanProcessor (spanProcessor )
127+ .setResource (resource )
128+ .build ();
129+ // Initialize OpenTelemetry SDK with MeterProvider configured with Prometeheus.
130+ OpenTelemetrySdk openTelemetrySdk =
131+ OpenTelemetrySdk .builder ().setTracerProvider (sdkTracerProvider ).setMeterProvider (sdkMeterProvider )
132+ .setPropagators (ContextPropagators .create (TextMapPropagator .composite (
133+ GrpcTraceBinContextPropagator .defaultInstance ()
134+ )))
135+ .build ();
96136 Runtime .getRuntime ().addShutdownHook (new Thread () {
97137 @ Override
98138 public void run () {
@@ -105,21 +145,12 @@ public void run() {
105145 } catch (InterruptedException e ) {
106146 e .printStackTrace (System .err );
107147 }
148+ System .err .println ("Closing the otel sdk" );
149+ openTelemetrySdk .close ();
108150 System .err .println ("*** client shut down" );
109151 }
110152 });
111153
112- // Adds a PrometheusHttpServer to convert OpenTelemetry metrics to Prometheus format and
113- // expose these via a HttpServer exporter to the SdkMeterProvider.
114- SdkMeterProvider sdkMeterProvider = SdkMeterProvider .builder ()
115- .registerMetricReader (
116- PrometheusHttpServer .builder ().setPort (prometheusPort ).build ())
117- .build ();
118-
119- // Initialize OpenTelemetry SDK with MeterProvider configured with Prometeheus.
120- OpenTelemetrySdk openTelemetrySdk =
121- OpenTelemetrySdk .builder ().setMeterProvider (sdkMeterProvider ).build ();
122-
123154 // Initialize gRPC OpenTelemetry.
124155 // Following client metrics are enabled by default :
125156 // 1. grpc.client.attempt.started
@@ -148,6 +179,7 @@ public void run() {
148179 } finally {
149180 channel .shutdownNow ().awaitTermination (5 , TimeUnit .SECONDS );
150181 // Shut down OpenTelemetry SDK.
182+ logger .log (Level .INFO , "Closing the otel sdk" );
151183 openTelemetrySdk .close ();
152184 }
153185 }
0 commit comments