21
21
import static com .google .cloud .spanner .BuiltInMetricsConstant .CLIENT_NAME_KEY ;
22
22
import static com .google .cloud .spanner .BuiltInMetricsConstant .CLIENT_UID_KEY ;
23
23
import static com .google .cloud .spanner .BuiltInMetricsConstant .INSTANCE_CONFIG_ID_KEY ;
24
+ import static com .google .cloud .spanner .BuiltInMetricsConstant .INSTANCE_ID_KEY ;
24
25
import static com .google .cloud .spanner .BuiltInMetricsConstant .LOCATION_ID_KEY ;
25
26
import static com .google .cloud .spanner .BuiltInMetricsConstant .PROJECT_ID_KEY ;
26
27
28
+ import com .google .api .core .ApiFunction ;
29
+ import com .google .api .gax .core .GaxProperties ;
30
+ import com .google .api .gax .grpc .InstantiatingGrpcChannelProvider ;
27
31
import com .google .auth .Credentials ;
28
32
import com .google .cloud .opentelemetry .detection .AttributeKeys ;
29
33
import com .google .cloud .opentelemetry .detection .DetectedPlatform ;
30
34
import com .google .cloud .opentelemetry .detection .GCPPlatformDetector ;
31
35
import com .google .common .hash .HashFunction ;
32
36
import com .google .common .hash .Hashing ;
37
+ import io .grpc .ManagedChannelBuilder ;
38
+ import io .grpc .opentelemetry .GrpcOpenTelemetry ;
33
39
import io .opentelemetry .api .OpenTelemetry ;
40
+ import io .opentelemetry .api .common .Attributes ;
41
+ import io .opentelemetry .api .common .AttributesBuilder ;
34
42
import io .opentelemetry .sdk .OpenTelemetrySdk ;
35
43
import io .opentelemetry .sdk .metrics .SdkMeterProvider ;
36
44
import io .opentelemetry .sdk .metrics .SdkMeterProviderBuilder ;
45
+ import io .opentelemetry .sdk .resources .Resource ;
37
46
import java .io .IOException ;
38
47
import java .lang .management .ManagementFactory ;
39
48
import java .lang .reflect .Method ;
@@ -66,6 +75,7 @@ OpenTelemetry getOrCreateOpenTelemetry(
66
75
BuiltInMetricsView .registerBuiltinMetrics (
67
76
SpannerCloudMonitoringExporter .create (projectId , credentials , monitoringHost ),
68
77
sdkMeterProviderBuilder );
78
+ sdkMeterProviderBuilder .setResource (Resource .create (createResourceAttributes (projectId )));
69
79
SdkMeterProvider sdkMeterProvider = sdkMeterProviderBuilder .build ();
70
80
this .openTelemetry = OpenTelemetrySdk .builder ().setMeterProvider (sdkMeterProvider ).build ();
71
81
Runtime .getRuntime ().addShutdownHook (new Thread (sdkMeterProvider ::close ));
@@ -80,15 +90,47 @@ OpenTelemetry getOrCreateOpenTelemetry(
80
90
}
81
91
}
82
92
83
- Map <String , String > createClientAttributes (String projectId , String client_name ) {
93
+ void enableGrpcMetrics (
94
+ InstantiatingGrpcChannelProvider .Builder channelProviderBuilder ,
95
+ String projectId ,
96
+ @ Nullable Credentials credentials ,
97
+ @ Nullable String monitoringHost ) {
98
+ GrpcOpenTelemetry grpcOpenTelemetry =
99
+ GrpcOpenTelemetry .newBuilder ()
100
+ .sdk (this .getOrCreateOpenTelemetry (projectId , credentials , monitoringHost ))
101
+ .enableMetrics (BuiltInMetricsConstant .GRPC_METRICS_TO_ENABLE )
102
+ // Disable gRPCs default metrics as they are not needed for Spanner.
103
+ .disableMetrics (BuiltInMetricsConstant .GRPC_METRICS_ENABLED_BY_DEFAULT )
104
+ .build ();
105
+ ApiFunction <ManagedChannelBuilder , ManagedChannelBuilder > channelConfigurator =
106
+ channelProviderBuilder .getChannelConfigurator ();
107
+ channelProviderBuilder .setChannelConfigurator (
108
+ b -> {
109
+ grpcOpenTelemetry .configureChannelBuilder (b );
110
+ if (channelConfigurator != null ) {
111
+ return channelConfigurator .apply (b );
112
+ }
113
+ return b ;
114
+ });
115
+ }
116
+
117
+ Attributes createResourceAttributes (String projectId ) {
118
+ AttributesBuilder attributesBuilder =
119
+ Attributes .builder ()
120
+ .put (PROJECT_ID_KEY .getKey (), projectId )
121
+ .put (INSTANCE_CONFIG_ID_KEY .getKey (), "unknown" )
122
+ .put (CLIENT_HASH_KEY .getKey (), generateClientHash (getDefaultTaskValue ()))
123
+ .put (INSTANCE_ID_KEY .getKey (), "unknown" )
124
+ .put (LOCATION_ID_KEY .getKey (), detectClientLocation ());
125
+
126
+ return attributesBuilder .build ();
127
+ }
128
+
129
+ Map <String , String > createClientAttributes () {
84
130
Map <String , String > clientAttributes = new HashMap <>();
85
- clientAttributes .put (LOCATION_ID_KEY .getKey (), detectClientLocation ());
86
- clientAttributes .put (PROJECT_ID_KEY .getKey (), projectId );
87
- clientAttributes .put (INSTANCE_CONFIG_ID_KEY .getKey (), "unknown" );
88
- clientAttributes .put (CLIENT_NAME_KEY .getKey (), client_name );
89
- String clientUid = getDefaultTaskValue ();
90
- clientAttributes .put (CLIENT_UID_KEY .getKey (), clientUid );
91
- clientAttributes .put (CLIENT_HASH_KEY .getKey (), generateClientHash (clientUid ));
131
+ clientAttributes .put (
132
+ CLIENT_NAME_KEY .getKey (), "spanner-java/" + GaxProperties .getLibraryVersion (getClass ()));
133
+ clientAttributes .put (CLIENT_UID_KEY .getKey (), getDefaultTaskValue ());
92
134
return clientAttributes ;
93
135
}
94
136
0 commit comments