Skip to content
This repository was archived by the owner on May 8, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
* </ul>
*/
public class MetricRegistry {
static final String METER_NAME = "bigtable.googleapis.com/internal/client/";
public static final String METER_NAME = "bigtable.googleapis.com/internal/client/";

final TableOperationLatency operationLatencyMetric;
final TableAttemptLatency attemptLatencyMetric;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,12 @@
import com.google.cloud.bigtable.data.v2.internal.csm.MetricRegistry.RecorderRegistry;
import com.google.cloud.bigtable.data.v2.internal.csm.attributes.ClientInfo;
import com.google.cloud.bigtable.data.v2.internal.csm.attributes.EnvInfo;
import com.google.cloud.bigtable.data.v2.internal.csm.opencensus.MetricsTracerFactory;
import com.google.cloud.bigtable.data.v2.internal.csm.opencensus.RpcMeasureConstants;
import com.google.cloud.bigtable.data.v2.stub.metrics.BigtableCloudMonitoringExporter;
import com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants;
import com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsTracerFactory;
import com.google.cloud.bigtable.data.v2.stub.metrics.ChannelPoolMetricsTracer;
import com.google.cloud.bigtable.data.v2.stub.metrics.CompositeTracerFactory;
import com.google.cloud.bigtable.data.v2.stub.metrics.MetricsTracerFactory;
import com.google.cloud.bigtable.data.v2.stub.metrics.RpcMeasureConstants;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
Expand All @@ -42,18 +41,15 @@
import io.opencensus.tags.Tagger;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.metrics.InstrumentSelector;
import io.opentelemetry.sdk.metrics.SdkMeterProvider;
import io.opentelemetry.sdk.metrics.SdkMeterProviderBuilder;
import io.opentelemetry.sdk.metrics.View;
import io.opentelemetry.sdk.metrics.export.MetricExporter;
import io.opentelemetry.sdk.metrics.export.PeriodicMetricReader;
import io.opentelemetry.sdk.metrics.export.PeriodicMetricReaderBuilder;
import java.io.Closeable;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import javax.annotation.Nullable;
Expand Down Expand Up @@ -100,7 +96,7 @@ public MetricsImpl(
// Disable default grpc metrics
.disableAllMetrics()
// Enable specific grpc metrics
.enableMetrics(BuiltinMetricsConstants.GRPC_METRICS.keySet())
.enableMetrics(metricRegistry.getGrpcMetricNames())
.build();
} else {
this.grpcOtel = null;
Expand Down Expand Up @@ -185,16 +181,6 @@ public static OpenTelemetrySdk createBuiltinOtel(

SdkMeterProviderBuilder meterProvider = SdkMeterProvider.builder();

for (Map.Entry<InstrumentSelector, View> entry :
BuiltinMetricsConstants.getAllViews().entrySet()) {
meterProvider.registerView(entry.getKey(), entry.getValue());
}

for (Map.Entry<InstrumentSelector, View> e :
BuiltinMetricsConstants.getInternalViews().entrySet()) {
meterProvider.registerView(e.getKey(), e.getValue());
}

MetricExporter publicExporter =
BigtableCloudMonitoringExporter.create(
metricRegistry,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,16 @@

package com.google.cloud.bigtable.data.v2.internal.csm.attributes;

import com.google.api.gax.grpc.GrpcStatusCode;
import com.google.api.gax.rpc.ApiException;
import com.google.bigtable.v2.PeerInfo;
import com.google.bigtable.v2.PeerInfo.TransportType;
import com.google.bigtable.v2.ResponseParams;
import com.google.common.annotations.VisibleForTesting;
import io.grpc.Status;
import java.util.Locale;
import java.util.Optional;
import java.util.concurrent.CancellationException;
import javax.annotation.Nullable;

public class Util {
Expand Down Expand Up @@ -100,4 +104,26 @@ public static String formatZoneIdMetricLabel(@Nullable ResponseParams clusterInf
.filter(s -> !s.isEmpty())
.orElse("global");
}

public static Status.Code extractStatus(@Nullable Throwable error) {
if (error == null) {
return Status.Code.OK;
}
// Handle java CancellationException as if it was a gax CancelledException
if (error instanceof CancellationException) {
return Status.Code.CANCELLED;
}
if (error instanceof ApiException) {
ApiException apiException = (ApiException) error;
if (apiException.getStatusCode() instanceof GrpcStatusCode) {
return ((GrpcStatusCode) apiException.getStatusCode()).getTransportCode();
}
}

Status s = Status.fromThrowable(error);
if (s != null) {
return s.getCode();
}
return Status.Code.UNKNOWN;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
import io.opentelemetry.api.metrics.Meter;

public class ClientBatchWriteFlowControlFactor extends MetricWrapper<ClientSchema> {
private static final String NAME =
public static final String NAME =
"bigtable.googleapis.com/internal/client/batch_write_flow_control_factor";

public ClientBatchWriteFlowControlFactor() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
import io.opentelemetry.api.metrics.Meter;

public class ClientBatchWriteFlowControlTargetQps extends MetricWrapper<ClientSchema> {
private static final String NAME =
public static final String NAME =
"bigtable.googleapis.com/internal/client/batch_write_flow_control_target_qps";

public ClientBatchWriteFlowControlTargetQps() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
import java.util.stream.Collectors;

public class ClientChannelPoolOutstandingRpcs extends MetricWrapper<ClientSchema> {
private static final String NAME =
public static final String NAME =
"bigtable.googleapis.com/internal/client/connection_pool/outstanding_rpcs";

private static final List<Long> BUCKETS =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
import java.util.Set;

public class ClientPerConnectionErrorCount extends MetricWrapper<ClientSchema> {
private static final String NAME =
public static final String NAME =
"bigtable.googleapis.com/internal/client/per_connection_error_count";

static final List<Long> BUCKETS =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ private MetricLabels() {}
AttributeKey.stringKey("app_profile");
public static final AttributeKey<String> DEBUG_TAG_KEY = AttributeKey.stringKey("tag");

static final AttributeKey<Boolean> APPLIED_KEY = AttributeKey.booleanKey("applied");
public static final AttributeKey<Boolean> APPLIED_KEY = AttributeKey.booleanKey("applied");

static final AttributeKey<String> CHANNEL_POOL_LB_POLICY = AttributeKey.stringKey("lb_policy");
static final AttributeKey<String> DP_REASON_KEY = AttributeKey.stringKey("reason");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,7 @@
import javax.annotation.Nullable;

public class TableApplicationBlockingLatency extends MetricWrapper<TableSchema> {
private static final String NAME =
"bigtable.googleapis.com/internal/client/application_latencies";
public static final String NAME = "bigtable.googleapis.com/internal/client/application_latencies";

public TableApplicationBlockingLatency() {
super(TableSchema.INSTANCE, NAME);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
import javax.annotation.Nullable;

public class TableAttemptLatency extends MetricWrapper<TableSchema> {
private static final String NAME = "bigtable.googleapis.com/internal/client/attempt_latencies";
public static final String NAME = "bigtable.googleapis.com/internal/client/attempt_latencies";

public TableAttemptLatency() {
super(TableSchema.INSTANCE, NAME);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
import javax.annotation.Nullable;

public class TableAttemptLatency2 extends MetricWrapper<TableSchema> {
private static final String NAME = "bigtable.googleapis.com/internal/client/attempt_latencies2";
public static final String NAME = "bigtable.googleapis.com/internal/client/attempt_latencies2";

public TableAttemptLatency2() {
super(TableSchema.INSTANCE, NAME);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
import javax.annotation.Nullable;

public class TableClientBlockingLatency extends MetricWrapper<TableSchema> {
private static final String NAME = "bigtable.googleapis.com/internal/client/throttling_latencies";
public static final String NAME = "bigtable.googleapis.com/internal/client/throttling_latencies";

public TableClientBlockingLatency() {
super(TableSchema.INSTANCE, NAME);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
import javax.annotation.Nullable;

public class TableConnectivityErrorCount extends MetricWrapper<TableSchema> {
private static final String NAME =
public static final String NAME =
"bigtable.googleapis.com/internal/client/connectivity_error_count";

public TableConnectivityErrorCount() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
import javax.annotation.Nullable;

public class TableFirstResponseLatency extends MetricWrapper<TableSchema> {
private static final String NAME =
public static final String NAME =
"bigtable.googleapis.com/internal/client/first_response_latencies";

public TableFirstResponseLatency() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
import javax.annotation.Nullable;

public class TableOperationLatency extends MetricWrapper<TableSchema> {
private static final String NAME = "bigtable.googleapis.com/internal/client/operation_latencies";
public static final String NAME = "bigtable.googleapis.com/internal/client/operation_latencies";

public TableOperationLatency() {
super(TableSchema.INSTANCE, NAME);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
import java.time.Duration;

public class TableRemainingDeadline extends MetricWrapper<TableSchema> {
private static final String NAME = "bigtable.googleapis.com/internal/client/remaining_deadline";
public static final String NAME = "bigtable.googleapis.com/internal/client/remaining_deadline";

public TableRemainingDeadline() {
super(TableSchema.INSTANCE, NAME);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
import javax.annotation.Nullable;

public class TableRetryCount extends MetricWrapper<TableSchema> {
private static final String NAME = "bigtable.googleapis.com/internal/client/retry_count";
public static final String NAME = "bigtable.googleapis.com/internal/client/retry_count";

public TableRetryCount() {
super(TableSchema.INSTANCE, NAME);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
import javax.annotation.Nullable;

public class TableServerLatency extends MetricWrapper<TableSchema> {
private static final String NAME = "bigtable.googleapis.com/internal/client/server_latencies";
public static final String NAME = "bigtable.googleapis.com/internal/client/server_latencies";

public TableServerLatency() {
super(TableSchema.INSTANCE, NAME);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.cloud.bigtable.data.v2.stub.metrics;
package com.google.cloud.bigtable.data.v2.internal.csm.opencensus;

import static com.google.api.gax.util.TimeConversionUtils.toJavaTimeDuration;

import com.google.api.core.ObsoleteApi;
import com.google.api.gax.retrying.ServerStreamingAttemptException;
import com.google.api.gax.tracing.ApiTracerFactory.OperationType;
import com.google.api.gax.tracing.SpanName;
import com.google.cloud.bigtable.data.v2.internal.csm.attributes.Util;
import com.google.cloud.bigtable.data.v2.stub.MetadataExtractorInterceptor;
import com.google.cloud.bigtable.data.v2.stub.metrics.BigtableTracer;
import com.google.common.base.Stopwatch;
import io.opencensus.stats.MeasureMap;
import io.opencensus.stats.StatsRecorder;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.cloud.bigtable.data.v2.stub.metrics;
package com.google.cloud.bigtable.data.v2.internal.csm.opencensus;

import com.google.api.core.InternalApi;
import com.google.api.gax.tracing.ApiTracer;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.cloud.bigtable.data.v2.stub.metrics;
package com.google.cloud.bigtable.data.v2.internal.csm.opencensus;

import com.google.api.core.InternalApi;
import io.opencensus.stats.Measure.MeasureLong;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,22 +13,24 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.cloud.bigtable.data.v2.stub.metrics;

import static com.google.cloud.bigtable.data.v2.stub.metrics.RpcMeasureConstants.BIGTABLE_APP_PROFILE_ID;
import static com.google.cloud.bigtable.data.v2.stub.metrics.RpcMeasureConstants.BIGTABLE_ATTEMPT_LATENCY;
import static com.google.cloud.bigtable.data.v2.stub.metrics.RpcMeasureConstants.BIGTABLE_BATCH_THROTTLED_TIME;
import static com.google.cloud.bigtable.data.v2.stub.metrics.RpcMeasureConstants.BIGTABLE_GFE_HEADER_MISSING_COUNT;
import static com.google.cloud.bigtable.data.v2.stub.metrics.RpcMeasureConstants.BIGTABLE_GFE_LATENCY;
import static com.google.cloud.bigtable.data.v2.stub.metrics.RpcMeasureConstants.BIGTABLE_INSTANCE_ID;
import static com.google.cloud.bigtable.data.v2.stub.metrics.RpcMeasureConstants.BIGTABLE_OP;
import static com.google.cloud.bigtable.data.v2.stub.metrics.RpcMeasureConstants.BIGTABLE_OP_ATTEMPT_COUNT;
import static com.google.cloud.bigtable.data.v2.stub.metrics.RpcMeasureConstants.BIGTABLE_OP_LATENCY;
import static com.google.cloud.bigtable.data.v2.stub.metrics.RpcMeasureConstants.BIGTABLE_PROJECT_ID;
import static com.google.cloud.bigtable.data.v2.stub.metrics.RpcMeasureConstants.BIGTABLE_READ_ROWS_FIRST_ROW_LATENCY;
import static com.google.cloud.bigtable.data.v2.stub.metrics.RpcMeasureConstants.BIGTABLE_STATUS;
package com.google.cloud.bigtable.data.v2.internal.csm.opencensus;

import static com.google.cloud.bigtable.data.v2.internal.csm.opencensus.RpcMeasureConstants.BIGTABLE_APP_PROFILE_ID;
import static com.google.cloud.bigtable.data.v2.internal.csm.opencensus.RpcMeasureConstants.BIGTABLE_ATTEMPT_LATENCY;
import static com.google.cloud.bigtable.data.v2.internal.csm.opencensus.RpcMeasureConstants.BIGTABLE_BATCH_THROTTLED_TIME;
import static com.google.cloud.bigtable.data.v2.internal.csm.opencensus.RpcMeasureConstants.BIGTABLE_GFE_HEADER_MISSING_COUNT;
import static com.google.cloud.bigtable.data.v2.internal.csm.opencensus.RpcMeasureConstants.BIGTABLE_GFE_LATENCY;
import static com.google.cloud.bigtable.data.v2.internal.csm.opencensus.RpcMeasureConstants.BIGTABLE_INSTANCE_ID;
import static com.google.cloud.bigtable.data.v2.internal.csm.opencensus.RpcMeasureConstants.BIGTABLE_OP;
import static com.google.cloud.bigtable.data.v2.internal.csm.opencensus.RpcMeasureConstants.BIGTABLE_OP_ATTEMPT_COUNT;
import static com.google.cloud.bigtable.data.v2.internal.csm.opencensus.RpcMeasureConstants.BIGTABLE_OP_LATENCY;
import static com.google.cloud.bigtable.data.v2.internal.csm.opencensus.RpcMeasureConstants.BIGTABLE_PROJECT_ID;
import static com.google.cloud.bigtable.data.v2.internal.csm.opencensus.RpcMeasureConstants.BIGTABLE_READ_ROWS_FIRST_ROW_LATENCY;
import static com.google.cloud.bigtable.data.v2.internal.csm.opencensus.RpcMeasureConstants.BIGTABLE_STATUS;

import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import io.opencensus.stats.Aggregation;
import io.opencensus.stats.Aggregation.Count;
import io.opencensus.stats.Aggregation.Distribution;
Expand All @@ -37,7 +39,7 @@
import io.opencensus.stats.View;
import java.util.Arrays;

class RpcViewConstants {
public class RpcViewConstants {
// Aggregations
private static final Aggregation COUNT = Count.create();
private static final Aggregation SUM = Sum.create();
Expand Down Expand Up @@ -167,4 +169,19 @@ class RpcViewConstants {
AGGREGATION_WITH_MILLIS_HISTOGRAM,
ImmutableList.of(
BIGTABLE_INSTANCE_ID, BIGTABLE_PROJECT_ID, BIGTABLE_APP_PROFILE_ID, BIGTABLE_OP));

@VisibleForTesting
public static final ImmutableSet<View> BIGTABLE_CLIENT_VIEWS_SET =
ImmutableSet.of(
RpcViewConstants.BIGTABLE_OP_LATENCY_VIEW,
RpcViewConstants.BIGTABLE_COMPLETED_OP_VIEW,
RpcViewConstants.BIGTABLE_READ_ROWS_FIRST_ROW_LATENCY_VIEW,
RpcViewConstants.BIGTABLE_ATTEMPT_LATENCY_VIEW,
RpcViewConstants.BIGTABLE_ATTEMPTS_PER_OP_VIEW,
RpcViewConstants.BIGTABLE_BATCH_THROTTLED_TIME_VIEW);

public static final ImmutableSet<View> GFE_VIEW_SET =
ImmutableSet.of(
RpcViewConstants.BIGTABLE_GFE_LATENCY_VIEW,
RpcViewConstants.BIGTABLE_GFE_HEADER_MISSING_COUNT_VIEW);
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
*/
package com.google.cloud.bigtable.data.v2.stub;

import static com.google.cloud.bigtable.data.v2.stub.metrics.Util.extractStatus;
import static com.google.cloud.bigtable.data.v2.internal.csm.attributes.Util.extractStatus;

import com.google.api.gax.rpc.ApiCallContext;
import com.google.api.gax.rpc.DeadlineExceededException;
Expand Down
Loading
Loading