Client-side metrics descriptions
Client-side metrics are available when you use the Bigtable client library for Java or the Bigtable HBase client for Java. This page provides a detailed description of each client-side metric.
To learn how to set up and configure client-side metrics, see Set up client-side metrics . For an overview, see the Client-side metrics overview .
Metrics are published to the region of the Bigtable cluster that
they are for. If Bigtable can't resolve the cluster for a metric,
like when an operation fails, then the metric is published to the global region
and the cluster 
tag has the value unspecified 
.
Use client-side metrics in conjunction with server-side metrics for performance debugging. For a comprehensive list of Bigtable server-side and client-side metrics, see Metrics .
Operation latencies
bigtable.googleapis.com/client/operation_latencies 
For
ReadRows 
requests, the operation latencies include
        the application processing time for each returned message.-  
ReadRow -  
ReadRows -  
MutateRow -  
MutateRows -  
SampleRowKeys -  
CheckAndMutateRow -  
BulkReadRows -  
BulkMutateRows 
- project ID
 - instance ID
 - table
 - cluster
 - zone
 - app profile ID
 - method name
 - final operation status
 - streaming operation
 - client name
 
Attempt latencies
bigtable.googleapis.com/client/attempt_latencies 
Under normal circumstances, this value is identical to
operation_latencies 
. If the client receives transient
        errors, however, then operation_latencies 
is the sum of
        all attempt_latencies 
and the exponential delays.-  
ReadRow -  
ReadRows -  
MutateRow -  
MutateRows -  
SampleRowKeys -  
CheckAndMutateRow -  
BulkReadRows -  
BulkMutateRows 
- project ID
 - instance ID
 - table
 - cluster
 - zone
 - app profile ID
 - method name
 - attempt status
 - streaming operation
 - client name
 
Retry count
bigtable.googleapis.com/client/retry_count 
-  
ReadRow -  
ReadRows -  
MutateRow -  
MutateRows -  
SampleRowKeys -  
CheckAndMutateRow -  
BulkReadRows -  
BulkMutateRows 
- project ID
 - instance ID
 - table
 - cluster
 - zone
 - app profile ID
 - method name
 - final operation status
 - client name
 
Application blocking latencies
bigtable.googleapis.com/client/application_blocking_latencies 
ReadRows 
requests. The start and stop times
        for this metric depend on the way that you send the read request; see Application blocking latencies timer
        examples 
for details.-  
ReadRow -  
ReadRows -  
MutateRow -  
MutateRows -  
SampleRowKeys -  
CheckAndMutateRow -  
BulkReadRows -  
BulkMutateRows 
- project ID
 - instance ID
 - table
 - cluster
 - zone
 - app profile ID
 - method name
 - client name
 
Application blocking latencies timer examples
 ReadRows 
requests are typically sent in one of three ways: iteratively,
asynchronously, or as a future call. The following examples demonstrate the
start and stop times for the application blocking latencies for each type of ReadRows 
operation.
Iterative
  long 
  
 totaLatency 
 = 
 0 
 ; 
 ServerStream<Row> 
  
 stream 
  
 = 
  
 bigtableDataClient 
 . 
 readRows 
 ( 
 query 
 ); 
 for 
  
 ( 
 Row 
  
 row 
  
 : 
  
 stream 
 ) 
  
 { 
  
 timer 
 . 
 start 
 (); 
  
 // Do something with row 
  
 timer 
 . 
 stop 
 (); 
  
 totalLatency 
  
 += 
  
 timer 
 . 
 elapsed 
 (); 
 } 
 
 
Asynchronous
  client 
 . 
 readRowsAsync 
 ( 
 query 
 , 
  
 new 
  
 ResponseObserver<Row> 
 () 
  
 { 
  
 @Override 
  
 public 
  
 void 
  
 onStart 
 ( 
 StreamController 
  
 streamController 
 ) 
  
 { 
  
 } 
  
 @Override 
  
 public 
  
 void 
  
 onResponse 
 ( 
 Row 
  
 row 
 ) 
  
 { 
  
 timer 
 . 
 start 
 (); 
  
 // Do something with the row 
  
 timer 
 . 
 stop 
 (); 
  
 totalLatency 
  
 += 
  
 timer 
 . 
 elapsed 
 (); 
  
 } 
  
 @Override 
  
 public 
  
 void 
  
 onError 
 ( 
 Throwable 
  
 throwable 
 ) 
  
 { 
  
 // Do something with the error 
  
 } 
  
 @Override 
  
 public 
  
 void 
  
 onComplete 
 () 
  
 { 
  
 } 
 }); 
 
 
Future call
The application blocking latencies should be approximately 0 (no timer) for
this type of ReadRows 
request.
  List<Row> 
  
 rows 
  
 = 
  
 bigtableDataClient 
 . 
 readRowsCallable 
 (). 
 all 
 (). 
 call 
 ( 
 query 
 ); 
 
 
First-response latencies
bigtable.googleapis.com/client/first_response_latencies 
ReadRows 
- project ID
 - instance ID
 - table
 - cluster
 - zone
 - app profile ID
 - method name
 - final operation status
 - client name
 
Server latencies
bigtable.googleapis.com/client/server_latencies  
 
-  
ReadRow -  
ReadRows -  
MutateRow -  
MutateRows -  
SampleRowKeys -  
CheckAndMutateRow -  
BulkReadRows -  
BulkMutateRows 
- project ID
 - instance ID
 - table
 - cluster
 - zone
 - app profile ID
 - method name
 - attempt status
 - streaming operation
 - client name
 
Connectivity error count
bigtable.googleapis.com/client/connectivity_error_count 
-  
ReadRow -  
ReadRows -  
MutateRow -  
MutateRows -  
SampleRowKeys -  
CheckAndMutateRow -  
BulkReadRows -  
BulkMutateRows 
- project ID
 - instance ID
 - table
 - cluster
 - zone
 - app profile ID
 - method name
 - attempt status
 - client name
 
Client blocking latencies
bigtable.googleapis.com/client/client_blocking_latencies 
-  
ReadRow for version 2.21.0 or later -  
ReadRows for version 2.21.0 or later -  
MutateRow for version 2.21.0 or later -  
MutateRows for version 2.21.0 or later -  
SampleRowKeys for version 2.21.0 or later -  
CheckAndMutateRow for version 2.21.0 or later -  
BulkReadRows -  
BulkMutateRows 
- project ID
 - instance ID
 - table
 - cluster
 - zone
 - app profile ID
 - method name
 - client name
 

