diff --git a/google-cloud-bigtable/clirr-ignored-differences.xml b/google-cloud-bigtable/clirr-ignored-differences.xml index 383f60a7c1..b2d470f85b 100644 --- a/google-cloud-bigtable/clirr-ignored-differences.xml +++ b/google-cloud-bigtable/clirr-ignored-differences.xml @@ -499,6 +499,18 @@ com/google/cloud/bigtable/gaxx/grpc/BigtableChannelPoolSettings$Builder com.google.cloud.bigtable.gaxx.grpc.BigtableChannelPoolSettings$Builder setLoadBalancingStrategy(com.google.cloud.bigtable.gaxx.grpc.BigtableChannelPoolSettings$LoadBalancingStrategy) + + + 6001 + com/google/cloud/bigtable/data/v2/stub/metrics/BuiltinMetricsConstants + * + + + + 7002 + com/google/cloud/bigtable/data/v2/stub/metrics/BuiltinMetricsConstants + * + 7004 diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/BigtableDataClientFactory.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/BigtableDataClientFactory.java index 599dce9f31..4521963c3f 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/BigtableDataClientFactory.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/BigtableDataClientFactory.java @@ -111,7 +111,9 @@ public BigtableDataClient createDefault() { sharedClientContext.getClientContext().toBuilder() .setTracerFactory( EnhancedBigtableStub.createBigtableTracerFactory( - defaultSettings.getStubSettings(), sharedClientContext.getOpenTelemetry())) + defaultSettings.getStubSettings(), + sharedClientContext.getOpenTelemetry(), + sharedClientContext.getInternalOpenTelemtry())) .build(); return BigtableDataClient.createWithClientContext( @@ -140,7 +142,9 @@ public BigtableDataClient createForAppProfile(@Nonnull String appProfileId) thro sharedClientContext.getClientContext().toBuilder() .setTracerFactory( EnhancedBigtableStub.createBigtableTracerFactory( - settings.getStubSettings(), sharedClientContext.getOpenTelemetry())) + settings.getStubSettings(), + sharedClientContext.getOpenTelemetry(), + sharedClientContext.getInternalOpenTelemtry())) .build(); return BigtableDataClient.createWithClientContext( settings, sharedClientContext.withClientContext(clientContext)); @@ -168,7 +172,9 @@ public BigtableDataClient createForInstance(@Nonnull String projectId, @Nonnull sharedClientContext.getClientContext().toBuilder() .setTracerFactory( EnhancedBigtableStub.createBigtableTracerFactory( - settings.getStubSettings(), sharedClientContext.getOpenTelemetry())) + settings.getStubSettings(), + sharedClientContext.getOpenTelemetry(), + sharedClientContext.getInternalOpenTelemtry())) .build(); return BigtableDataClient.createWithClientContext( @@ -197,7 +203,9 @@ public BigtableDataClient createForInstance( sharedClientContext.getClientContext().toBuilder() .setTracerFactory( EnhancedBigtableStub.createBigtableTracerFactory( - settings.getStubSettings(), sharedClientContext.getOpenTelemetry())) + settings.getStubSettings(), + sharedClientContext.getOpenTelemetry(), + sharedClientContext.getInternalOpenTelemtry())) .build(); return BigtableDataClient.createWithClientContext( settings, sharedClientContext.withClientContext(clientContext)); diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/BigtableClientContext.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/BigtableClientContext.java index f366190eb6..8870371688 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/BigtableClientContext.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/BigtableClientContext.java @@ -215,6 +215,10 @@ public OpenTelemetry getOpenTelemetry() { return this.openTelemetry; } + public OpenTelemetry getInternalOpenTelemtry() { + return this.internalOpenTelemetry; + } + public ClientContext getClientContext() { return this.clientContext; } diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStub.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStub.java index 79cfee703a..e130876e41 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStub.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStub.java @@ -204,9 +204,10 @@ public static EnhancedBigtableStub create(EnhancedBigtableStubSettings settings) throws IOException { BigtableClientContext bigtableClientContext = createBigtableClientContext(settings); OpenTelemetry openTelemetry = bigtableClientContext.getOpenTelemetry(); + OpenTelemetry internalOtel = bigtableClientContext.getInternalOpenTelemtry(); ClientContext contextWithTracer = bigtableClientContext.getClientContext().toBuilder() - .setTracerFactory(createBigtableTracerFactory(settings, openTelemetry)) + .setTracerFactory(createBigtableTracerFactory(settings, openTelemetry, internalOtel)) .build(); bigtableClientContext = bigtableClientContext.withClientContext(contextWithTracer); return new EnhancedBigtableStub(settings, bigtableClientContext); @@ -225,10 +226,12 @@ public static BigtableClientContext createBigtableClientContext( } public static ApiTracerFactory createBigtableTracerFactory( - EnhancedBigtableStubSettings settings, @Nullable OpenTelemetry openTelemetry) + EnhancedBigtableStubSettings settings, + @Nullable OpenTelemetry openTelemetry, + @Nullable OpenTelemetry internalOtel) throws IOException { return createBigtableTracerFactory( - settings, Tags.getTagger(), Stats.getStatsRecorder(), openTelemetry); + settings, Tags.getTagger(), Stats.getStatsRecorder(), openTelemetry, internalOtel); } @VisibleForTesting @@ -236,7 +239,8 @@ public static ApiTracerFactory createBigtableTracerFactory( EnhancedBigtableStubSettings settings, Tagger tagger, StatsRecorder stats, - @Nullable OpenTelemetry openTelemetry) + @Nullable OpenTelemetry openTelemetry, + @Nullable OpenTelemetry internalOtel) throws IOException { String projectId = settings.getProjectId(); String instanceId = settings.getInstanceId(); @@ -268,12 +272,13 @@ public static ApiTracerFactory createBigtableTracerFactory( .add(MetricsTracerFactory.create(tagger, stats, attributes)) // Add user configured tracer .add(settings.getTracerFactory()); - BuiltinMetricsTracerFactory builtinMetricsTracerFactory = - openTelemetry != null - ? BuiltinMetricsTracerFactory.create(openTelemetry, createBuiltinAttributes(settings)) - : null; - if (builtinMetricsTracerFactory != null) { - tracerFactories.add(builtinMetricsTracerFactory); + if (openTelemetry != null) { + tracerFactories.add( + BuiltinMetricsTracerFactory.create(openTelemetry, createBuiltinAttributes(settings))); + } + if (internalOtel != null) { + tracerFactories.add( + BuiltinMetricsTracerFactory.create(internalOtel, createBuiltinAttributes(settings))); } return new CompositeTracerFactory(tracerFactories.build()); } diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BigtableCloudMonitoringExporter.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BigtableCloudMonitoringExporter.java index 375ab17142..1af83aff1d 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BigtableCloudMonitoringExporter.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BigtableCloudMonitoringExporter.java @@ -23,7 +23,6 @@ import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.FIRST_RESPONSE_LATENCIES_NAME; import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.METER_NAME; import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.OPERATION_LATENCIES_NAME; -import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.PER_CONNECTION_ERROR_COUNT_NAME; import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.REMAINING_DEADLINE_NAME; import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.RETRY_COUNT_NAME; import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.SERVER_LATENCIES_NAME; @@ -343,11 +342,6 @@ public Map> convert(Collection metricD } static class InternalTimeSeriesConverter implements TimeSeriesConverter { - private static final ImmutableList APPLICATION_METRICS = - ImmutableSet.of(PER_CONNECTION_ERROR_COUNT_NAME).stream() - .map(m -> METER_NAME + m) - .collect(ImmutableList.toImmutableList()); - private final Supplier monitoredResource; InternalTimeSeriesConverter(Supplier monitoredResource) { diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BigtableExporterUtils.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BigtableExporterUtils.java index 882365c6b4..57c2251f1a 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BigtableExporterUtils.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BigtableExporterUtils.java @@ -25,12 +25,13 @@ import static com.google.api.MetricDescriptor.ValueType.DISTRIBUTION; import static com.google.api.MetricDescriptor.ValueType.DOUBLE; import static com.google.api.MetricDescriptor.ValueType.INT64; +import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.APP_PROFILE_KEY; +import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.BIGTABLE_CLIENT_METRICS; import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.BIGTABLE_PROJECT_ID_KEY; import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.CLIENT_UID_KEY; import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.CLUSTER_ID_KEY; import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.GRPC_METRICS; import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.INSTANCE_ID_KEY; -import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.INTERNAL_METRICS; import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.METER_NAME; import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.TABLE_ID_KEY; import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.ZONE_ID_KEY; @@ -99,6 +100,14 @@ class BigtableExporterUtils { ImmutableSet.of( BIGTABLE_PROJECT_ID_KEY, INSTANCE_ID_KEY, TABLE_ID_KEY, CLUSTER_ID_KEY, ZONE_ID_KEY); + // These labels are defined on the bigtable_client monitored resource. For connection level + // metrics, they are hard coded from the settings when we create the internal otel. For per + // request metrics, we update the values of these fields with the values from metrics label. + // This is needed for BigtableDataClientFactory when the otel instance is created with the + // shared settings and the clients are created with different instances / app profile ids. + private static final Set> BIGTABLE_CLIENT_RESOURCE_LABEL = + ImmutableSet.of(BIGTABLE_PROJECT_ID_KEY, INSTANCE_ID_KEY, APP_PROFILE_KEY); + private static final Map SUPPORTED_PLATFORM_MAP = ImmutableMap.of( GCPPlatformDetector.SupportedPlatform.GOOGLE_COMPUTE_ENGINE, "gcp_compute_engine", @@ -317,8 +326,10 @@ private static Optional createInternalMetricsTimeSeries( // To unify these: // - the useless views should be removed // - internal metrics should use relative metric names w/o the prefix - if (INTERNAL_METRICS.contains(metricData.getName())) { - metricBuilder = newApplicationMetricBuilder(metricData.getName(), pointData.getAttributes()); + if (BIGTABLE_CLIENT_METRICS.contains(metricData.getName())) { + metricBuilder = + newApplicationMetricBuilder( + metricData.getName(), pointData.getAttributes(), applicationResource); } else if (GRPC_METRICS.containsKey(metricData.getName())) { metricBuilder = newGrpcMetricBuilder(metricData.getName(), pointData.getAttributes()); } else { @@ -343,10 +354,16 @@ private static Optional createInternalMetricsTimeSeries( } private static Metric.Builder newApplicationMetricBuilder( - String metricName, Attributes attributes) { + String metricName, Attributes attributes, MonitoredResource applicationResource) { + MonitoredResource.Builder updatedResource = applicationResource.toBuilder(); // TODO: unify handling of metric prefixes Metric.Builder metricBuilder = Metric.newBuilder().setType(metricName); for (Map.Entry, Object> e : attributes.asMap().entrySet()) { + AttributeKey key = e.getKey(); + if (BIGTABLE_CLIENT_RESOURCE_LABEL.contains(key)) { + updatedResource.putLabels(key.getKey(), String.valueOf(e.getValue())); + } + metricBuilder.putLabels(e.getKey().getKey(), String.valueOf(e.getValue())); } return metricBuilder; diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BuiltinMetricsConstants.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BuiltinMetricsConstants.java index 810d555de2..160e6716ea 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BuiltinMetricsConstants.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BuiltinMetricsConstants.java @@ -57,6 +57,7 @@ public class BuiltinMetricsConstants { static final AttributeKey TRANSPORT_REGION = AttributeKey.stringKey("transport_region"); static final AttributeKey TRANSPORT_ZONE = AttributeKey.stringKey("transport_zone"); static final AttributeKey TRANSPORT_SUBZONE = AttributeKey.stringKey("transport_subzone"); + static final AttributeKey LB_POLICY_KEY = AttributeKey.stringKey("lb_policy"); // gRPC attribute keys // Note that these attributes keys from transformed from @@ -167,8 +168,13 @@ public class BuiltinMetricsConstants { GRPC_TARGET_KEY.getKey())) .build(); - public static final Set INTERNAL_METRICS = - ImmutableSet.of(PER_CONNECTION_ERROR_COUNT_NAME, OUTSTANDING_RPCS_PER_CHANNEL_NAME).stream() + public static final Set BIGTABLE_CLIENT_METRICS = + ImmutableSet.of( + PER_CONNECTION_ERROR_COUNT_NAME, + OUTSTANDING_RPCS_PER_CHANNEL_NAME, + BATCH_WRITE_FLOW_CONTROL_FACTOR_NAME, + BATCH_WRITE_FLOW_CONTROL_TARGET_QPS_NAME) + .stream() .map(m -> METER_NAME + m) .collect(ImmutableSet.toImmutableSet()); // End allow list of metrics that will be exported @@ -246,8 +252,6 @@ static void defineView( .build(); Set attributesFilter = ImmutableSet.builder() - .addAll( - COMMON_ATTRIBUTES.stream().map(AttributeKey::getKey).collect(Collectors.toSet())) .addAll(attributes.stream().map(AttributeKey::getKey).collect(Collectors.toSet())) .build(); ViewBuilder viewBuilder = @@ -259,7 +263,7 @@ static void defineView( } // uses cloud.BigtableClient schema - public static Map getInternalViews() { + public static Map getBigtableClientViews() { ImmutableMap.Builder views = ImmutableMap.builder(); defineView( views, @@ -277,12 +281,43 @@ public static Map getInternalViews() { InstrumentType.HISTOGRAM, "1", ImmutableSet.builder() - .add(BIGTABLE_PROJECT_ID_KEY, INSTANCE_ID_KEY, APP_PROFILE_KEY, CLIENT_NAME_KEY) + .add( + BIGTABLE_PROJECT_ID_KEY, + INSTANCE_ID_KEY, + APP_PROFILE_KEY, + TRANSPORT_TYPE, + STREAMING_KEY, + LB_POLICY_KEY) + .build()); + defineView( + views, + BATCH_WRITE_FLOW_CONTROL_TARGET_QPS_NAME, + null, + InstrumentType.GAUGE, + "1", + ImmutableSet.builder() + .add(BIGTABLE_PROJECT_ID_KEY, INSTANCE_ID_KEY, APP_PROFILE_KEY, METHOD_KEY) + .build()); + defineView( + views, + BATCH_WRITE_FLOW_CONTROL_FACTOR_NAME, + AGGREGATION_BATCH_WRITE_FLOW_CONTROL_FACTOR_HISTOGRAM, + InstrumentType.HISTOGRAM, + "1", + ImmutableSet.builder() + .add( + BIGTABLE_PROJECT_ID_KEY, + INSTANCE_ID_KEY, + APP_PROFILE_KEY, + STATUS_KEY, + APPLIED_KEY, + METHOD_KEY) .build()); return views.build(); } - public static Map getAllViews() { + // uses cloud.BigtableTable schema + public static Map getBigtableTableViews() { ImmutableMap.Builder views = ImmutableMap.builder(); defineView( @@ -373,23 +408,6 @@ public static Map getAllViews() { .addAll(COMMON_ATTRIBUTES) .add(STREAMING_KEY, STATUS_KEY) .build()); - defineView( - views, - BATCH_WRITE_FLOW_CONTROL_TARGET_QPS_NAME, - null, - InstrumentType.GAUGE, - "1", - ImmutableSet.builder().addAll(COMMON_ATTRIBUTES).build()); - defineView( - views, - BATCH_WRITE_FLOW_CONTROL_FACTOR_NAME, - AGGREGATION_BATCH_WRITE_FLOW_CONTROL_FACTOR_HISTOGRAM, - InstrumentType.HISTOGRAM, - "1", - ImmutableSet.builder() - .addAll(COMMON_ATTRIBUTES) - .add(STATUS_KEY, APPLIED_KEY) - .build()); return views.build(); } } diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BuiltinMetricsView.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BuiltinMetricsView.java index 24e38c3a2c..90d38654c2 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BuiltinMetricsView.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BuiltinMetricsView.java @@ -136,7 +136,7 @@ static void registerBuiltinMetricsWithUniverseDomain( executorService); for (Map.Entry entry : - BuiltinMetricsConstants.getAllViews().entrySet()) { + BuiltinMetricsConstants.getBigtableTableViews().entrySet()) { builder.registerView(entry.getKey(), entry.getValue()); } PeriodicMetricReaderBuilder readerBuilder = PeriodicMetricReader.builder(publicExporter); diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/Util.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/Util.java index 9ba2d39c49..ff725e2594 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/Util.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/Util.java @@ -265,7 +265,7 @@ public static OpenTelemetrySdk newInternalOpentelemetry( SdkMeterProviderBuilder meterProviderBuilder = SdkMeterProvider.builder(); for (Map.Entry e : - BuiltinMetricsConstants.getInternalViews().entrySet()) { + BuiltinMetricsConstants.getBigtableClientViews().entrySet()) { meterProviderBuilder.registerView(e.getKey(), e.getValue()); } diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/metrics/BigtableTracerCallableTest.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/metrics/BigtableTracerCallableTest.java index 8c3746144f..639228b8e3 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/metrics/BigtableTracerCallableTest.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/metrics/BigtableTracerCallableTest.java @@ -136,6 +136,7 @@ public void sendHeaders(Metadata headers) { settings.getStubSettings(), Tags.getTagger(), localStats.getStatsRecorder(), + null, null)) .build(); attempts = settings.getStubSettings().readRowsSettings().getRetrySettings().getMaxAttempts(); @@ -163,6 +164,7 @@ public void sendHeaders(Metadata headers) { noHeaderSettings.getStubSettings(), Tags.getTagger(), localStats.getStatsRecorder(), + null, null)) .build(); noHeaderStub = diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/metrics/BuiltinMetricsTracerTest.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/metrics/BuiltinMetricsTracerTest.java index 864a801e6e..5d158f865d 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/metrics/BuiltinMetricsTracerTest.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/metrics/BuiltinMetricsTracerTest.java @@ -17,14 +17,17 @@ import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.APPLICATION_BLOCKING_LATENCIES_NAME; import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.APPLIED_KEY; +import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.APP_PROFILE_KEY; import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.ATTEMPT_LATENCIES_NAME; import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.BATCH_WRITE_FLOW_CONTROL_FACTOR_NAME; import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.BATCH_WRITE_FLOW_CONTROL_TARGET_QPS_NAME; +import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.BIGTABLE_PROJECT_ID_KEY; import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.CLIENT_BLOCKING_LATENCIES_NAME; import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.CLIENT_NAME_KEY; import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.CLUSTER_ID_KEY; import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.CONNECTIVITY_ERROR_COUNT_NAME; import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.FIRST_RESPONSE_LATENCIES_NAME; +import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.INSTANCE_ID_KEY; import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.METHOD_KEY; import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.OPERATION_LATENCIES_NAME; import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.REMAINING_DEADLINE_NAME; @@ -175,7 +178,12 @@ public void setUp() throws Exception { SdkMeterProvider.builder().registerMetricReader(metricReader); for (Map.Entry entry : - BuiltinMetricsConstants.getAllViews().entrySet()) { + BuiltinMetricsConstants.getBigtableTableViews().entrySet()) { + meterProvider.registerView(entry.getKey(), entry.getValue()); + } + + for (Map.Entry entry : + BuiltinMetricsConstants.getBigtableClientViews().entrySet()) { meterProvider.registerView(entry.getKey(), entry.getValue()); } @@ -828,17 +836,25 @@ public void testBatchWriteFlowControlTargetQpsIncreased() throws InterruptedExce MetricData targetQpsMetric = getMetricData(metricReader, BATCH_WRITE_FLOW_CONTROL_TARGET_QPS_NAME); Attributes targetQpsAttributes = - baseAttributes.toBuilder().put(METHOD_KEY, "Bigtable.MutateRows").build(); + Attributes.builder() + .put(METHOD_KEY, "Bigtable.MutateRows") + .put(BIGTABLE_PROJECT_ID_KEY, PROJECT_ID) + .put(INSTANCE_ID_KEY, INSTANCE_ID) + .put(APP_PROFILE_KEY, APP_PROFILE_ID) + .build(); double actual_qps = getAggregatedDoubleValue(targetQpsMetric, targetQpsAttributes); double expected_qps = 12; assertThat(expected_qps).isEqualTo(actual_qps); MetricData factorMetric = getMetricData(metricReader, BATCH_WRITE_FLOW_CONTROL_FACTOR_NAME); Attributes factorAttributes = - baseAttributes.toBuilder() + Attributes.builder() .put(METHOD_KEY, "Bigtable.MutateRows") .put(APPLIED_KEY, true) .put(STATUS_KEY, "OK") + .put(BIGTABLE_PROJECT_ID_KEY, PROJECT_ID) + .put(INSTANCE_ID_KEY, INSTANCE_ID) + .put(APP_PROFILE_KEY, APP_PROFILE_ID) .build(); double actual_factor_mean = getAggregatedDoubleValue(factorMetric, factorAttributes); double expected_factor_mean = 1.2; @@ -858,17 +874,25 @@ public void testBatchWriteFlowControlTargetQpsDecreased() throws InterruptedExce MetricData targetQpsMetric = getMetricData(metricReader, BATCH_WRITE_FLOW_CONTROL_TARGET_QPS_NAME); Attributes targetQpsAttributes = - baseAttributes.toBuilder().put(METHOD_KEY, "Bigtable.MutateRows").build(); + Attributes.builder() + .put(METHOD_KEY, "Bigtable.MutateRows") + .put(BIGTABLE_PROJECT_ID_KEY, PROJECT_ID) + .put(INSTANCE_ID_KEY, INSTANCE_ID) + .put(APP_PROFILE_KEY, APP_PROFILE_ID) + .build(); double actual_qps = getAggregatedDoubleValue(targetQpsMetric, targetQpsAttributes); double expected_qps = 8.0; assertThat(expected_qps).isEqualTo(actual_qps); MetricData factorMetric = getMetricData(metricReader, BATCH_WRITE_FLOW_CONTROL_FACTOR_NAME); Attributes factorAttributes = - baseAttributes.toBuilder() + Attributes.builder() .put(METHOD_KEY, "Bigtable.MutateRows") .put(APPLIED_KEY, true) .put(STATUS_KEY, "OK") + .put(BIGTABLE_PROJECT_ID_KEY, PROJECT_ID) + .put(INSTANCE_ID_KEY, INSTANCE_ID) + .put(APP_PROFILE_KEY, APP_PROFILE_ID) .build(); double actual_factor_mean = getAggregatedDoubleValue(factorMetric, factorAttributes); double expected_factor_mean = 0.8; @@ -888,7 +912,12 @@ public void testBatchWriteFlowControlTargetQpsCappedOnMaxFactor() throws Interru MetricData targetQpsMetric = getMetricData(metricReader, BATCH_WRITE_FLOW_CONTROL_TARGET_QPS_NAME); Attributes targetQpsAttributes = - baseAttributes.toBuilder().put(METHOD_KEY, "Bigtable.MutateRows").build(); + Attributes.builder() + .put(METHOD_KEY, "Bigtable.MutateRows") + .put(BIGTABLE_PROJECT_ID_KEY, PROJECT_ID) + .put(INSTANCE_ID_KEY, INSTANCE_ID) + .put(APP_PROFILE_KEY, APP_PROFILE_ID) + .build(); double actual_qps = getAggregatedDoubleValue(targetQpsMetric, targetQpsAttributes); // Factor is 1.8 but capped at 1.3 so updated QPS is 13. double expected_qps = 13; @@ -896,10 +925,13 @@ public void testBatchWriteFlowControlTargetQpsCappedOnMaxFactor() throws Interru MetricData factorMetric = getMetricData(metricReader, BATCH_WRITE_FLOW_CONTROL_FACTOR_NAME); Attributes factorAttributes = - baseAttributes.toBuilder() + Attributes.builder() .put(METHOD_KEY, "Bigtable.MutateRows") .put(APPLIED_KEY, true) .put(STATUS_KEY, "OK") + .put(BIGTABLE_PROJECT_ID_KEY, PROJECT_ID) + .put(INSTANCE_ID_KEY, INSTANCE_ID) + .put(APP_PROFILE_KEY, APP_PROFILE_ID) .build(); double actual_factor_mean = getAggregatedDoubleValue(factorMetric, factorAttributes); // Factor is 1.8 but capped at 1.3 @@ -920,7 +952,12 @@ public void testBatchWriteFlowControlTargetQpsCappedOnMinFactor() throws Interru MetricData targetQpsMetric = getMetricData(metricReader, BATCH_WRITE_FLOW_CONTROL_TARGET_QPS_NAME); Attributes targetQpsAttributes = - baseAttributes.toBuilder().put(METHOD_KEY, "Bigtable.MutateRows").build(); + Attributes.builder() + .put(METHOD_KEY, "Bigtable.MutateRows") + .put(BIGTABLE_PROJECT_ID_KEY, PROJECT_ID) + .put(INSTANCE_ID_KEY, INSTANCE_ID) + .put(APP_PROFILE_KEY, APP_PROFILE_ID) + .build(); double actual_qps = getAggregatedDoubleValue(targetQpsMetric, targetQpsAttributes); // Factor is 0.5 but capped at 0.7 so updated QPS is 7. double expected_qps = 7; @@ -928,10 +965,13 @@ public void testBatchWriteFlowControlTargetQpsCappedOnMinFactor() throws Interru MetricData factorMetric = getMetricData(metricReader, BATCH_WRITE_FLOW_CONTROL_FACTOR_NAME); Attributes factorAttributes = - baseAttributes.toBuilder() + Attributes.builder() .put(METHOD_KEY, "Bigtable.MutateRows") .put(APPLIED_KEY, true) .put(STATUS_KEY, "OK") + .put(BIGTABLE_PROJECT_ID_KEY, PROJECT_ID) + .put(INSTANCE_ID_KEY, INSTANCE_ID) + .put(APP_PROFILE_KEY, APP_PROFILE_ID) .build(); double actual_factor_mean = getAggregatedDoubleValue(factorMetric, factorAttributes); // Factor is 0.5 but capped at 0.7 @@ -953,7 +993,12 @@ public void testBatchWriteFlowControlTargetQpsDecreasedForError() throws Interru MetricData targetQpsMetric = getMetricData(metricReader, BATCH_WRITE_FLOW_CONTROL_TARGET_QPS_NAME); Attributes targetQpsAttributes = - baseAttributes.toBuilder().put(METHOD_KEY, "Bigtable.MutateRows").build(); + Attributes.builder() + .put(METHOD_KEY, "Bigtable.MutateRows") + .put(BIGTABLE_PROJECT_ID_KEY, PROJECT_ID) + .put(INSTANCE_ID_KEY, INSTANCE_ID) + .put(APP_PROFILE_KEY, APP_PROFILE_ID) + .build(); double actual_qps = getAggregatedDoubleValue(targetQpsMetric, targetQpsAttributes); // On error, min factor is applied. double expected_qps = 7; @@ -961,10 +1006,13 @@ public void testBatchWriteFlowControlTargetQpsDecreasedForError() throws Interru MetricData factorMetric = getMetricData(metricReader, BATCH_WRITE_FLOW_CONTROL_FACTOR_NAME); Attributes factorAttributes = - baseAttributes.toBuilder() + Attributes.builder() .put(METHOD_KEY, "Bigtable.MutateRows") .put(APPLIED_KEY, true) .put(STATUS_KEY, "UNAVAILABLE") + .put(BIGTABLE_PROJECT_ID_KEY, PROJECT_ID) + .put(INSTANCE_ID_KEY, INSTANCE_ID) + .put(APP_PROFILE_KEY, APP_PROFILE_ID) .build(); double actual_factor_mean = getAggregatedDoubleValue(factorMetric, factorAttributes); // On error, min factor is applied. diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/metrics/MetricsTracerTest.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/metrics/MetricsTracerTest.java index 5c4161d0e3..47b64fba14 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/metrics/MetricsTracerTest.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/metrics/MetricsTracerTest.java @@ -131,6 +131,7 @@ public void setUp() throws Exception { settings.getStubSettings(), Tags.getTagger(), localStats.getStatsRecorder(), + null, null)) .build(); stub =