1717package  com .google .cloud .spanner .sample ;
1818
1919import  com .google .auth .oauth2 .GoogleCredentials ;
20+ import  com .google .cloud .opentelemetry .metric .GoogleCloudMetricExporter ;
21+ import  com .google .cloud .opentelemetry .metric .MetricConfiguration ;
2022import  com .google .cloud .opentelemetry .trace .TraceConfiguration ;
2123import  com .google .cloud .opentelemetry .trace .TraceExporter ;
2224import  com .google .cloud .spanner .SpannerOptions ;
2325import  io .opentelemetry .api .OpenTelemetry ;
2426import  io .opentelemetry .api .trace .Tracer ;
2527import  io .opentelemetry .sdk .OpenTelemetrySdk ;
28+ import  io .opentelemetry .sdk .metrics .SdkMeterProvider ;
29+ import  io .opentelemetry .sdk .metrics .export .MetricExporter ;
30+ import  io .opentelemetry .sdk .metrics .export .PeriodicMetricReader ;
2631import  io .opentelemetry .sdk .resources .Resource ;
2732import  io .opentelemetry .sdk .trace .SdkTracerProvider ;
2833import  io .opentelemetry .sdk .trace .export .BatchSpanProcessor ;
@@ -51,6 +56,7 @@ public OpenTelemetry openTelemetry() {
5156
5257    // Enable OpenTelemetry tracing in Spanner. 
5358    SpannerOptions .enableOpenTelemetryTraces ();
59+     SpannerOptions .enableOpenTelemetryMetrics ();
5460
5561    if  (!hasDefaultCredentials ()) {
5662      // Create a no-op OpenTelemetry object if this environment does not have any default 
@@ -63,6 +69,17 @@ public OpenTelemetry openTelemetry() {
6369    TraceConfiguration  traceConfiguration  = traceConfigurationBuilder .setProjectId (project ).build ();
6470    SpanExporter  traceExporter  = TraceExporter .createWithConfiguration (traceConfiguration );
6571
72+     MetricConfiguration .Builder  metricConfigurationBuilder  = MetricConfiguration .builder ();
73+     MetricConfiguration  metricConfiguration  =
74+         metricConfigurationBuilder .setProjectId (project ).build ();
75+     MetricExporter  metricExporter  =
76+         GoogleCloudMetricExporter .createWithConfiguration (metricConfiguration );
77+ 
78+     SdkMeterProvider  sdkMeterProvider  =
79+         SdkMeterProvider .builder ()
80+             .registerMetricReader (PeriodicMetricReader .builder (metricExporter ).build ())
81+             .build ();
82+ 
6683    // Create an OpenTelemetry object and register it as the global OpenTelemetry object. This 
6784    // will automatically be picked up by the Spanner libraries and used for tracing. 
6885    return  OpenTelemetrySdk .builder ()
@@ -81,6 +98,7 @@ public OpenTelemetry openTelemetry() {
8198                        .build ())
8299                .addSpanProcessor (BatchSpanProcessor .builder (traceExporter ).build ())
83100                .build ())
101+         .setMeterProvider (sdkMeterProvider )
84102        .buildAndRegisterGlobal ();
85103  }
86104
0 commit comments