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