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