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 =