diff --git a/src/current/_data/metrics-list.csv b/src/current/_data/metrics-list.csv
new file mode 100644
index 00000000000..d3d6861e500
--- /dev/null
+++ b/src/current/_data/metrics-list.csv
@@ -0,0 +1,2334 @@
+layer,metric,description,y-axis label,type,unit,aggregation,derivative
+STORAGE,abortspanbytes,Number of bytes in the abort span,Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,addsstable.applications,Number of SSTable ingestions applied (i.e. applied by Replicas),Ingestions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,addsstable.aswrites,"Number of SSTables ingested as normal writes.
+
+These AddSSTable requests do not count towards the addsstable metrics
+'proposals', 'applications', or 'copies', as they are not ingested as AddSSTable
+Raft commands, but rather normal write commands. However, if these requests get
+throttled they do count towards 'delay.total' and 'delay.enginebackpressure'.
+",Ingestions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,addsstable.copies,number of SSTable ingestions that required copying files during application,Ingestions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,addsstable.delay.enginebackpressure,Amount by which evaluation of AddSSTable requests was delayed by storage-engine backpressure,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,addsstable.delay.total,Amount by which evaluation of AddSSTable requests was delayed,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,addsstable.proposals,Number of SSTable ingestions proposed (i.e. sent to Raft by lease holders),Ingestions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.elastic-cpu,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.elastic-cpu.bulk-normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.elastic-cpu.normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.kv,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.kv-stores,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.kv-stores.bulk-normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.kv-stores.high-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.kv-stores.locking-normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.kv-stores.normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.kv-stores.ttl-low-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.kv.high-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.kv.locking-normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.kv.normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.sql-kv-response,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.sql-kv-response.locking-normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.sql-kv-response.normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.sql-leaf-start,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.sql-leaf-start.locking-normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.sql-leaf-start.normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.sql-root-start,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.sql-root-start.locking-normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.sql-root-start.normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.sql-sql-response,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.sql-sql-response.locking-normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.sql-sql-response.normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.elastic_cpu.acquired_nanos,Total CPU nanoseconds acquired by elastic work,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.elastic_cpu.available_nanos,Instantaneous available CPU nanoseconds per second ignoring utilization limit,Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,admission.elastic_cpu.max_available_nanos,Maximum available CPU nanoseconds per second ignoring utilization limit,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.elastic_cpu.nanos_exhausted_duration,"Total duration when elastic CPU nanoseconds were exhausted, in micros",Microseconds,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.elastic_cpu.over_limit_durations,Measurement of how much over the prescribed limit elastic requests ran (not recorded if requests don't run over),Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.elastic_cpu.pre_work_nanos,"Total CPU nanoseconds spent doing pre-work, before doing elastic work",Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.elastic_cpu.returned_nanos,Total CPU nanoseconds returned by elastic work,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.elastic_cpu.utilization,CPU utilization by elastic work,CPU Time,GAUGE,PERCENT,AVG,NONE
+STORAGE,admission.elastic_cpu.utilization_limit,Utilization limit set for the elastic CPU work,CPU Time,GAUGE,PERCENT,AVG,NONE
+STORAGE,admission.errored.elastic-cpu,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.elastic-cpu.bulk-normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.elastic-cpu.normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.kv,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.kv-stores,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.kv-stores.bulk-normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.kv-stores.high-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.kv-stores.locking-normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.kv-stores.normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.kv-stores.ttl-low-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.kv.high-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.kv.locking-normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.kv.normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.sql-kv-response,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.sql-kv-response.locking-normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.sql-kv-response.normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.sql-leaf-start,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.sql-leaf-start.locking-normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.sql-leaf-start.normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.sql-root-start,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.sql-root-start.locking-normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.sql-root-start.normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.sql-sql-response,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.sql-sql-response.locking-normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.sql-sql-response.normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.granter.cpu_load_long_period_duration.kv,"Total duration when CPULoad was being called with a long period, in micros",Microseconds,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.granter.cpu_load_short_period_duration.kv,"Total duration when CPULoad was being called with a short period, in micros",Microseconds,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.granter.elastic_io_tokens_available.kv,Number of tokens available,Tokens,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.granter.io_tokens_available.kv,Number of tokens available,Tokens,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.granter.io_tokens_bypassed.kv,"Total number of tokens taken by work bypassing admission control (for example, follower writes without flow control)",Tokens,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.granter.io_tokens_exhausted_duration.kv,"Total duration when IO tokens were exhausted, in micros",Microseconds,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.granter.io_tokens_returned.kv,Total number of tokens returned,Tokens,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.granter.io_tokens_taken.kv,Total number of tokens taken,Tokens,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.granter.slot_adjuster_decrements.kv,Number of decrements of the total KV slots,Slots,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.granter.slot_adjuster_increments.kv,Number of increments of the total KV slots,Slots,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.granter.slots_exhausted_duration.kv,"Total duration when KV slots were exhausted, in micros",Microseconds,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.granter.total_slots.kv,Total slots for kv work,Slots,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.granter.used_slots.kv,Used slots,Slots,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.granter.used_slots.sql-leaf-start,Used slots,Slots,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.granter.used_slots.sql-root-start,Used slots,Slots,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.io.overload,1-normalized float indicating whether IO admission control considers the store as overloaded with respect to compaction out of L0 (considers sub-level and file counts).,Threshold,GAUGE,PERCENT,AVG,NONE
+STORAGE,admission.l0_compacted_bytes.kv,Total bytes compacted out of L0 (used to generate IO tokens),Tokens,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.l0_tokens_produced.kv,Total bytes produced for L0 writes,Tokens,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.raft.paused_replicas,"Number of followers (i.e. Replicas) to which replication is currently paused to help them recover from I/O overload.
+
+Such Replicas will be ignored for the purposes of proposal quota, and will not
+receive replication traffic. They are essentially treated as offline for the
+purpose of replication. This serves as a crude form of admission control.
+
+The count is emitted by the leaseholder of each range.",Followers,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.raft.paused_replicas_dropped_msgs,"Number of messages dropped instead of being sent to paused replicas.
+
+The messages are dropped to help these replicas to recover from I/O overload.",Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.elastic-cpu,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.elastic-cpu.bulk-normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.elastic-cpu.normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.kv,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.kv-stores,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.kv-stores.bulk-normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.kv-stores.high-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.kv-stores.locking-normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.kv-stores.normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.kv-stores.ttl-low-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.kv.high-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.kv.locking-normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.kv.normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.sql-kv-response,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.sql-kv-response.locking-normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.sql-kv-response.normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.sql-leaf-start,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.sql-leaf-start.locking-normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.sql-leaf-start.normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.sql-root-start,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.sql-root-start.locking-normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.sql-root-start.normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.sql-sql-response,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.sql-sql-response.locking-normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.sql-sql-response.normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.scheduler_latency_listener.p99_nanos,The scheduling latency at p99 as observed by the scheduler latency listener,Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.elastic-cpu,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.elastic-cpu.bulk-normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.elastic-cpu.normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.kv,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.kv-stores,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.kv-stores.bulk-normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.kv-stores.high-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.kv-stores.locking-normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.kv-stores.normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.kv-stores.ttl-low-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.kv.high-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.kv.locking-normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.kv.normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.sql-kv-response,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.sql-kv-response.locking-normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.sql-kv-response.normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.sql-leaf-start,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.sql-leaf-start.locking-normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.sql-leaf-start.normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.sql-root-start,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.sql-root-start.locking-normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.sql-root-start.normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.sql-sql-response,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.sql-sql-response.locking-normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.sql-sql-response.normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_queue_length.elastic-cpu,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.elastic-cpu.bulk-normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.elastic-cpu.normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.kv,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.kv-stores,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.kv-stores.bulk-normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.kv-stores.high-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.kv-stores.locking-normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.kv-stores.normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.kv-stores.ttl-low-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.kv.high-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.kv.locking-normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.kv.normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.sql-kv-response,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.sql-kv-response.locking-normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.sql-kv-response.normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.sql-leaf-start,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.sql-leaf-start.locking-normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.sql-leaf-start.normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.sql-root-start,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.sql-root-start.locking-normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.sql-root-start.normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.sql-sql-response,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.sql-sql-response.locking-normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.sql-sql-response.normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,batch_requests.bytes,Total byte count of batch requests processed,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,batch_requests.cross_region.bytes,"Total byte count of batch requests processed cross region when region
+ tiers are configured",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,batch_requests.cross_zone.bytes,"Total byte count of batch requests processed cross zone within
+ the same region when region and zone tiers are configured. However, if the
+ region tiers are not configured, this count may also include batch data sent
+ between different regions. Ensuring consistent configuration of region and
+ zone tiers across nodes helps to accurately monitor the data transmitted.",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,batch_responses.bytes,Total byte count of batch responses received,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,batch_responses.cross_region.bytes,"Total byte count of batch responses received cross region when region
+ tiers are configured",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,batch_responses.cross_zone.bytes,"Total byte count of batch responses received cross zone within the
+ same region when region and zone tiers are configured. However, if the
+ region tiers are not configured, this count may also include batch data
+ received between different regions. Ensuring consistent configuration of
+ region and zone tiers across nodes helps to accurately monitor the data
+ transmitted.",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,capacity,Total storage capacity,Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,capacity.available,Available storage capacity,Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,capacity.reserved,Capacity reserved for snapshots,Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,capacity.used,Used storage capacity,Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,exec.error,"Number of batch KV requests that failed to execute on this node.
+
+This count excludes transaction restart/abort errors. However, it will include
+other errors expected during normal operation, such as ConditionFailedError.
+This metric is thus not an indicator of KV health.",Batch KV Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,exec.latency,"Latency of batch KV requests (including errors) executed on this node.
+
+This measures requests already addressed to a single replica, from the moment
+at which they arrive at the internal gRPC endpoint to the moment at which the
+response (or an error) is returned.
+
+This latency includes in particular commit waits, conflict resolution and replication,
+and end-users can easily produce high measurements via long-running transactions that
+conflict with foreground traffic. This metric thus does not provide a good signal for
+understanding the health of the KV layer.
+",Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,exec.success,"Number of batch KV requests executed successfully on this node.
+
+A request is considered to have executed 'successfully' if it either returns a result
+or a transaction restart/abort error.
+",Batch KV Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,exportrequest.delay.total,Amount by which evaluation of Export requests was delayed,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,follower_reads.success_count,Number of reads successfully processed by any replica,Read Ops,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,gcbytesage,Cumulative age of non-live data,Age,GAUGE,SECONDS,AVG,NONE
+STORAGE,gossip.bytes.received,Number of received gossip bytes,Gossip Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,gossip.bytes.sent,Number of sent gossip bytes,Gossip Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,gossip.connections.incoming,Number of active incoming gossip connections,Connections,GAUGE,COUNT,AVG,NONE
+STORAGE,gossip.connections.outgoing,Number of active outgoing gossip connections,Connections,GAUGE,COUNT,AVG,NONE
+STORAGE,gossip.connections.refused,Number of refused incoming gossip connections,Connections,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,gossip.infos.received,Number of received gossip Info objects,Infos,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,gossip.infos.sent,Number of sent gossip Info objects,Infos,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,intentage,Cumulative age of locks,Age,GAUGE,SECONDS,AVG,NONE
+STORAGE,intentbytes,Number of bytes in intent KV pairs,Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,intentcount,Count of intent keys,Keys,GAUGE,COUNT,AVG,NONE
+STORAGE,intentresolver.async.throttled,Number of intent resolution attempts not run asynchronously due to throttling,Intent Resolutions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,intentresolver.finalized_txns.failed,Number of finalized transaction cleanup failures. Transaction cleanup refers to the process of resolving all of a transactions intents and then garbage collecting its transaction record.,Intent Resolutions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,intentresolver.intents.failed,"Number of intent resolution failures. The unit of measurement is a single intent, so if a batch of intent resolution requests fails, the metric will be incremented for each request in the batch.",Intent Resolutions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,intents.abort-attempts,Count of (point or range) non-poisoning intent abort evaluation attempts,Operations,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,intents.poison-attempts,Count of (point or range) poisoning intent abort evaluation attempts,Operations,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,intents.resolve-attempts,Count of (point or range) intent commit evaluation attempts,Operations,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,keybytes,Number of bytes taken up by keys,Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,keycount,Count of all keys,Keys,GAUGE,COUNT,AVG,NONE
+STORAGE,kv.allocator.load_based_lease_transfers.cannot_find_better_candidate,The number times the allocator determined that the lease was on the best possible replica,Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.allocator.load_based_lease_transfers.delta_not_significant,The number times the allocator determined that the delta between the existing store and the best candidate was not significant,Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.allocator.load_based_lease_transfers.existing_not_overfull,The number times the allocator determined that the lease was not on an overfull store,Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.allocator.load_based_lease_transfers.follow_the_workload,The number times the allocator determined that the lease should be transferred to another replica for locality.,Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.allocator.load_based_lease_transfers.missing_stats_for_existing_stores,The number times the allocator was missing qps stats for the leaseholder,Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.allocator.load_based_lease_transfers.should_transfer,The number times the allocator determined that the lease should be transferred to another replica for better load distribution,Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.allocator.load_based_replica_rebalancing.cannot_find_better_candidate,The number times the allocator determined that the range was on the best possible stores,Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.allocator.load_based_replica_rebalancing.delta_not_significant,The number times the allocator determined that the delta between an existing store and the best replacement candidate was not high enough,Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.allocator.load_based_replica_rebalancing.existing_not_overfull,The number times the allocator determined that none of the range's replicas were on overfull stores,Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.allocator.load_based_replica_rebalancing.missing_stats_for_existing_store,The number times the allocator was missing the qps stats for the existing store,Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.allocator.load_based_replica_rebalancing.should_transfer,The number times the allocator determined that the replica should be rebalanced to another store for better load distribution,Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.closed_timestamp.max_behind_nanos,Largest latency between realtime and replica max closed timestamp,Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,kv.concurrency.avg_lock_hold_duration_nanos,Average lock hold duration across locks currently held in lock tables. Does not include replicated locks (intents) that are not held in memory,Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,kv.concurrency.avg_lock_wait_duration_nanos,Average lock wait duration across requests currently waiting in lock wait-queues,Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,kv.concurrency.lock_wait_queue_waiters,Number of requests actively waiting in a lock wait-queue,Lock-Queue Waiters,GAUGE,COUNT,AVG,NONE
+STORAGE,kv.concurrency.locks,Number of active locks held in lock tables. Does not include replicated locks (intents) that are not held in memory,Locks,GAUGE,COUNT,AVG,NONE
+STORAGE,kv.concurrency.locks_with_wait_queues,Number of active locks held in lock tables with active wait-queues,Locks,GAUGE,COUNT,AVG,NONE
+STORAGE,kv.concurrency.max_lock_hold_duration_nanos,Maximum length of time any lock in a lock table is held. Does not include replicated locks (intents) that are not held in memory,Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,kv.concurrency.max_lock_wait_duration_nanos,Maximum lock wait duration across requests currently waiting in lock wait-queues,Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,kv.concurrency.max_lock_wait_queue_waiters_for_lock,Maximum number of requests actively waiting in any single lock wait-queue,Lock-Queue Waiters,GAUGE,COUNT,AVG,NONE
+STORAGE,kv.loadsplitter.nosplitkey,Load-based splitter could not find a split key.,Occurrences,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.loadsplitter.popularkey,Load-based splitter could not find a split key and the most popular sampled split key occurs in >= 25% of the samples.,Occurrences,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.prober.planning_attempts,Number of attempts at planning out probes made; in order to probe KV we need to plan out which ranges to probe;,Runs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.prober.planning_failures,"Number of attempts at planning out probes that failed; in order to probe KV we need to plan out which ranges to probe; if planning fails, then kvprober is not able to send probes to all ranges; consider alerting on this metric as a result",Runs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.prober.read.attempts,"Number of attempts made to read probe KV, regardless of outcome",Queries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.prober.read.failures,"Number of attempts made to read probe KV that failed, whether due to error or timeout",Queries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.prober.read.latency,Latency of successful KV read probes,Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,kv.prober.write.attempts,"Number of attempts made to write probe KV, regardless of outcome",Queries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.prober.write.failures,"Number of attempts made to write probe KV that failed, whether due to error or timeout",Queries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.prober.write.latency,Latency of successful KV write probes,Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,kv.prober.write.quarantine.oldest_duration,The duration that the oldest range in the write quarantine pool has remained,Seconds,GAUGE,SECONDS,AVG,NONE
+STORAGE,kv.rangefeed.budget_allocation_blocked,Number of times RangeFeed waited for budget availability,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.rangefeed.budget_allocation_failed,Number of times RangeFeed failed because memory budget was exceeded,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.rangefeed.catchup_scan_nanos,Time spent in RangeFeed catchup scan,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.rangefeed.mem_shared,Memory usage by rangefeeds,Memory,GAUGE,BYTES,AVG,NONE
+STORAGE,kv.rangefeed.mem_system,Memory usage by rangefeeds on system ranges,Memory,GAUGE,BYTES,AVG,NONE
+STORAGE,kv.rangefeed.processors_goroutine,Number of active RangeFeed processors using goroutines,Processors,GAUGE,COUNT,AVG,NONE
+STORAGE,kv.rangefeed.processors_scheduler,Number of active RangeFeed processors using scheduler,Processors,GAUGE,COUNT,AVG,NONE
+STORAGE,kv.rangefeed.registrations,Number of active RangeFeed registrations,Registrations,GAUGE,COUNT,AVG,NONE
+STORAGE,kv.rangefeed.scheduler.normal.latency,KV RangeFeed normal scheduler latency,Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,kv.rangefeed.scheduler.normal.queue_size,Number of entries in the KV RangeFeed normal scheduler queue,Pending Ranges,GAUGE,COUNT,AVG,NONE
+STORAGE,kv.rangefeed.scheduler.system.latency,KV RangeFeed system scheduler latency,Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,kv.rangefeed.scheduler.system.queue_size,Number of entries in the KV RangeFeed system scheduler queue,Pending Ranges,GAUGE,COUNT,AVG,NONE
+STORAGE,kv.replica_circuit_breaker.num_tripped_events,Number of times the per-Replica circuit breakers tripped since process start.,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.replica_circuit_breaker.num_tripped_replicas,"Number of Replicas for which the per-Replica circuit breaker is currently tripped.
+
+A nonzero value indicates range or replica unavailability, and should be investigated.
+Replicas in this state will fail-fast all inbound requests.
+",Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,kv.replica_read_batch_evaluate.dropped_latches_before_eval,Number of times read-only batches dropped latches before evaluation.,Batches,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.replica_read_batch_evaluate.latency,"Execution duration for evaluating a BatchRequest on the read-only path after latches have been acquired.
+
+A measurement is recorded regardless of outcome (i.e. also in case of an error). If internal retries occur, each instance is recorded separately.",Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,kv.replica_read_batch_evaluate.without_interleaving_iter,Number of read-only batches evaluated without an intent interleaving iter.,Batches,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.replica_write_batch_evaluate.latency,"Execution duration for evaluating a BatchRequest on the read-write path after latches have been acquired.
+
+A measurement is recorded regardless of outcome (i.e. also in case of an error). If internal retries occur, each instance is recorded separately.
+Note that the measurement does not include the duration for replicating the evaluated command.",Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,kv.tenant_rate_limit.current_blocked,Number of requests currently blocked by the rate limiter,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,kv.tenant_rate_limit.num_tenants,Number of tenants currently being tracked,Tenants,GAUGE,COUNT,AVG,NONE
+STORAGE,kv.tenant_rate_limit.read_batches_admitted,Number of read batches admitted by the rate limiter,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.tenant_rate_limit.read_bytes_admitted,Number of read bytes admitted by the rate limiter,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.tenant_rate_limit.read_requests_admitted,Number of read requests admitted by the rate limiter,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.tenant_rate_limit.write_batches_admitted,Number of write batches admitted by the rate limiter,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.tenant_rate_limit.write_bytes_admitted,Number of write bytes admitted by the rate limiter,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.tenant_rate_limit.write_requests_admitted,Number of write requests admitted by the rate limiter,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_controller.elastic_blocked_stream_count,Number of replication streams with no flow tokens available for elastic requests,Count,GAUGE,COUNT,AVG,NONE
+STORAGE,kvadmission.flow_controller.elastic_requests_admitted,Number of elastic requests admitted by the flow controller,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_controller.elastic_requests_bypassed,Number of elastic waiting requests that bypassed the flow controller due to disconnecting streams,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_controller.elastic_requests_errored,Number of elastic requests that errored out while waiting for flow tokens,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_controller.elastic_requests_waiting,Number of elastic requests waiting for flow tokens,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,kvadmission.flow_controller.elastic_stream_count,Total number of replication streams for elastic requests,Count,GAUGE,COUNT,AVG,NONE
+STORAGE,kvadmission.flow_controller.elastic_tokens_available,"Flow tokens available for elastic requests, across all replication streams",Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,kvadmission.flow_controller.elastic_tokens_deducted,"Flow tokens deducted by elastic requests, across all replication streams",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_controller.elastic_tokens_returned,"Flow tokens returned by elastic requests, across all replication streams",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_controller.elastic_tokens_unaccounted,"Flow tokens returned by elastic requests that were unaccounted for, across all replication streams",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_controller.elastic_wait_duration,Latency histogram for time elastic requests spent waiting for flow tokens,Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,kvadmission.flow_controller.regular_blocked_stream_count,Number of replication streams with no flow tokens available for regular requests,Count,GAUGE,COUNT,AVG,NONE
+STORAGE,kvadmission.flow_controller.regular_requests_admitted,Number of regular requests admitted by the flow controller,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_controller.regular_requests_bypassed,Number of regular waiting requests that bypassed the flow controller due to disconnecting streams,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_controller.regular_requests_errored,Number of regular requests that errored out while waiting for flow tokens,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_controller.regular_requests_waiting,Number of regular requests waiting for flow tokens,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,kvadmission.flow_controller.regular_stream_count,Total number of replication streams for regular requests,Count,GAUGE,COUNT,AVG,NONE
+STORAGE,kvadmission.flow_controller.regular_tokens_available,"Flow tokens available for regular requests, across all replication streams",Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,kvadmission.flow_controller.regular_tokens_deducted,"Flow tokens deducted by regular requests, across all replication streams",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_controller.regular_tokens_returned,"Flow tokens returned by regular requests, across all replication streams",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_controller.regular_tokens_unaccounted,"Flow tokens returned by regular requests that were unaccounted for, across all replication streams",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_controller.regular_wait_duration,Latency histogram for time regular requests spent waiting for flow tokens,Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,kvadmission.flow_handle.elastic_requests_admitted,Number of elastic requests admitted by the flow handle,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_handle.elastic_requests_errored,"Number of elastic requests that errored out while waiting for flow tokens, at the handle level",Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_handle.elastic_requests_waiting,"Number of elastic requests waiting for flow tokens, at the handle level",Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,kvadmission.flow_handle.elastic_wait_duration,"Latency histogram for time elastic requests spent waiting for flow tokens, at the handle level",Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,kvadmission.flow_handle.regular_requests_admitted,Number of regular requests admitted by the flow handle,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_handle.regular_requests_errored,"Number of regular requests that errored out while waiting for flow tokens, at the handle level",Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_handle.regular_requests_waiting,"Number of regular requests waiting for flow tokens, at the handle level",Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,kvadmission.flow_handle.regular_wait_duration,"Latency histogram for time regular requests spent waiting for flow tokens, at the handle level",Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,kvadmission.flow_handle.streams_connected,"Number of times we've connected to a stream, at the handle level",Streams,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_handle.streams_disconnected,"Number of times we've disconnected from a stream, at the handle level",Streams,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_token_dispatch.coalesced_elastic,Number of coalesced elastic flow token dispatches (where we're informing the sender of a higher log entry being admitted),Dispatches,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_token_dispatch.coalesced_regular,Number of coalesced regular flow token dispatches (where we're informing the sender of a higher log entry being admitted),Dispatches,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_token_dispatch.local_elastic,Number of local elastic flow token dispatches,Dispatches,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_token_dispatch.local_regular,Number of local regular flow token dispatches,Dispatches,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_token_dispatch.pending_elastic,Number of pending elastic flow token dispatches,Dispatches,GAUGE,COUNT,AVG,NONE
+STORAGE,kvadmission.flow_token_dispatch.pending_nodes,Number of nodes pending flow token dispatches,Nodes,GAUGE,COUNT,AVG,NONE
+STORAGE,kvadmission.flow_token_dispatch.pending_regular,Number of pending regular flow token dispatches,Dispatches,GAUGE,COUNT,AVG,NONE
+STORAGE,kvadmission.flow_token_dispatch.remote_elastic,Number of remote elastic flow token dispatches,Dispatches,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_token_dispatch.remote_regular,Number of remote regular flow token dispatches,Dispatches,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,leases.epoch,Number of replica leaseholders using epoch-based leases,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,leases.error,Number of failed lease requests,Lease Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,leases.expiration,Number of replica leaseholders using expiration-based leases,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,leases.liveness,Number of replica leaseholders for the liveness range(s),Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,leases.preferences.less-preferred,Number of replica leaseholders which satisfy a lease preference which is not the most preferred,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,leases.preferences.violating,Number of replica leaseholders which violate lease preferences,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,leases.requests.latency,"Lease request latency (all types and outcomes, coalesced)",Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,leases.success,Number of successful lease requests,Lease Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,leases.transfers.error,Number of failed lease transfers,Lease Transfers,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,leases.transfers.success,Number of successful lease transfers,Lease Transfers,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,livebytes,Number of bytes of live data (keys plus values),Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,livecount,Count of live keys,Keys,GAUGE,COUNT,AVG,NONE
+STORAGE,liveness.epochincrements,Number of times this node has incremented its liveness epoch,Epochs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,liveness.heartbeatfailures,Number of failed node liveness heartbeats from this node,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,liveness.heartbeatlatency,Node liveness heartbeat latency,Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,liveness.heartbeatsinflight,Number of in-flight liveness heartbeats from this node,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,liveness.heartbeatsuccesses,Number of successful node liveness heartbeats from this node,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,liveness.livenodes,Number of live nodes in the cluster (will be 0 if this node is not itself live),Nodes,GAUGE,COUNT,AVG,NONE
+STORAGE,lockbytes,"Number of bytes taken up by replicated lock key-values (shared and exclusive strength, not intent strength)",Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,lockcount,"Count of replicated locks (shared, exclusive, and intent strength)",Locks,GAUGE,COUNT,AVG,NONE
+STORAGE,node-id,node ID with labels for advertised RPC and HTTP addresses,Node ID,GAUGE,CONST,AVG,NONE
+STORAGE,queue.consistency.pending,Number of pending replicas in the consistency checker queue,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,queue.consistency.process.failure,Number of replicas which failed processing in the consistency checker queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.consistency.process.success,Number of replicas successfully processed by the consistency checker queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.consistency.processingnanos,Nanoseconds spent processing replicas in the consistency checker queue,Processing Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.abortspanconsidered,Number of AbortSpan entries old enough to be considered for removal,Txn Entries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.abortspangcnum,Number of AbortSpan entries fit for removal,Txn Entries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.abortspanscanned,Number of transactions present in the AbortSpan scanned from the engine,Txn Entries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.clearrangefailed,Number of failed ClearRange operations during GC,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.clearrangesuccess,Number of successful ClearRange operations during GC,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.enqueuehighpriority,Number of replicas enqueued for GC with high priority,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.intentsconsidered,Number of 'old' intents,Intents,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.intenttxns,Number of associated distinct transactions,Txns,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.numkeysaffected,Number of keys with GC'able data,Keys,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.numrangekeysaffected,Number of range keys GC'able,Range Keys,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.pushtxn,Number of attempted pushes,Pushes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.resolvefailed,Number of cleanup intent failures during GC,Intent Resolutions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.resolvesuccess,Number of successful intent resolutions,Intent Resolutions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.resolvetotal,Number of attempted intent resolutions,Intent Resolutions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.transactionresolvefailed,Number of intent cleanup failures for local transactions during GC,Intent Resolutions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.transactionspangcaborted,Number of GC'able entries corresponding to aborted txns,Txn Entries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.transactionspangccommitted,Number of GC'able entries corresponding to committed txns,Txn Entries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.transactionspangcpending,Number of GC'able entries corresponding to pending txns,Txn Entries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.transactionspangcstaging,Number of GC'able entries corresponding to staging txns,Txn Entries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.transactionspanscanned,Number of entries in transaction spans scanned from the engine,Txn Entries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.pending,Number of pending replicas in the MVCC GC queue,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,queue.gc.process.failure,Number of replicas which failed processing in the MVCC GC queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.process.success,Number of replicas successfully processed by the MVCC GC queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.processingnanos,Nanoseconds spent processing replicas in the MVCC GC queue,Processing Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.merge.pending,Number of pending replicas in the merge queue,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,queue.merge.process.failure,Number of replicas which failed processing in the merge queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.merge.process.success,Number of replicas successfully processed by the merge queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.merge.processingnanos,Nanoseconds spent processing replicas in the merge queue,Processing Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.merge.purgatory,"Number of replicas in the merge queue's purgatory, waiting to become mergeable",Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,queue.raftlog.pending,Number of pending replicas in the Raft log queue,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,queue.raftlog.process.failure,Number of replicas which failed processing in the Raft log queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.raftlog.process.success,Number of replicas successfully processed by the Raft log queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.raftlog.processingnanos,Nanoseconds spent processing replicas in the Raft log queue,Processing Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.raftsnapshot.pending,Number of pending replicas in the Raft repair queue,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,queue.raftsnapshot.process.failure,Number of replicas which failed processing in the Raft repair queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.raftsnapshot.process.success,Number of replicas successfully processed by the Raft repair queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.raftsnapshot.processingnanos,Nanoseconds spent processing replicas in the Raft repair queue,Processing Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicagc.pending,Number of pending replicas in the replica GC queue,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,queue.replicagc.process.failure,Number of replicas which failed processing in the replica GC queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicagc.process.success,Number of replicas successfully processed by the replica GC queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicagc.processingnanos,Nanoseconds spent processing replicas in the replica GC queue,Processing Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicagc.removereplica,Number of replica removals attempted by the replica GC queue,Replica Removals,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.addnonvoterreplica,Number of non-voter replica additions attempted by the replicate queue,Replica Additions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.addreplica,Number of replica additions attempted by the replicate queue,Replica Additions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.addreplica.error,Number of failed replica additions processed by the replicate queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.addreplica.success,Number of successful replica additions processed by the replicate queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.addvoterreplica,Number of voter replica additions attempted by the replicate queue,Replica Additions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.nonvoterpromotions,Number of non-voters promoted to voters by the replicate queue,Promotions of Non Voters to Voters,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.pending,Number of pending replicas in the replicate queue,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,queue.replicate.process.failure,Number of replicas which failed processing in the replicate queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.process.success,Number of replicas successfully processed by the replicate queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.processingnanos,Nanoseconds spent processing replicas in the replicate queue,Processing Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.purgatory,"Number of replicas in the replicate queue's purgatory, awaiting allocation options",Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,queue.replicate.rebalancenonvoterreplica,Number of non-voter replica rebalancer-initiated additions attempted by the replicate queue,Replica Additions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.rebalancereplica,Number of replica rebalancer-initiated additions attempted by the replicate queue,Replica Additions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.rebalancevoterreplica,Number of voter replica rebalancer-initiated additions attempted by the replicate queue,Replica Additions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removedeadnonvoterreplica,Number of dead non-voter replica removals attempted by the replicate queue (typically in response to a node outage),Replica Removals,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removedeadreplica,Number of dead replica removals attempted by the replicate queue (typically in response to a node outage),Replica Removals,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removedeadreplica.error,Number of failed dead replica removals processed by the replicate queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removedeadreplica.success,Number of successful dead replica removals processed by the replicate queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removedeadvoterreplica,Number of dead voter replica removals attempted by the replicate queue (typically in response to a node outage),Replica Removals,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removedecommissioningnonvoterreplica,Number of decommissioning non-voter replica removals attempted by the replicate queue (typically in response to a node outage),Replica Removals,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removedecommissioningreplica,Number of decommissioning replica removals attempted by the replicate queue (typically in response to a node outage),Replica Removals,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removedecommissioningreplica.error,Number of failed decommissioning replica removals processed by the replicate queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removedecommissioningreplica.success,Number of successful decommissioning replica removals processed by the replicate queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removedecommissioningvoterreplica,Number of decommissioning voter replica removals attempted by the replicate queue (typically in response to a node outage),Replica Removals,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removelearnerreplica,Number of learner replica removals attempted by the replicate queue (typically due to internal race conditions),Replica Removals,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removenonvoterreplica,Number of non-voter replica removals attempted by the replicate queue (typically in response to a rebalancer-initiated addition),Replica Removals,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removereplica,Number of replica removals attempted by the replicate queue (typically in response to a rebalancer-initiated addition),Replica Removals,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removereplica.error,Number of failed replica removals processed by the replicate queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removereplica.success,Number of successful replica removals processed by the replicate queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removevoterreplica,Number of voter replica removals attempted by the replicate queue (typically in response to a rebalancer-initiated addition),Replica Removals,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.replacedeadreplica.error,Number of failed dead replica replacements processed by the replicate queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.replacedeadreplica.success,Number of successful dead replica replacements processed by the replicate queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.replacedecommissioningreplica.error,Number of failed decommissioning replica replacements processed by the replicate queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.replacedecommissioningreplica.success,Number of successful decommissioning replica replacements processed by the replicate queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.transferlease,Number of range lease transfers attempted by the replicate queue,Lease Transfers,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.voterdemotions,Number of voters demoted to non-voters by the replicate queue,Demotions of Voters to Non Voters,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.split.load_based,Number of range splits due to a range being greater than the configured max range load,Range Splits,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.split.pending,Number of pending replicas in the split queue,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,queue.split.process.failure,Number of replicas which failed processing in the split queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.split.process.success,Number of replicas successfully processed by the split queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.split.processingnanos,Nanoseconds spent processing replicas in the split queue,Processing Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.split.purgatory,"Number of replicas in the split queue's purgatory, waiting to become splittable",Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,queue.split.size_based,Number of range splits due to a range being greater than the configured max range size,Range Splits,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.split.span_config_based,Number of range splits due to span configuration,Range Splits,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.tsmaintenance.pending,Number of pending replicas in the time series maintenance queue,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,queue.tsmaintenance.process.failure,Number of replicas which failed processing in the time series maintenance queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.tsmaintenance.process.success,Number of replicas successfully processed by the time series maintenance queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.tsmaintenance.processingnanos,Nanoseconds spent processing replicas in the time series maintenance queue,Processing Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.commands.proposed,"Number of Raft commands proposed.
+
+The number of proposals and all kinds of reproposals made by leaseholders. This
+metric approximates the number of commands submitted through Raft.",Commands,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.commands.reproposed.new-lai,"Number of Raft commands re-proposed with a newer LAI.
+
+The number of Raft commands that leaseholders re-proposed with a modified LAI.
+Such re-proposals happen for commands that are committed to Raft out of intended
+order, and hence can not be applied as is.",Commands,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.commands.reproposed.unchanged,"Number of Raft commands re-proposed without modification.
+
+The number of Raft commands that leaseholders re-proposed without modification.
+Such re-proposals happen for commands that are not committed/applied within a
+timeout, and have a high chance of being dropped.",Commands,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.commandsapplied,"Number of Raft commands applied.
+
+This measurement is taken on the Raft apply loops of all Replicas (leaders and
+followers alike), meaning that it does not measure the number of Raft commands
+*proposed* (in the hypothetical extreme case, all Replicas may apply all commands
+through snapshots, thus not increasing this metric at all).
+Instead, it is a proxy for how much work is being done advancing the Replica
+state machines on this node.",Commands,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.dropped,"Number of Raft proposals dropped (this counts individial raftpb.Entry, not raftpb.MsgProp)",Proposals,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.dropped_leader,"Number of Raft proposals dropped by a Replica that believes itself to be the leader; each update also increments `raft.dropped` (this counts individial raftpb.Entry, not raftpb.MsgProp)",Proposals,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.entrycache.accesses,Number of cache lookups in the Raft entry cache,Accesses,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.entrycache.bytes,Aggregate size of all Raft entries in the Raft entry cache,Entry Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,raft.entrycache.hits,Number of successful cache lookups in the Raft entry cache,Hits,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.entrycache.read_bytes,Counter of bytes in entries returned from the Raft entry cache,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.entrycache.size,Number of Raft entries in the Raft entry cache,Entry Count,GAUGE,COUNT,AVG,NONE
+STORAGE,raft.heartbeats.pending,Number of pending heartbeats and responses waiting to be coalesced,Messages,GAUGE,COUNT,AVG,NONE
+STORAGE,raft.process.applycommitted.latency,"Latency histogram for applying all committed Raft commands in a Raft ready.
+
+This measures the end-to-end latency of applying all commands in a Raft ready. Note that
+this closes over possibly multiple measurements of the 'raft.process.commandcommit.latency'
+metric, which receives datapoints for each sub-batch processed in the process.",Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,raft.process.commandcommit.latency,"Latency histogram for applying a batch of Raft commands to the state machine.
+
+This metric is misnamed: it measures the latency for *applying* a batch of
+committed Raft commands to a Replica state machine. This requires only
+non-durable I/O (except for replication configuration changes).
+
+Note that a ""batch"" in this context is really a sub-batch of the batch received
+for application during raft ready handling. The
+'raft.process.applycommitted.latency' histogram is likely more suitable in most
+cases, as it measures the total latency across all sub-batches (i.e. the sum of
+commandcommit.latency for a complete batch).
+",Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,raft.process.handleready.latency,"Latency histogram for handling a Raft ready.
+
+This measures the end-to-end-latency of the Raft state advancement loop, including:
+- snapshot application
+- SST ingestion
+- durably appending to the Raft log (i.e. includes fsync)
+- entry application (incl. replicated side effects, notably log truncation)
+
+These include work measured in 'raft.process.commandcommit.latency' and
+'raft.process.applycommitted.latency'. However, matching percentiles of these
+metrics may be *higher* than handleready, since not every handleready cycle
+leads to an update of the others. For example, under tpcc-100 on a single node,
+the handleready count is approximately twice the logcommit count (and logcommit
+count tracks closely with applycommitted count).
+
+High percentile outliers can be caused by individual large Raft commands or
+storage layer blips. Lower percentile (e.g. 50th) increases are often driven by
+CPU exhaustion or storage layer slowdowns.
+",Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,raft.process.logcommit.latency,"Latency histogram for committing Raft log entries to stable storage
+
+This measures the latency of durably committing a group of newly received Raft
+entries as well as the HardState entry to disk. This excludes any data
+processing, i.e. we measure purely the commit latency of the resulting Engine
+write. Homogeneous bands of p50-p99 latencies (in the presence of regular Raft
+traffic), make it likely that the storage layer is healthy. Spikes in the
+latency bands can either hint at the presence of large sets of Raft entries
+being received, or at performance issues at the storage layer.
+",Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,raft.process.tickingnanos,Nanoseconds spent in store.processRaft() processing replica.Tick(),Processing Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.process.workingnanos,"Nanoseconds spent in store.processRaft() working.
+
+This is the sum of the measurements passed to the raft.process.handleready.latency
+histogram.
+",Processing Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.quota_pool.percent_used,Histogram of proposal quota pool utilization (0-100) per leaseholder per metrics interval,Percent,HISTOGRAM,COUNT,AVG,NONE
+STORAGE,raft.rcvd.app,Number of MsgApp messages received by this store,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.appresp,Number of MsgAppResp messages received by this store,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.bytes,"Number of bytes in Raft messages received by this store. Note
+ that this does not include raft snapshot received.",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.cross_region.bytes,"Number of bytes received by this store for cross region Raft messages
+ (when region tiers are configured). Note that this does not include raft
+ snapshot received.",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.cross_zone.bytes,"Number of bytes received by this store for cross zone, same region
+ Raft messages (when region and zone tiers are configured). If region tiers
+ are not configured, this count may include data sent between different
+ regions. To ensure accurate monitoring of transmitted data, it is important
+ to set up a consistent locality configuration across nodes. Note that this
+ does not include raft snapshot received.",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.dropped,Number of incoming Raft messages dropped (due to queue length or size),Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.dropped_bytes,Bytes of dropped incoming Raft messages,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.heartbeat,"Number of (coalesced, if enabled) MsgHeartbeat messages received by this store",Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.heartbeatresp,"Number of (coalesced, if enabled) MsgHeartbeatResp messages received by this store",Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.prevote,Number of MsgPreVote messages received by this store,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.prevoteresp,Number of MsgPreVoteResp messages received by this store,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.prop,Number of MsgProp messages received by this store,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.queued_bytes,Number of bytes in messages currently waiting for raft processing,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,raft.rcvd.snap,Number of MsgSnap messages received by this store,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.stepped_bytes,"Number of bytes in messages processed by Raft.
+
+Messages reflected here have been handed to Raft (via RawNode.Step). This does not imply that the
+messages are no longer held in memory or that IO has been performed. Raft delegates IO activity to
+Raft ready handling, which occurs asynchronously. Since handing messages to Raft serializes with
+Raft ready handling and size the size of an entry is dominated by the contained pebble WriteBatch,
+on average the rate at which this metric increases is a good proxy for the rate at which Raft ready
+handling consumes writes.
+",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.timeoutnow,Number of MsgTimeoutNow messages received by this store,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.transferleader,Number of MsgTransferLeader messages received by this store,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.vote,Number of MsgVote messages received by this store,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.voteresp,Number of MsgVoteResp messages received by this store,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.replication.latency,"The duration elapsed between having evaluated a BatchRequest and it being
+reflected in the proposer's state machine (i.e. having applied fully).
+
+This encompasses time spent in the quota pool, in replication (including
+reproposals), and application, but notably *not* sequencing latency (i.e.
+contention and latch acquisition).
+
+No measurement is recorded for read-only commands as well as read-write commands
+which end up not writing (such as a DeleteRange on an empty span). Commands that
+result in 'above-replication' errors (i.e. txn retries, etc) are similarly
+excluded. Errors that arise while waiting for the in-flight replication result
+or result from application of the command are included.
+
+Note also that usually, clients are signalled at beginning of application, but
+the recorded measurement captures the entirety of log application.
+
+The duration is always measured on the proposer, even if the Raft leader and
+leaseholder are not colocated, or the request is proposed from a follower.
+
+Commands that use async consensus will still cause a measurement that reflects
+the actual replication latency, despite returning early to the client.",Latency,HISTOGRAM,COUNT,AVG,NONE
+STORAGE,raft.scheduler.latency,"Queueing durations for ranges waiting to be processed by the Raft scheduler.
+
+This histogram measures the delay from when a range is registered with the scheduler
+for processing to when it is actually processed. This does not include the duration
+of processing.
+",Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,raft.sent.bytes,"Number of bytes in Raft messages sent by this store. Note that
+ this does not include raft snapshot sent.",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.sent.cross_region.bytes,"Number of bytes sent by this store for cross region Raft messages
+ (when region tiers are configured). Note that this does not include raft
+ snapshot sent.",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.sent.cross_zone.bytes,"Number of bytes sent by this store for cross zone, same region Raft
+ messages (when region and zone tiers are configured). If region tiers are
+ not configured, this count may include data sent between different regions.
+ To ensure accurate monitoring of transmitted data, it is important to set up
+ a consistent locality configuration across nodes. Note that this does not
+ include raft snapshot sent.",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.storage.read_bytes,"Counter of raftpb.Entry.Size() read from pebble for raft log entries.
+
+These are the bytes returned from the (raft.Storage).Entries method that were not
+returned via the raft entry cache. This metric plus the raft.entrycache.read_bytes
+metric represent the total bytes returned from the Entries method.
+
+Since pebble might serve these entries from the block cache, only a fraction of this
+throughput might manifest in disk metrics.
+
+Entries tracked in this metric incur an unmarshalling-related CPU and memory
+overhead that would not be incurred would the entries be served from the raft
+entry cache.
+
+The bytes returned here do not correspond 1:1 to bytes read from pebble. This
+metric measures the in-memory size of the raftpb.Entry, whereas we read its
+encoded representation from pebble. As there is no compression involved, these
+will generally be comparable.
+
+A common reason for elevated measurements on this metric is that a store is
+falling behind on raft log application. The raft entry cache generally tracks
+entries that were recently appended, so if log application falls behind the
+cache will already have moved on to newer entries.
+",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.ticks,Number of Raft ticks queued,Ticks,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.timeoutcampaign,Number of Raft replicas campaigning after missed heartbeats from leader,Elections called after timeout,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.transport.flow-token-dispatches-dropped,Number of flow token dispatches dropped by the Raft Transport,Dispatches,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.transport.rcvd,Number of Raft messages received by the Raft Transport,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.transport.reverse-rcvd,"Messages received from the reverse direction of a stream.
+
+These messages should be rare. They are mostly informational, and are not actual
+responses to Raft messages. Responses are received over another stream.",Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.transport.reverse-sent,"Messages sent in the reverse direction of a stream.
+
+These messages should be rare. They are mostly informational, and are not actual
+responses to Raft messages. Responses are sent over another stream.",Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.transport.send-queue-bytes,"The total byte size of pending outgoing messages in the queue.
+
+The queue is composed of multiple bounded channels associated with different
+peers. A size higher than the average baseline could indicate issues streaming
+messages to at least one peer. Use this metric together with send-queue-size, to
+have a fuller picture.",Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,raft.transport.send-queue-size,"Number of pending outgoing messages in the Raft Transport queue.
+
+The queue is composed of multiple bounded channels associated with different
+peers. The overall size of tens of thousands could indicate issues streaming
+messages to at least one peer. Use this metric in conjunction with
+send-queue-bytes.",Messages,GAUGE,COUNT,AVG,NONE
+STORAGE,raft.transport.sends-dropped,Number of Raft message sends dropped by the Raft Transport,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.transport.sent,Number of Raft messages sent by the Raft Transport,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raftlog.behind,"Number of Raft log entries followers on other stores are behind.
+
+This gauge provides a view of the aggregate number of log entries the Raft leaders
+on this node think the followers are behind. Since a raft leader may not always
+have a good estimate for this information for all of its followers, and since
+followers are expected to be behind (when they are not required as part of a
+quorum) *and* the aggregate thus scales like the count of such followers, it is
+difficult to meaningfully interpret this metric.",Log Entries,GAUGE,COUNT,AVG,NONE
+STORAGE,raftlog.truncated,Number of Raft log entries truncated,Log Entries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.adds,Number of range additions,Range Ops,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.merges,Number of range merges,Range Ops,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.raftleaderremovals,Number of times the current Raft leader was removed from a range,Raft leader removals,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.raftleadertransfers,Number of raft leader transfers,Leader Transfers,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.recoveries,"Count of offline loss of quorum recovery operations performed on ranges.
+
+This count increments for every range recovered in offline loss of quorum
+recovery operation. Metric is updated when node on which survivor replica
+is located starts following the recovery.",Quorum Recoveries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.removes,Number of range removals,Range Ops,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.applied-initial,Number of snapshots applied for initial upreplication,Snapshots,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.applied-non-voter,Number of snapshots applied by non-voter replicas,Snapshots,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.applied-voter,Number of snapshots applied by voter replicas,Snapshots,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.cross-region.rcvd-bytes,Number of snapshot bytes received cross region,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.cross-region.sent-bytes,Number of snapshot bytes sent cross region,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.cross-zone.rcvd-bytes,"Number of snapshot bytes received cross zone within same region or if
+ region tiers are not configured. This count increases for each snapshot
+ received between different zones within the same region. However, if the
+ region tiers are not configured, this count may also include snapshot data
+ received between different regions. Ensuring consistent configuration of
+ region and zone tiers across nodes helps to accurately monitor the data
+ transmitted.",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.cross-zone.sent-bytes,"Number of snapshot bytes sent cross zone within same region or if
+ region tiers are not configured. This count increases for each snapshot sent
+ between different zones within the same region. However, if the region tiers
+ are not configured, this count may also include snapshot data sent between
+ different regions. Ensuring consistent configuration of region and zone
+ tiers across nodes helps to accurately monitor the data transmitted.",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.delegate.failures,"Number of snapshots that were delegated to a different node and
+resulted in failure on that delegate. There are numerous reasons a failure can
+occur on a delegate such as timeout, the delegate Raft log being too far behind
+or the delegate being too busy to send.
+",Snapshots,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.delegate.in-progress,Number of delegated snapshots that are currently in-flight.,Snapshots,GAUGE,COUNT,AVG,NONE
+STORAGE,range.snapshots.delegate.sent-bytes,"Bytes sent using a delegate.
+
+The number of bytes sent as a result of a delegate snapshot request
+that was originated from a different node. This metric is useful in
+evaluating the network savings of not sending cross region traffic.
+",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.delegate.successes,"Number of snapshots that were delegated to a different node and
+resulted in success on that delegate. This does not count self delegated snapshots.
+",Snapshots,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.generated,Number of generated snapshots,Snapshots,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.rcvd-bytes,Number of snapshot bytes received,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.rebalancing.rcvd-bytes,Number of rebalancing snapshot bytes received,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.rebalancing.sent-bytes,Number of rebalancing snapshot bytes sent,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.recovery.rcvd-bytes,Number of recovery snapshot bytes received,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.recovery.sent-bytes,Number of recovery snapshot bytes sent,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.recv-failed,"Number of range snapshot initialization messages that errored out on the recipient, typically before any data is transferred",Snapshots,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.recv-in-progress,Number of non-empty snapshots being received,Snapshots,GAUGE,COUNT,AVG,NONE
+STORAGE,range.snapshots.recv-queue,Number of snapshots queued to receive,Snapshots,GAUGE,COUNT,AVG,NONE
+STORAGE,range.snapshots.recv-queue-bytes,Total size of all snapshots in the snapshot receive queue,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,range.snapshots.recv-total-in-progress,Number of total snapshots being received,Snapshots,GAUGE,COUNT,AVG,NONE
+STORAGE,range.snapshots.recv-unusable,Number of range snapshot that were fully transmitted but determined to be unnecessary or unusable,Snapshots,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.send-in-progress,Number of non-empty snapshots being sent,Snapshots,GAUGE,COUNT,AVG,NONE
+STORAGE,range.snapshots.send-queue,Number of snapshots queued to send,Snapshots,GAUGE,COUNT,AVG,NONE
+STORAGE,range.snapshots.send-queue-bytes,Total size of all snapshots in the snapshot send queue,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,range.snapshots.send-total-in-progress,Number of total snapshots being sent,Snapshots,GAUGE,COUNT,AVG,NONE
+STORAGE,range.snapshots.sent-bytes,Number of snapshot bytes sent,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.unknown.rcvd-bytes,Number of unknown snapshot bytes received,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.unknown.sent-bytes,Number of unknown snapshot bytes sent,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.splits,Number of range splits,Range Ops,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rangekeybytes,Number of bytes taken up by range keys (e.g. MVCC range tombstones),Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,rangekeycount,Count of all range keys (e.g. MVCC range tombstones),Keys,GAUGE,COUNT,AVG,NONE
+STORAGE,ranges,Number of ranges,Ranges,GAUGE,COUNT,AVG,NONE
+STORAGE,ranges.overreplicated,Number of ranges with more live replicas than the replication target,Ranges,GAUGE,COUNT,AVG,NONE
+STORAGE,ranges.unavailable,Number of ranges with fewer live replicas than needed for quorum,Ranges,GAUGE,COUNT,AVG,NONE
+STORAGE,ranges.underreplicated,Number of ranges with fewer live replicas than the replication target,Ranges,GAUGE,COUNT,AVG,NONE
+STORAGE,rangevalbytes,Number of bytes taken up by range key values (e.g. MVCC range tombstones),Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,rangevalcount,Count of all range key values (e.g. MVCC range tombstones),MVCC Values,GAUGE,COUNT,AVG,NONE
+STORAGE,rebalancing.cpunanospersecond,Average CPU nanoseconds spent on processing replica operations in the last 30 minutes.,Nanoseconds/Sec,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,rebalancing.lease.transfers,Number of lease transfers motivated by store-level load imbalances,Lease Transfers,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rebalancing.queriespersecond,"Number of kv-level requests received per second by the store, considering the last 30 minutes, as used in rebalancing decisions.",Queries/Sec,GAUGE,COUNT,AVG,NONE
+STORAGE,rebalancing.range.rebalances,Number of range rebalance operations motivated by store-level load imbalances,Range Rebalances,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rebalancing.readbytespersecond,"Number of bytes read recently per second, considering the last 30 minutes.",Bytes/Sec,GAUGE,BYTES,AVG,NONE
+STORAGE,rebalancing.readspersecond,"Number of keys read recently per second, considering the last 30 minutes.",Keys/Sec,GAUGE,COUNT,AVG,NONE
+STORAGE,rebalancing.replicas.cpunanospersecond,Histogram of average CPU nanoseconds spent on processing replica operations in the last 30 minutes.,Nanoseconds/Sec,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,rebalancing.replicas.queriespersecond,Histogram of average kv-level requests received per second by replicas on the store in the last 30 minutes.,Queries/Sec,HISTOGRAM,COUNT,AVG,NONE
+STORAGE,rebalancing.requestspersecond,"Number of requests received recently per second, considering the last 30 minutes.",Requests/Sec,GAUGE,COUNT,AVG,NONE
+STORAGE,rebalancing.state.imbalanced_overfull_options_exhausted,Number of occurrences where this store was overfull but failed to shed load after exhausting available rebalance options,Overfull Options Exhausted,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rebalancing.writebytespersecond,"Number of bytes written recently per second, considering the last 30 minutes.",Bytes/Sec,GAUGE,BYTES,AVG,NONE
+STORAGE,rebalancing.writespersecond,"Number of keys written (i.e. applied by raft) per second to the store, considering the last 30 minutes.",Keys/Sec,GAUGE,COUNT,AVG,NONE
+STORAGE,replicas,Number of replicas,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,replicas.leaders,Number of raft leaders,Raft Leaders,GAUGE,COUNT,AVG,NONE
+STORAGE,replicas.leaders_invalid_lease,Number of replicas that are Raft leaders whose lease is invalid,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,replicas.leaders_not_leaseholders,Number of replicas that are Raft leaders whose range lease is held by another store,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,replicas.leaseholders,Number of lease holders,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,replicas.quiescent,Number of quiesced replicas,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,replicas.reserved,Number of replicas reserved for snapshots,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,replicas.uninitialized,"Number of uninitialized replicas, this does not include uninitialized replicas that can lie dormant in a persistent state.",Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,requests.backpressure.split,"Number of backpressured writes waiting on a Range split.
+
+A Range will backpressure (roughly) non-system traffic when the range is above
+the configured size until the range splits. When the rate of this metric is
+nonzero over extended periods of time, it should be investigated why splits are
+not occurring.
+",Writes,GAUGE,COUNT,AVG,NONE
+STORAGE,requests.slow.latch,"Number of requests that have been stuck for a long time acquiring latches.
+
+Latches moderate access to the KV keyspace for the purpose of evaluating and
+replicating commands. A slow latch acquisition attempt is often caused by
+another request holding and not releasing its latches in a timely manner. This
+in turn can either be caused by a long delay in evaluation (for example, under
+severe system overload) or by delays at the replication layer.
+
+This gauge registering a nonzero value usually indicates a serious problem and
+should be investigated.
+",Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,requests.slow.lease,"Number of requests that have been stuck for a long time acquiring a lease.
+
+This gauge registering a nonzero value usually indicates range or replica
+unavailability, and should be investigated. In the common case, we also
+expect to see 'requests.slow.raft' to register a nonzero value, indicating
+that the lease requests are not getting a timely response from the replication
+layer.
+",Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,requests.slow.raft,"Number of requests that have been stuck for a long time in the replication layer.
+
+An (evaluated) request has to pass through the replication layer, notably the
+quota pool and raft. If it fails to do so within a highly permissive duration,
+the gauge is incremented (and decremented again once the request is either
+applied or returns an error).
+
+A nonzero value indicates range or replica unavailability, and should be investigated.
+",Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,rocksdb.block.cache.hits,Count of block cache hits,Cache Ops,GAUGE,COUNT,AVG,NONE
+STORAGE,rocksdb.block.cache.misses,Count of block cache misses,Cache Ops,GAUGE,COUNT,AVG,NONE
+STORAGE,rocksdb.block.cache.usage,Bytes used by the block cache,Memory,GAUGE,BYTES,AVG,NONE
+STORAGE,rocksdb.bloom.filter.prefix.checked,Number of times the bloom filter was checked,Bloom Filter Ops,GAUGE,COUNT,AVG,NONE
+STORAGE,rocksdb.bloom.filter.prefix.useful,Number of times the bloom filter helped avoid iterator creation,Bloom Filter Ops,GAUGE,COUNT,AVG,NONE
+STORAGE,rocksdb.compacted-bytes-read,Bytes read during compaction,Bytes Read,GAUGE,BYTES,AVG,NONE
+STORAGE,rocksdb.compacted-bytes-written,Bytes written during compaction,Bytes Written,GAUGE,BYTES,AVG,NONE
+STORAGE,rocksdb.compactions,Number of table compactions,Compactions,GAUGE,COUNT,AVG,NONE
+STORAGE,rocksdb.encryption.algorithm,"Algorithm in use for encryption-at-rest, see ccl/storageccl/engineccl/enginepbccl/key_registry.proto",Encryption At Rest,GAUGE,CONST,AVG,NONE
+STORAGE,rocksdb.estimated-pending-compaction,Estimated pending compaction bytes,Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,rocksdb.flushed-bytes,Bytes written during flush,Bytes Written,GAUGE,BYTES,AVG,NONE
+STORAGE,rocksdb.flushes,Number of table flushes,Flushes,GAUGE,COUNT,AVG,NONE
+STORAGE,rocksdb.ingested-bytes,Bytes ingested,Bytes Ingested,GAUGE,BYTES,AVG,NONE
+STORAGE,rocksdb.memtable.total-size,Current size of memtable in bytes,Memory,GAUGE,BYTES,AVG,NONE
+STORAGE,rocksdb.num-sstables,Number of storage engine SSTables,SSTables,GAUGE,COUNT,AVG,NONE
+STORAGE,rocksdb.read-amplification,Number of disk reads per query,Disk Reads per Query,GAUGE,COUNT,AVG,NONE
+STORAGE,rocksdb.table-readers-mem-estimate,Memory used by index and filter blocks,Memory,GAUGE,BYTES,AVG,NONE
+STORAGE,rpc.batches.recv,Number of batches processed,Batches,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.addsstable.recv,Number of AddSSTable requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.adminchangereplicas.recv,Number of AdminChangeReplicas requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.adminmerge.recv,Number of AdminMerge requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.adminrelocaterange.recv,Number of AdminRelocateRange requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.adminscatter.recv,Number of AdminScatter requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.adminsplit.recv,Number of AdminSplit requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.admintransferlease.recv,Number of AdminTransferLease requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.adminunsplit.recv,Number of AdminUnsplit requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.adminverifyprotectedtimestamp.recv,Number of AdminVerifyProtectedTimestamp requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.barrier.recv,Number of Barrier requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.checkconsistency.recv,Number of CheckConsistency requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.clearrange.recv,Number of ClearRange requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.computechecksum.recv,Number of ComputeChecksum requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.conditionalput.recv,Number of ConditionalPut requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.delete.recv,Number of Delete requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.deleterange.recv,Number of DeleteRange requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.endtxn.recv,Number of EndTxn requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.export.recv,Number of Export requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.gc.recv,Number of GC requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.get.recv,Number of Get requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.heartbeattxn.recv,Number of HeartbeatTxn requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.increment.recv,Number of Increment requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.initput.recv,Number of InitPut requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.isspanempty.recv,Number of IsSpanEmpty requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.leaseinfo.recv,Number of LeaseInfo requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.merge.recv,Number of Merge requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.migrate.recv,Number of Migrate requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.probe.recv,Number of Probe requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.pushtxn.recv,Number of PushTxn requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.put.recv,Number of Put requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.queryintent.recv,Number of QueryIntent requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.querylocks.recv,Number of QueryLocks requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.queryresolvedtimestamp.recv,Number of QueryResolvedTimestamp requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.querytxn.recv,Number of QueryTxn requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.rangestats.recv,Number of RangeStats requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.recomputestats.recv,Number of RecomputeStats requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.recovertxn.recv,Number of RecoverTxn requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.refresh.recv,Number of Refresh requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.refreshrange.recv,Number of RefreshRange requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.requestlease.recv,Number of RequestLease requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.resolveintent.recv,Number of ResolveIntent requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.resolveintentrange.recv,Number of ResolveIntentRange requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.reversescan.recv,Number of ReverseScan requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.revertrange.recv,Number of RevertRange requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.scan.recv,Number of Scan requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.subsume.recv,Number of Subsume requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.transferlease.recv,Number of TransferLease requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.truncatelog.recv,Number of TruncateLog requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.writebatch.recv,Number of WriteBatch requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.streams.mux_rangefeed.active,Number of currently running MuxRangeFeed streams,Streams,GAUGE,COUNT,AVG,NONE
+STORAGE,rpc.streams.mux_rangefeed.recv,Total number of MuxRangeFeed streams,Streams,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.streams.rangefeed.active,Number of currently running RangeFeed streams,Streams,GAUGE,COUNT,AVG,NONE
+STORAGE,rpc.streams.rangefeed.recv,Total number of RangeFeed streams,Streams,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,spanconfig.kvsubscriber.oldest_protected_record_nanos,Difference between the current time and the oldest protected timestamp (sudden drops indicate a record being released; an ever increasing number indicates that the oldest record is around and preventing GC if > configured GC TTL),Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,spanconfig.kvsubscriber.protected_record_count,"Number of protected timestamp records, as seen by KV",Records,GAUGE,COUNT,AVG,NONE
+STORAGE,spanconfig.kvsubscriber.update_behind_nanos,Difference between the current time and when the KVSubscriber received its last update (an ever increasing number indicates that we're no longer receiving updates),Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,storage.batch-commit.commit-wait.duration,"Cumulative time spent waiting for WAL sync, for batch commit. See storage.AggregatedBatchCommitStats for details.",Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,storage.batch-commit.count,Count of batch commits. See storage.AggregatedBatchCommitStats for details.,Commit Ops,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.batch-commit.duration,Cumulative time spent in batch commit. See storage.AggregatedBatchCommitStats for details.,Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,storage.batch-commit.l0-stall.duration,"Cumulative time spent in a write stall due to high read amplification in L0, for batch commit. See storage.AggregatedBatchCommitStats for details.",Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,storage.batch-commit.mem-stall.duration,"Cumulative time spent in a write stall due to too many memtables, for batch commit. See storage.AggregatedBatchCommitStats for details.",Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,storage.batch-commit.sem-wait.duration,"Cumulative time spent in semaphore wait, for batch commit. See storage.AggregatedBatchCommitStats for details.",Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,storage.batch-commit.wal-queue-wait.duration,"Cumulative time spent waiting for memory blocks in the WAL queue, for batch commit. See storage.AggregatedBatchCommitStats for details.",Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,storage.batch-commit.wal-rotation.duration,"Cumulative time spent waiting for WAL rotation, for batch commit. See storage.AggregatedBatchCommitStats for details.",Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,storage.checkpoints,"The number of checkpoint directories found in storage.
+
+This is the number of directories found in the auxiliary/checkpoints directory.
+Each represents an immutable point-in-time storage engine checkpoint. They are
+cheap (consisting mostly of hard links), but over time they effectively become a
+full copy of the old state, which increases their relative cost. Checkpoints
+must be deleted once acted upon (e.g. copied elsewhere or investigated).
+
+A likely cause of having a checkpoint is that one of the ranges in this store
+had inconsistent data among its replicas. Such checkpoint directories are
+located in auxiliary/checkpoints/rN_at_M, where N is the range ID, and M is the
+Raft applied index at which this checkpoint was taken.",Directories,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.compactions.duration,"Cumulative sum of all compaction durations.
+
+The rate of this value provides the effective compaction concurrency of a store,
+which can be useful to determine whether the maximum compaction concurrency is
+fully utilized.",Processing Time,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,storage.compactions.keys.pinned.bytes,"Cumulative size of storage engine KVs written to sstables during flushes and compactions due to open LSM snapshots.
+
+Various subsystems of CockroachDB take LSM snapshots to maintain a consistent view
+of the database over an extended duration. In order to maintain the consistent view,
+flushes and compactions within the storage engine must preserve keys that otherwise
+would have been dropped. This increases write amplification, and introduces keys
+that must be skipped during iteration. This metric records the cumulative number of
+bytes preserved during flushes and compactions over the lifetime of the process.
+",Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.compactions.keys.pinned.count,"Cumulative count of storage engine KVs written to sstables during flushes and compactions due to open LSM snapshots.
+
+Various subsystems of CockroachDB take LSM snapshots to maintain a consistent view
+of the database over an extended duration. In order to maintain the consistent view,
+flushes and compactions within the storage engine must preserve keys that otherwise
+would have been dropped. This increases write amplification, and introduces keys
+that must be skipped during iteration. This metric records the cumulative count of
+KVs preserved during flushes and compactions over the lifetime of the process.
+",Keys,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.disk-slow,Number of instances of disk operations taking longer than 10s,Events,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.disk-stalled,Number of instances of disk operations taking longer than 20s,Events,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.flush.ingest.count,Flushes performing an ingest (flushable ingestions),Flushes,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.flush.ingest.table.bytes,Bytes ingested via flushes (flushable ingestions),Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.flush.ingest.table.count,Tables ingested via flushes (flushable ingestions),Tables,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.flush.utilization,The percentage of time the storage engine is actively flushing memtables to disk.,Flush Utilization,GAUGE,PERCENT,AVG,NONE
+STORAGE,storage.ingest.count,Number of successful ingestions performed,Events,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.iterator.block-load.bytes,Bytes loaded by storage engine iterators (possibly cached). See storage.AggregatedIteratorStats for details.,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.iterator.block-load.cached-bytes,Bytes loaded by storage engine iterators from the block cache. See storage.AggregatedIteratorStats for details.,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.iterator.block-load.read-duration,Cumulative time storage engine iterators spent loading blocks from durable storage. See storage.AggregatedIteratorStats for details.,Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,storage.iterator.external.seeks,Cumulative count of seeks performed on storage engine iterators. See storage.AggregatedIteratorStats for details.,Iterator Ops,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.iterator.external.steps,Cumulative count of steps performed on storage engine iterators. See storage.AggregatedIteratorStats for details.,Iterator Ops,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.iterator.internal.seeks,"Cumulative count of seeks performed internally within storage engine iterators.
+
+A value high relative to 'storage.iterator.external.seeks'
+is a good indication that there's an accumulation of garbage
+internally within the storage engine.
+
+See storage.AggregatedIteratorStats for details.",Iterator Ops,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.iterator.internal.steps,"Cumulative count of steps performed internally within storage engine iterators.
+
+A value high relative to 'storage.iterator.external.steps'
+is a good indication that there's an accumulation of garbage
+internally within the storage engine.
+
+See storage.AggregatedIteratorStats for more details.",Iterator Ops,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.keys.range-key-set.count,Approximate count of RangeKeySet internal keys across the storage engine.,Keys,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.keys.tombstone.count,"Approximate count of DEL, SINGLEDEL and RANGEDEL internal keys across the storage engine.",Keys,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.l0-bytes-flushed,Number of bytes flushed (from memtables) into Level 0,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.l0-bytes-ingested,Number of bytes ingested directly into Level 0,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.l0-level-score,Compaction score of level 0,Score,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.l0-level-size,Size of the SSTables in level 0,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.l0-num-files,Number of SSTables in Level 0,SSTables,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.l0-sublevels,Number of Level 0 sublevels,Sublevels,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.l1-bytes-ingested,Number of bytes ingested directly into Level 1,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.l1-level-score,Compaction score of level 1,Score,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.l1-level-size,Size of the SSTables in level 1,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.l2-bytes-ingested,Number of bytes ingested directly into Level 2,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.l2-level-score,Compaction score of level 2,Score,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.l2-level-size,Size of the SSTables in level 2,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.l3-bytes-ingested,Number of bytes ingested directly into Level 3,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.l3-level-score,Compaction score of level 3,Score,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.l3-level-size,Size of the SSTables in level 3,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.l4-bytes-ingested,Number of bytes ingested directly into Level 4,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.l4-level-score,Compaction score of level 4,Score,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.l4-level-size,Size of the SSTables in level 4,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.l5-bytes-ingested,Number of bytes ingested directly into Level 5,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.l5-level-score,Compaction score of level 5,Score,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.l5-level-size,Size of the SSTables in level 5,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.l6-bytes-ingested,Number of bytes ingested directly into Level 6,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.l6-level-score,Compaction score of level 6,Score,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.l6-level-size,Size of the SSTables in level 6,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.marked-for-compaction-files,Count of SSTables marked for compaction,SSTables,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.queue.store-failures,Number of replicas which failed processing in replica queues due to retryable store errors,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.secondary-cache.count,The count of cache blocks in the secondary cache (not sstable blocks),Cache items,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.secondary-cache.evictions,The number of times a cache block was evicted from the secondary cache,Num evictions,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.secondary-cache.reads-full-hit,The number of reads where all data returned was read from the secondary cache,Num reads,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.secondary-cache.reads-multi-block,The number of secondary cache reads that require reading data from 2+ cache blocks,Num reads,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.secondary-cache.reads-multi-shard,The number of secondary cache reads that require reading data from 2+ shards,Num reads,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.secondary-cache.reads-no-hit,The number of reads where no data returned was read from the secondary cache,Num reads,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.secondary-cache.reads-partial-hit,The number of reads where some data returned was read from the secondary cache,Num reads,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.secondary-cache.reads-total,The number of reads from the secondary cache,Num reads,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.secondary-cache.size,The number of sstable bytes stored in the secondary cache,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.secondary-cache.write-back-failures,The number of times writing a cache block to the secondary cache failed,Num failures,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.shared-storage.read,Bytes read from shared storage,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.shared-storage.write,Bytes written to external storage,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.single-delete.ineffectual,Number of SingleDeletes that were ineffectual,Events,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.single-delete.invariant-violation,Number of SingleDelete invariant violations,Events,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.wal.bytes_in,The number of logical bytes the storage engine has written to the WAL,Events,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.wal.bytes_written,The number of bytes the storage engine has written to the WAL,Events,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.wal.fsync.latency,The write ahead log fsync latency,Fsync Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,storage.write-stall-nanos,Total write stall duration in nanos,Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,storage.write-stalls,Number of instances of intentional write stalls to backpressure incoming writes,Events,GAUGE,COUNT,AVG,NONE
+STORAGE,sysbytes,Number of bytes in system KV pairs,Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,syscount,Count of system KV pairs,Keys,GAUGE,COUNT,AVG,NONE
+STORAGE,tenant.consumption.cross_region_network_ru,Total number of RUs charged for cross-region network traffic,Request Units,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,tenant.consumption.external_io_egress_bytes,Total number of bytes written to external services such as cloud storage providers,Bytes,GAUGE,COUNT,AVG,NONE
+STORAGE,tenant.consumption.external_io_ingress_bytes,Total number of bytes read from external services such as cloud storage providers,Bytes,GAUGE,COUNT,AVG,NONE
+STORAGE,tenant.consumption.kv_request_units,RU consumption attributable to KV,Request Units,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,tenant.consumption.pgwire_egress_bytes,Total number of bytes transferred from a SQL pod to the client,Bytes,GAUGE,COUNT,AVG,NONE
+STORAGE,tenant.consumption.read_batches,Total number of KV read batches,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,tenant.consumption.read_bytes,Total number of bytes read from KV,Bytes,GAUGE,COUNT,AVG,NONE
+STORAGE,tenant.consumption.read_requests,Total number of KV read requests,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,tenant.consumption.request_units,Total RU consumption,Request Units,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,tenant.consumption.sql_pods_cpu_seconds,Total amount of CPU used by SQL pods,CPU Seconds,GAUGE,SECONDS,AVG,NONE
+STORAGE,tenant.consumption.write_batches,Total number of KV write batches,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,tenant.consumption.write_bytes,Total number of bytes written to KV,Bytes,GAUGE,COUNT,AVG,NONE
+STORAGE,tenant.consumption.write_requests,Total number of KV write requests,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,timeseries.write.bytes,Total size in bytes of metric samples written to disk,Storage,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,timeseries.write.errors,Total errors encountered while attempting to write metrics to disk,Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,timeseries.write.samples,Total number of metric samples written to disk,Metric Samples,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,totalbytes,Total number of bytes taken up by keys and values including non-live data,Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,tscache.skl.pages,Number of pages in the timestamp cache,Pages,GAUGE,COUNT,AVG,NONE
+STORAGE,tscache.skl.rotations,Number of page rotations in the timestamp cache,Page Rotations,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txn.commit_waits.before_commit_trigger,Number of KV transactions that had to commit-wait on the server before committing because they had a commit trigger,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txn.server_side.1PC.failure,Number of batches that attempted to commit using 1PC and failed,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txn.server_side.1PC.success,Number of batches that attempted to commit using 1PC and succeeded,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txn.server_side_retry.read_evaluation.failure,Number of read batches that were not successfully refreshed server side,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txn.server_side_retry.read_evaluation.success,Number of read batches that were successfully refreshed server side,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txn.server_side_retry.uncertainty_interval_error.failure,Number of batches that ran into uncertainty interval errors that were not successfully refreshed server side,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txn.server_side_retry.uncertainty_interval_error.success,Number of batches that ran into uncertainty interval errors that were successfully refreshed server side,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txn.server_side_retry.write_evaluation.failure,Number of write batches that were not successfully refreshed server side,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txn.server_side_retry.write_evaluation.success,Number of write batches that were successfully refreshed server side,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txnrecovery.attempts.pending,Number of transaction recovery attempts currently in-flight,Recovery Attempts,GAUGE,COUNT,AVG,NONE
+STORAGE,txnrecovery.attempts.total,Number of transaction recovery attempts executed,Recovery Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txnrecovery.failures,Number of transaction recovery attempts that failed,Recovery Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txnrecovery.successes.aborted,Number of transaction recovery attempts that aborted a transaction,Recovery Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txnrecovery.successes.committed,Number of transaction recovery attempts that committed a transaction,Recovery Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txnrecovery.successes.pending,Number of transaction recovery attempts that left a transaction pending,Recovery Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txnwaitqueue.deadlocks_total,Number of deadlocks detected by the txn wait queue,Deadlocks,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txnwaitqueue.pushee.waiting,Number of pushees on the txn wait queue,Waiting Pushees,GAUGE,COUNT,AVG,NONE
+STORAGE,txnwaitqueue.pusher.slow,The total number of cases where a pusher waited more than the excessive wait threshold,Slow Pushers,GAUGE,COUNT,AVG,NONE
+STORAGE,txnwaitqueue.pusher.wait_time,Histogram of durations spent in queue by pushers,Pusher wait time,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,txnwaitqueue.pusher.waiting,Number of pushers on the txn wait queue,Waiting Pushers,GAUGE,COUNT,AVG,NONE
+STORAGE,txnwaitqueue.query.wait_time,Histogram of durations spent in queue by queries,Query wait time,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,txnwaitqueue.query.waiting,Number of transaction status queries waiting for an updated transaction record,Waiting Queries,GAUGE,COUNT,AVG,NONE
+STORAGE,valbytes,Number of bytes taken up by values,Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,valcount,Count of all values,MVCC Values,GAUGE,COUNT,AVG,NONE
+APPLICATION,backup.last-failed-time.kms-inaccessible,The unix timestamp of the most recent failure of backup due to errKMSInaccessible by a backup specified as maintaining this metric,Jobs,GAUGE,TIMESTAMP_SEC,AVG,NONE
+APPLICATION,changefeed.admit_latency,"Event admission latency: a difference between event MVCC timestamp and the time it was admitted into changefeed pipeline; Note: this metric includes the time spent waiting until event can be processed due to backpressure or time spent resolving schema descriptors. Also note, this metric excludes latency during backfill",Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,changefeed.aggregator_progress,The earliest timestamp up to which any aggregator is guaranteed to have emitted all values for,Unix Timestamp Nanoseconds,GAUGE,TIMESTAMP_NS,AVG,NONE
+APPLICATION,changefeed.backfill_count,Number of changefeeds currently executing backfill,Count,GAUGE,COUNT,AVG,NONE
+APPLICATION,changefeed.backfill_pending_ranges,Number of ranges in an ongoing backfill that are yet to be fully emitted,Count,GAUGE,COUNT,AVG,NONE
+APPLICATION,changefeed.batch_reduction_count,Number of times a changefeed aggregator node attempted to reduce the size of message batches it emitted to the sink,Batch Size Reductions,GAUGE,COUNT,AVG,NONE
+APPLICATION,changefeed.buffer_entries.allocated_mem,Current quota pool memory allocation,Bytes,GAUGE,BYTES,AVG,NONE
+APPLICATION,changefeed.buffer_entries.flush,Number of flush elements added to the buffer,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.buffer_entries.in,Total entries entering the buffer between raft and changefeed sinks,Entries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.buffer_entries.kv,Number of kv elements added to the buffer,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.buffer_entries.out,Total entries leaving the buffer between raft and changefeed sinks,Entries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.buffer_entries.released,"Total entries processed, emitted and acknowledged by the sinks",Entries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.buffer_entries.resolved,Number of resolved elements added to the buffer,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.buffer_entries_mem.acquired,Total amount of memory acquired for entries as they enter the system,Entries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.buffer_entries_mem.released,Total amount of memory released by the entries after they have been emitted,Entries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.buffer_pushback_nanos,Total time spent waiting while the buffer was full,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.bytes.messages_pushback_nanos,Total time spent throttled for bytes quota,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.checkpoint_hist_nanos,Time spent checkpointing changefeed progress,Changefeeds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,changefeed.checkpoint_progress,The earliest timestamp of any changefeed's persisted checkpoint (values prior to this timestamp will never need to be re-emitted),Unix Timestamp Nanoseconds,GAUGE,TIMESTAMP_NS,AVG,NONE
+APPLICATION,changefeed.cloudstorage_buffered_bytes,The number of bytes buffered in cloudstorage sink files which have not been emitted yet,Bytes,GAUGE,COUNT,AVG,NONE
+APPLICATION,changefeed.commit_latency,"Event commit latency: a difference between event MVCC timestamp and the time it was acknowledged by the downstream sink. If the sink batches events, then the difference between the oldest event in the batch and acknowledgement is recorded; Excludes latency during backfill",Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,changefeed.emitted_bytes,Bytes emitted by all feeds,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.emitted_messages,Messages emitted by all feeds,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.error_retries,Total retryable errors encountered by all changefeeds,Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.failures,Total number of changefeed jobs which have failed,Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.filtered_messages,Messages filtered out by all feeds. This count does not include the number of messages that may be filtered due to the range constraints.,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.flush.messages_pushback_nanos,Total time spent throttled for flush quota,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.flush_hist_nanos,Time spent flushing messages across all changefeeds,Changefeeds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,changefeed.flushed_bytes,Bytes emitted by all feeds; maybe different from changefeed.emitted_bytes when compression is enabled,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.flushes,Total flushes across all feeds,Flushes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.forwarded_resolved_messages,Resolved timestamps forwarded from the change aggregator to the change frontier,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.frontier_updates,Number of change frontier updates across all feeds,Updates,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.internal_retry_message_count,Number of messages for which an attempt to retry them within an aggregator node was made,Messages,GAUGE,COUNT,AVG,NONE
+APPLICATION,changefeed.lagging_ranges,The number of ranges considered to be lagging behind,Ranges,GAUGE,COUNT,AVG,NONE
+APPLICATION,changefeed.max_behind_nanos,(Deprecated in favor of checkpoint_progress) The most any changefeed's persisted checkpoint is behind the present,Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+APPLICATION,changefeed.message_size_hist,Message size histogram,Bytes,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,changefeed.messages.messages_pushback_nanos,Total time spent throttled for messages quota,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.nprocs_consume_event_nanos,Total time spent waiting to add an event to the parallel consumer,Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,changefeed.nprocs_flush_nanos,Total time spent idle waiting for the parallel consumer to flush,Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,changefeed.nprocs_in_flight_count,Number of buffered events in the parallel consumer,Count of Events,GAUGE,COUNT,AVG,NONE
+APPLICATION,changefeed.parallel_io_queue_nanos,Time spent with outgoing requests to the sink waiting in queue due to inflight requests with conflicting keys,Changefeeds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,changefeed.queue_time_nanos,Time KV event spent waiting to be processed,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.running,"Number of currently running changefeeds, including sinkless",Changefeeds,GAUGE,COUNT,AVG,NONE
+APPLICATION,changefeed.schema_registry.registrations,Number of registration attempts with the schema registry,Registrations,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.schema_registry.retry_count,Number of retries encountered when sending requests to the schema registry,Retries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.schemafeed.table_history_scans,The number of table history scans during polling,Counts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.schemafeed.table_metadata_nanos,Time blocked while verifying table metadata histories,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.sink_batch_hist_nanos,Time spent batched in the sink buffer before being flushed and acknowledged,Changefeeds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,changefeed.sink_io_inflight,The number of keys currently inflight as IO requests being sent to the sink,Messages,GAUGE,COUNT,AVG,NONE
+APPLICATION,changefeed.size_based_flushes,Total size based flushes across all feeds,Flushes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,clock-offset.meannanos,Mean clock offset with other nodes,Clock Offset,GAUGE,NANOSECONDS,AVG,NONE
+APPLICATION,clock-offset.stddevnanos,Stddev clock offset with other nodes,Clock Offset,GAUGE,NANOSECONDS,AVG,NONE
+APPLICATION,cloud.read_bytes,Bytes read from all cloud operations,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,cloud.write_bytes,Bytes written by all cloud operations,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,cluster.preserve-downgrade-option.last-updated,Unix timestamp of last updated time for cluster.preserve_downgrade_option,Timestamp,GAUGE,TIMESTAMP_SEC,AVG,NONE
+APPLICATION,distsender.batch_requests.cross_region.bytes,"Total byte count of replica-addressed batch requests processed cross
+ region when region tiers are configured",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.batch_requests.cross_zone.bytes,"Total byte count of replica-addressed batch requests processed cross
+ zone within the same region when region and zone tiers are configured.
+ However, if the region tiers are not configured, this count may also include
+ batch data sent between different regions. Ensuring consistent configuration
+ of region and zone tiers across nodes helps to accurately monitor the data
+ transmitted.",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.batch_requests.replica_addressed.bytes,Total byte count of replica-addressed batch requests processed,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.batch_responses.cross_region.bytes,"Total byte count of replica-addressed batch responses received cross
+ region when region tiers are configured",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.batch_responses.cross_zone.bytes,"Total byte count of replica-addressed batch responses received cross
+ zone within the same region when region and zone tiers are configured.
+ However, if the region tiers are not configured, this count may also include
+ batch data received between different regions. Ensuring consistent
+ configuration of region and zone tiers across nodes helps to accurately
+ monitor the data transmitted.",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.batch_responses.replica_addressed.bytes,Total byte count of replica-addressed batch responses received,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.batches,Number of batches processed,Batches,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.batches.async.sent,Number of partial batches sent asynchronously,Partial Batches,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.batches.async.throttled,Number of partial batches not sent asynchronously due to throttling,Partial Batches,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.batches.partial,Number of partial batches processed after being divided on range boundaries,Partial Batches,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.errors.inleasetransferbackoffs,Number of times backed off due to NotLeaseHolderErrors during lease transfer,Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.errors.notleaseholder,Number of NotLeaseHolderErrors encountered from replica-addressed RPCs,Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.catchup_ranges,"Number of ranges in catchup mode
+
+This counts the number of ranges with an active rangefeed that are performing catchup scan.
+",Ranges,GAUGE,COUNT,AVG,NONE
+APPLICATION,distsender.rangefeed.error_catchup_ranges,Number of ranges in catchup mode which experienced an error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.restart_ranges,Number of ranges that were restarted due to transient errors,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.retry.logical_ops_missing,Number of ranges that encountered retryable LOGICAL_OPS_MISSING error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.retry.no_leaseholder,Number of ranges that encountered retryable NO_LEASEHOLDER error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.retry.node_not_found,Number of ranges that encountered retryable node not found error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.retry.raft_snapshot,Number of ranges that encountered retryable RAFT_SNAPSHOT error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.retry.range_key_mismatch,Number of ranges that encountered retryable range key mismatch error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.retry.range_merged,Number of ranges that encountered retryable RANGE_MERGED error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.retry.range_not_found,Number of ranges that encountered retryable range not found error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.retry.range_split,Number of ranges that encountered retryable RANGE_SPLIT error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.retry.rangefeed_closed,Number of ranges that encountered retryable RANGEFEED_CLOSED error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.retry.replica_removed,Number of ranges that encountered retryable REPLICA_REMOVED error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.retry.send,Number of ranges that encountered retryable send error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.retry.slow_consumer,Number of ranges that encountered retryable SLOW_CONSUMER error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.retry.store_not_found,Number of ranges that encountered retryable store not found error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.retry.stuck,Number of ranges that encountered retryable stuck error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.total_ranges,"Number of ranges executing rangefeed
+
+This counts the number of ranges with an active rangefeed.
+",Ranges,GAUGE,COUNT,AVG,NONE
+APPLICATION,distsender.rangelookups,Number of range lookups,Range Lookups,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.addsstable.sent,"Number of AddSSTable requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.adminchangereplicas.sent,"Number of AdminChangeReplicas requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.adminmerge.sent,"Number of AdminMerge requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.adminrelocaterange.sent,"Number of AdminRelocateRange requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.adminscatter.sent,"Number of AdminScatter requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.adminsplit.sent,"Number of AdminSplit requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.admintransferlease.sent,"Number of AdminTransferLease requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.adminunsplit.sent,"Number of AdminUnsplit requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.adminverifyprotectedtimestamp.sent,"Number of AdminVerifyProtectedTimestamp requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.barrier.sent,"Number of Barrier requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.checkconsistency.sent,"Number of CheckConsistency requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.clearrange.sent,"Number of ClearRange requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.computechecksum.sent,"Number of ComputeChecksum requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.conditionalput.sent,"Number of ConditionalPut requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.delete.sent,"Number of Delete requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.deleterange.sent,"Number of DeleteRange requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.endtxn.sent,"Number of EndTxn requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.ambiguousresulterrtype,"Number of AmbiguousResultErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.batchtimestampbeforegcerrtype,"Number of BatchTimestampBeforeGCErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.communicationerrtype,"Number of CommunicationErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.conditionfailederrtype,"Number of ConditionFailedErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.errordetailtype(0),"Number of ErrorDetailType(0) errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.errordetailtype(15),"Number of ErrorDetailType(15) errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.errordetailtype(19),"Number of ErrorDetailType(19) errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.errordetailtype(20),"Number of ErrorDetailType(20) errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.errordetailtype(21),"Number of ErrorDetailType(21) errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.errordetailtype(23),"Number of ErrorDetailType(23) errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.errordetailtype(24),"Number of ErrorDetailType(24) errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.errordetailtype(29),"Number of ErrorDetailType(29) errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.errordetailtype(30),"Number of ErrorDetailType(30) errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.errordetailtype(33),"Number of ErrorDetailType(33) errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.indeterminatecommiterrtype,"Number of IndeterminateCommitErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.integeroverflowerrtype,"Number of IntegerOverflowErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.intentmissingerrtype,"Number of IntentMissingErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.internalerrtype,"Number of InternalErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.invalidleaseerrtype,"Number of InvalidLeaseErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.leaserejectederrtype,"Number of LeaseRejectedErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.lockconflicterrtype,"Number of LockConflictErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.mergeinprogresserrtype,"Number of MergeInProgressErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.mintimestampboundunsatisfiableerrtype,"Number of MinTimestampBoundUnsatisfiableErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.mvcchistorymutationerrtype,"Number of MVCCHistoryMutationErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.nodeunavailableerrtype,"Number of NodeUnavailableErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.notleaseholdererrtype,"Number of NotLeaseHolderErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.oprequirestxnerrtype,"Number of OpRequiresTxnErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.optimisticevalconflictserrtype,"Number of OptimisticEvalConflictsErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.raftgroupdeletederrtype,"Number of RaftGroupDeletedErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.rangefeedretryerrtype,"Number of RangeFeedRetryErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.rangekeymismatcherrtype,"Number of RangeKeyMismatchErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.rangenotfounderrtype,"Number of RangeNotFoundErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.readwithinuncertaintyintervalerrtype,"Number of ReadWithinUncertaintyIntervalErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.refreshfailederrtype,"Number of RefreshFailedErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.replicacorruptionerrtype,"Number of ReplicaCorruptionErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.replicatooolderrtype,"Number of ReplicaTooOldErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.storenotfounderrtype,"Number of StoreNotFoundErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.transactionabortederrtype,"Number of TransactionAbortedErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.transactionpusherrtype,"Number of TransactionPushErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.transactionretryerrtype,"Number of TransactionRetryErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.transactionretrywithprotorefresherrtype,"Number of TransactionRetryWithProtoRefreshErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.transactionstatuserrtype,"Number of TransactionStatusErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.txnalreadyencounterederrtype,"Number of TxnAlreadyEncounteredErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.unsupportedrequesterrtype,"Number of UnsupportedRequestErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.writeintenterrtype,"Number of WriteIntentErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.writetooolderrtype,"Number of WriteTooOldErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.export.sent,"Number of Export requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.gc.sent,"Number of GC requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.get.sent,"Number of Get requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.heartbeattxn.sent,"Number of HeartbeatTxn requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.increment.sent,"Number of Increment requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.initput.sent,"Number of InitPut requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.isspanempty.sent,"Number of IsSpanEmpty requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.leaseinfo.sent,"Number of LeaseInfo requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.merge.sent,"Number of Merge requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.migrate.sent,"Number of Migrate requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.probe.sent,"Number of Probe requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.pushtxn.sent,"Number of PushTxn requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.put.sent,"Number of Put requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.queryintent.sent,"Number of QueryIntent requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.querylocks.sent,"Number of QueryLocks requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.queryresolvedtimestamp.sent,"Number of QueryResolvedTimestamp requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.querytxn.sent,"Number of QueryTxn requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.rangestats.sent,"Number of RangeStats requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.recomputestats.sent,"Number of RecomputeStats requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.recovertxn.sent,"Number of RecoverTxn requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.refresh.sent,"Number of Refresh requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.refreshrange.sent,"Number of RefreshRange requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.requestlease.sent,"Number of RequestLease requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.resolveintent.sent,"Number of ResolveIntent requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.resolveintentrange.sent,"Number of ResolveIntentRange requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.reversescan.sent,"Number of ReverseScan requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.revertrange.sent,"Number of RevertRange requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.scan.sent,"Number of Scan requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.sent,Number of replica-addressed RPCs sent,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.sent.local,Number of replica-addressed RPCs sent through the local-server optimization,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.sent.nextreplicaerror,Number of replica-addressed RPCs sent due to per-replica errors,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.subsume.sent,"Number of Subsume requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.transferlease.sent,"Number of TransferLease requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.truncatelog.sent,"Number of TruncateLog requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.writebatch.sent,"Number of WriteBatch requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.adopt_iterations,number of job-adopt iterations performed by the registry,iterations,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_env_runner.currently_idle,Number of auto_config_env_runner jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_config_env_runner.currently_paused,Number of auto_config_env_runner jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_config_env_runner.currently_running,Number of auto_config_env_runner jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_config_env_runner.expired_pts_records,Number of expired protected timestamp records owned by auto_config_env_runner jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_env_runner.fail_or_cancel_completed,Number of auto_config_env_runner jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_env_runner.fail_or_cancel_failed,Number of auto_config_env_runner jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_env_runner.fail_or_cancel_retry_error,Number of auto_config_env_runner jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_env_runner.protected_age_sec,The age of the oldest PTS record protected by auto_config_env_runner jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.auto_config_env_runner.protected_record_count,Number of protected timestamp records held by auto_config_env_runner jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_config_env_runner.resume_completed,Number of auto_config_env_runner jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_env_runner.resume_failed,Number of auto_config_env_runner jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_env_runner.resume_retry_error,Number of auto_config_env_runner jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_runner.currently_idle,Number of auto_config_runner jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_config_runner.currently_paused,Number of auto_config_runner jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_config_runner.currently_running,Number of auto_config_runner jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_config_runner.expired_pts_records,Number of expired protected timestamp records owned by auto_config_runner jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_runner.fail_or_cancel_completed,Number of auto_config_runner jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_runner.fail_or_cancel_failed,Number of auto_config_runner jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_runner.fail_or_cancel_retry_error,Number of auto_config_runner jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_runner.protected_age_sec,The age of the oldest PTS record protected by auto_config_runner jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.auto_config_runner.protected_record_count,Number of protected timestamp records held by auto_config_runner jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_config_runner.resume_completed,Number of auto_config_runner jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_runner.resume_failed,Number of auto_config_runner jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_runner.resume_retry_error,Number of auto_config_runner jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_task.currently_idle,Number of auto_config_task jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_config_task.currently_paused,Number of auto_config_task jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_config_task.currently_running,Number of auto_config_task jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_config_task.expired_pts_records,Number of expired protected timestamp records owned by auto_config_task jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_task.fail_or_cancel_completed,Number of auto_config_task jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_task.fail_or_cancel_failed,Number of auto_config_task jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_task.fail_or_cancel_retry_error,Number of auto_config_task jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_task.protected_age_sec,The age of the oldest PTS record protected by auto_config_task jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.auto_config_task.protected_record_count,Number of protected timestamp records held by auto_config_task jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_config_task.resume_completed,Number of auto_config_task jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_task.resume_failed,Number of auto_config_task jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_task.resume_retry_error,Number of auto_config_task jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_create_stats.currently_idle,Number of auto_create_stats jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_create_stats.currently_paused,Number of auto_create_stats jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_create_stats.currently_running,Number of auto_create_stats jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_create_stats.expired_pts_records,Number of expired protected timestamp records owned by auto_create_stats jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_create_stats.fail_or_cancel_completed,Number of auto_create_stats jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_create_stats.fail_or_cancel_failed,Number of auto_create_stats jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_create_stats.fail_or_cancel_retry_error,Number of auto_create_stats jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_create_stats.protected_age_sec,The age of the oldest PTS record protected by auto_create_stats jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.auto_create_stats.protected_record_count,Number of protected timestamp records held by auto_create_stats jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_create_stats.resume_completed,Number of auto_create_stats jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_create_stats.resume_failed,Number of auto_create_stats jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_create_stats.resume_retry_error,Number of auto_create_stats jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_schema_telemetry.currently_idle,Number of auto_schema_telemetry jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_schema_telemetry.currently_paused,Number of auto_schema_telemetry jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_schema_telemetry.currently_running,Number of auto_schema_telemetry jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_schema_telemetry.expired_pts_records,Number of expired protected timestamp records owned by auto_schema_telemetry jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_schema_telemetry.fail_or_cancel_completed,Number of auto_schema_telemetry jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_schema_telemetry.fail_or_cancel_failed,Number of auto_schema_telemetry jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_schema_telemetry.fail_or_cancel_retry_error,Number of auto_schema_telemetry jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_schema_telemetry.protected_age_sec,The age of the oldest PTS record protected by auto_schema_telemetry jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.auto_schema_telemetry.protected_record_count,Number of protected timestamp records held by auto_schema_telemetry jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_schema_telemetry.resume_completed,Number of auto_schema_telemetry jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_schema_telemetry.resume_failed,Number of auto_schema_telemetry jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_schema_telemetry.resume_retry_error,Number of auto_schema_telemetry jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_span_config_reconciliation.currently_idle,Number of auto_span_config_reconciliation jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_span_config_reconciliation.currently_paused,Number of auto_span_config_reconciliation jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_span_config_reconciliation.currently_running,Number of auto_span_config_reconciliation jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_span_config_reconciliation.expired_pts_records,Number of expired protected timestamp records owned by auto_span_config_reconciliation jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_span_config_reconciliation.fail_or_cancel_completed,Number of auto_span_config_reconciliation jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_span_config_reconciliation.fail_or_cancel_failed,Number of auto_span_config_reconciliation jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_span_config_reconciliation.fail_or_cancel_retry_error,Number of auto_span_config_reconciliation jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_span_config_reconciliation.protected_age_sec,The age of the oldest PTS record protected by auto_span_config_reconciliation jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.auto_span_config_reconciliation.protected_record_count,Number of protected timestamp records held by auto_span_config_reconciliation jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_span_config_reconciliation.resume_completed,Number of auto_span_config_reconciliation jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_span_config_reconciliation.resume_failed,Number of auto_span_config_reconciliation jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_span_config_reconciliation.resume_retry_error,Number of auto_span_config_reconciliation jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_sql_stats_compaction.currently_idle,Number of auto_sql_stats_compaction jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_sql_stats_compaction.currently_paused,Number of auto_sql_stats_compaction jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_sql_stats_compaction.currently_running,Number of auto_sql_stats_compaction jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_sql_stats_compaction.expired_pts_records,Number of expired protected timestamp records owned by auto_sql_stats_compaction jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_sql_stats_compaction.fail_or_cancel_completed,Number of auto_sql_stats_compaction jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_sql_stats_compaction.fail_or_cancel_failed,Number of auto_sql_stats_compaction jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_sql_stats_compaction.fail_or_cancel_retry_error,Number of auto_sql_stats_compaction jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_sql_stats_compaction.protected_age_sec,The age of the oldest PTS record protected by auto_sql_stats_compaction jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.auto_sql_stats_compaction.protected_record_count,Number of protected timestamp records held by auto_sql_stats_compaction jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_sql_stats_compaction.resume_completed,Number of auto_sql_stats_compaction jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_sql_stats_compaction.resume_failed,Number of auto_sql_stats_compaction jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_sql_stats_compaction.resume_retry_error,Number of auto_sql_stats_compaction jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_update_sql_activity.currently_idle,Number of auto_update_sql_activity jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_update_sql_activity.currently_paused,Number of auto_update_sql_activity jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_update_sql_activity.currently_running,Number of auto_update_sql_activity jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_update_sql_activity.expired_pts_records,Number of expired protected timestamp records owned by auto_update_sql_activity jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_update_sql_activity.fail_or_cancel_completed,Number of auto_update_sql_activity jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_update_sql_activity.fail_or_cancel_failed,Number of auto_update_sql_activity jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_update_sql_activity.fail_or_cancel_retry_error,Number of auto_update_sql_activity jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_update_sql_activity.protected_age_sec,The age of the oldest PTS record protected by auto_update_sql_activity jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.auto_update_sql_activity.protected_record_count,Number of protected timestamp records held by auto_update_sql_activity jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_update_sql_activity.resume_completed,Number of auto_update_sql_activity jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_update_sql_activity.resume_failed,Number of auto_update_sql_activity jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_update_sql_activity.resume_retry_error,Number of auto_update_sql_activity jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.backup.currently_idle,Number of backup jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.backup.currently_paused,Number of backup jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.backup.currently_running,Number of backup jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.backup.expired_pts_records,Number of expired protected timestamp records owned by backup jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.backup.fail_or_cancel_completed,Number of backup jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.backup.fail_or_cancel_failed,Number of backup jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.backup.fail_or_cancel_retry_error,Number of backup jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.backup.protected_age_sec,The age of the oldest PTS record protected by backup jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.backup.protected_record_count,Number of protected timestamp records held by backup jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.backup.resume_completed,Number of backup jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.backup.resume_failed,Number of backup jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.backup.resume_retry_error,Number of backup jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.changefeed.currently_idle,Number of changefeed jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.changefeed.currently_paused,Number of changefeed jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.changefeed.currently_running,Number of changefeed jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.changefeed.expired_pts_records,Number of expired protected timestamp records owned by changefeed jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.changefeed.fail_or_cancel_completed,Number of changefeed jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.changefeed.fail_or_cancel_failed,Number of changefeed jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.changefeed.fail_or_cancel_retry_error,Number of changefeed jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.changefeed.protected_age_sec,The age of the oldest PTS record protected by changefeed jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.changefeed.protected_record_count,Number of protected timestamp records held by changefeed jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.changefeed.resume_completed,Number of changefeed jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.changefeed.resume_failed,Number of changefeed jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.changefeed.resume_retry_error,Number of changefeed jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.claimed_jobs,number of jobs claimed in job-adopt iterations,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.create_stats.currently_idle,Number of create_stats jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.create_stats.currently_paused,Number of create_stats jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.create_stats.currently_running,Number of create_stats jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.create_stats.expired_pts_records,Number of expired protected timestamp records owned by create_stats jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.create_stats.fail_or_cancel_completed,Number of create_stats jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.create_stats.fail_or_cancel_failed,Number of create_stats jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.create_stats.fail_or_cancel_retry_error,Number of create_stats jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.create_stats.protected_age_sec,The age of the oldest PTS record protected by create_stats jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.create_stats.protected_record_count,Number of protected timestamp records held by create_stats jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.create_stats.resume_completed,Number of create_stats jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.create_stats.resume_failed,Number of create_stats jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.create_stats.resume_retry_error,Number of create_stats jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.import.currently_idle,Number of import jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.import.currently_paused,Number of import jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.import.currently_running,Number of import jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.import.expired_pts_records,Number of expired protected timestamp records owned by import jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.import.fail_or_cancel_completed,Number of import jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.import.fail_or_cancel_failed,Number of import jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.import.fail_or_cancel_retry_error,Number of import jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.import.protected_age_sec,The age of the oldest PTS record protected by import jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.import.protected_record_count,Number of protected timestamp records held by import jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.import.resume_completed,Number of import jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.import.resume_failed,Number of import jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.import.resume_retry_error,Number of import jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.key_visualizer.currently_idle,Number of key_visualizer jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.key_visualizer.currently_paused,Number of key_visualizer jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.key_visualizer.currently_running,Number of key_visualizer jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.key_visualizer.expired_pts_records,Number of expired protected timestamp records owned by key_visualizer jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.key_visualizer.fail_or_cancel_completed,Number of key_visualizer jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.key_visualizer.fail_or_cancel_failed,Number of key_visualizer jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.key_visualizer.fail_or_cancel_retry_error,Number of key_visualizer jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.key_visualizer.protected_age_sec,The age of the oldest PTS record protected by key_visualizer jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.key_visualizer.protected_record_count,Number of protected timestamp records held by key_visualizer jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.key_visualizer.resume_completed,Number of key_visualizer jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.key_visualizer.resume_failed,Number of key_visualizer jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.key_visualizer.resume_retry_error,Number of key_visualizer jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.metrics.task_failed,Number of metrics sql activity updater tasks that failed,errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.migration.currently_idle,Number of migration jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.migration.currently_paused,Number of migration jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.migration.currently_running,Number of migration jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.migration.expired_pts_records,Number of expired protected timestamp records owned by migration jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.migration.fail_or_cancel_completed,Number of migration jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.migration.fail_or_cancel_failed,Number of migration jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.migration.fail_or_cancel_retry_error,Number of migration jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.migration.protected_age_sec,The age of the oldest PTS record protected by migration jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.migration.protected_record_count,Number of protected timestamp records held by migration jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.migration.resume_completed,Number of migration jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.migration.resume_failed,Number of migration jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.migration.resume_retry_error,Number of migration jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.mvcc_statistics_update.currently_idle,Number of mvcc_statistics_update jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.mvcc_statistics_update.currently_paused,Number of mvcc_statistics_update jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.mvcc_statistics_update.currently_running,Number of mvcc_statistics_update jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.mvcc_statistics_update.expired_pts_records,Number of expired protected timestamp records owned by mvcc_statistics_update jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.mvcc_statistics_update.fail_or_cancel_completed,Number of mvcc_statistics_update jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.mvcc_statistics_update.fail_or_cancel_failed,Number of mvcc_statistics_update jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.mvcc_statistics_update.fail_or_cancel_retry_error,Number of mvcc_statistics_update jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.mvcc_statistics_update.protected_age_sec,The age of the oldest PTS record protected by mvcc_statistics_update jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.mvcc_statistics_update.protected_record_count,Number of protected timestamp records held by mvcc_statistics_update jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.mvcc_statistics_update.resume_completed,Number of mvcc_statistics_update jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.mvcc_statistics_update.resume_failed,Number of mvcc_statistics_update jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.mvcc_statistics_update.resume_retry_error,Number of mvcc_statistics_update jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.new_schema_change.currently_idle,Number of new_schema_change jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.new_schema_change.currently_paused,Number of new_schema_change jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.new_schema_change.currently_running,Number of new_schema_change jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.new_schema_change.expired_pts_records,Number of expired protected timestamp records owned by new_schema_change jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.new_schema_change.fail_or_cancel_completed,Number of new_schema_change jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.new_schema_change.fail_or_cancel_failed,Number of new_schema_change jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.new_schema_change.fail_or_cancel_retry_error,Number of new_schema_change jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.new_schema_change.protected_age_sec,The age of the oldest PTS record protected by new_schema_change jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.new_schema_change.protected_record_count,Number of protected timestamp records held by new_schema_change jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.new_schema_change.resume_completed,Number of new_schema_change jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.new_schema_change.resume_failed,Number of new_schema_change jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.new_schema_change.resume_retry_error,Number of new_schema_change jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.poll_jobs_stats.currently_idle,Number of poll_jobs_stats jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.poll_jobs_stats.currently_paused,Number of poll_jobs_stats jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.poll_jobs_stats.currently_running,Number of poll_jobs_stats jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.poll_jobs_stats.expired_pts_records,Number of expired protected timestamp records owned by poll_jobs_stats jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.poll_jobs_stats.fail_or_cancel_completed,Number of poll_jobs_stats jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.poll_jobs_stats.fail_or_cancel_failed,Number of poll_jobs_stats jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.poll_jobs_stats.fail_or_cancel_retry_error,Number of poll_jobs_stats jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.poll_jobs_stats.protected_age_sec,The age of the oldest PTS record protected by poll_jobs_stats jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.poll_jobs_stats.protected_record_count,Number of protected timestamp records held by poll_jobs_stats jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.poll_jobs_stats.resume_completed,Number of poll_jobs_stats jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.poll_jobs_stats.resume_failed,Number of poll_jobs_stats jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.poll_jobs_stats.resume_retry_error,Number of poll_jobs_stats jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.replication_stream_ingestion.currently_idle,Number of replication_stream_ingestion jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.replication_stream_ingestion.currently_paused,Number of replication_stream_ingestion jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.replication_stream_ingestion.currently_running,Number of replication_stream_ingestion jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.replication_stream_ingestion.expired_pts_records,Number of expired protected timestamp records owned by replication_stream_ingestion jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.replication_stream_ingestion.fail_or_cancel_completed,Number of replication_stream_ingestion jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.replication_stream_ingestion.fail_or_cancel_failed,Number of replication_stream_ingestion jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.replication_stream_ingestion.fail_or_cancel_retry_error,Number of replication_stream_ingestion jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.replication_stream_ingestion.protected_age_sec,The age of the oldest PTS record protected by replication_stream_ingestion jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.replication_stream_ingestion.protected_record_count,Number of protected timestamp records held by replication_stream_ingestion jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.replication_stream_ingestion.resume_completed,Number of replication_stream_ingestion jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.replication_stream_ingestion.resume_failed,Number of replication_stream_ingestion jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.replication_stream_ingestion.resume_retry_error,Number of replication_stream_ingestion jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.replication_stream_producer.currently_idle,Number of replication_stream_producer jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.replication_stream_producer.currently_paused,Number of replication_stream_producer jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.replication_stream_producer.currently_running,Number of replication_stream_producer jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.replication_stream_producer.expired_pts_records,Number of expired protected timestamp records owned by replication_stream_producer jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.replication_stream_producer.fail_or_cancel_completed,Number of replication_stream_producer jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.replication_stream_producer.fail_or_cancel_failed,Number of replication_stream_producer jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.replication_stream_producer.fail_or_cancel_retry_error,Number of replication_stream_producer jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.replication_stream_producer.protected_age_sec,The age of the oldest PTS record protected by replication_stream_producer jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.replication_stream_producer.protected_record_count,Number of protected timestamp records held by replication_stream_producer jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.replication_stream_producer.resume_completed,Number of replication_stream_producer jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.replication_stream_producer.resume_failed,Number of replication_stream_producer jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.replication_stream_producer.resume_retry_error,Number of replication_stream_producer jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.restore.currently_idle,Number of restore jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.restore.currently_paused,Number of restore jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.restore.currently_running,Number of restore jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.restore.expired_pts_records,Number of expired protected timestamp records owned by restore jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.restore.fail_or_cancel_completed,Number of restore jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.restore.fail_or_cancel_failed,Number of restore jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.restore.fail_or_cancel_retry_error,Number of restore jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.restore.protected_age_sec,The age of the oldest PTS record protected by restore jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.restore.protected_record_count,Number of protected timestamp records held by restore jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.restore.resume_completed,Number of restore jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.restore.resume_failed,Number of restore jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.restore.resume_retry_error,Number of restore jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.resumed_claimed_jobs,number of claimed-jobs resumed in job-adopt iterations,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.row_level_ttl.currently_idle,Number of row_level_ttl jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.row_level_ttl.currently_paused,Number of row_level_ttl jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.row_level_ttl.currently_running,Number of row_level_ttl jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.row_level_ttl.delete_duration,Duration for delete requests during row level TTL.,nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,jobs.row_level_ttl.expired_pts_records,Number of expired protected timestamp records owned by row_level_ttl jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.row_level_ttl.fail_or_cancel_completed,Number of row_level_ttl jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.row_level_ttl.fail_or_cancel_failed,Number of row_level_ttl jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.row_level_ttl.fail_or_cancel_retry_error,Number of row_level_ttl jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.row_level_ttl.num_active_spans,Number of active spans the TTL job is deleting from.,num_active_spans,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.row_level_ttl.protected_age_sec,The age of the oldest PTS record protected by row_level_ttl jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.row_level_ttl.protected_record_count,Number of protected timestamp records held by row_level_ttl jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.row_level_ttl.resume_completed,Number of row_level_ttl jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.row_level_ttl.resume_failed,Number of row_level_ttl jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.row_level_ttl.resume_retry_error,Number of row_level_ttl jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.row_level_ttl.rows_deleted,Number of rows deleted by the row level TTL job.,num_rows,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.row_level_ttl.rows_selected,Number of rows selected for deletion by the row level TTL job.,num_rows,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.row_level_ttl.select_duration,Duration for select requests during row level TTL.,nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,jobs.row_level_ttl.span_total_duration,Duration for processing a span during row level TTL.,nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,jobs.row_level_ttl.total_expired_rows,Approximate number of rows that have expired the TTL on the TTL table.,total_expired_rows,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.row_level_ttl.total_rows,Approximate number of rows on the TTL table.,total_rows,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.running_non_idle,number of running jobs that are not idle,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.schema_change.currently_idle,Number of schema_change jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.schema_change.currently_paused,Number of schema_change jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.schema_change.currently_running,Number of schema_change jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.schema_change.expired_pts_records,Number of expired protected timestamp records owned by schema_change jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.schema_change.fail_or_cancel_completed,Number of schema_change jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.schema_change.fail_or_cancel_failed,Number of schema_change jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.schema_change.fail_or_cancel_retry_error,Number of schema_change jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.schema_change.protected_age_sec,The age of the oldest PTS record protected by schema_change jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.schema_change.protected_record_count,Number of protected timestamp records held by schema_change jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.schema_change.resume_completed,Number of schema_change jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.schema_change.resume_failed,Number of schema_change jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.schema_change.resume_retry_error,Number of schema_change jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.schema_change_gc.currently_idle,Number of schema_change_gc jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.schema_change_gc.currently_paused,Number of schema_change_gc jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.schema_change_gc.currently_running,Number of schema_change_gc jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.schema_change_gc.expired_pts_records,Number of expired protected timestamp records owned by schema_change_gc jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.schema_change_gc.fail_or_cancel_completed,Number of schema_change_gc jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.schema_change_gc.fail_or_cancel_failed,Number of schema_change_gc jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.schema_change_gc.fail_or_cancel_retry_error,Number of schema_change_gc jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.schema_change_gc.protected_age_sec,The age of the oldest PTS record protected by schema_change_gc jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.schema_change_gc.protected_record_count,Number of protected timestamp records held by schema_change_gc jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.schema_change_gc.resume_completed,Number of schema_change_gc jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.schema_change_gc.resume_failed,Number of schema_change_gc jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.schema_change_gc.resume_retry_error,Number of schema_change_gc jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.typedesc_schema_change.currently_idle,Number of typedesc_schema_change jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.typedesc_schema_change.currently_paused,Number of typedesc_schema_change jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.typedesc_schema_change.currently_running,Number of typedesc_schema_change jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.typedesc_schema_change.expired_pts_records,Number of expired protected timestamp records owned by typedesc_schema_change jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.typedesc_schema_change.fail_or_cancel_completed,Number of typedesc_schema_change jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.typedesc_schema_change.fail_or_cancel_failed,Number of typedesc_schema_change jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.typedesc_schema_change.fail_or_cancel_retry_error,Number of typedesc_schema_change jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.typedesc_schema_change.protected_age_sec,The age of the oldest PTS record protected by typedesc_schema_change jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.typedesc_schema_change.protected_record_count,Number of protected timestamp records held by typedesc_schema_change jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.typedesc_schema_change.resume_completed,Number of typedesc_schema_change jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.typedesc_schema_change.resume_failed,Number of typedesc_schema_change jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.typedesc_schema_change.resume_retry_error,Number of typedesc_schema_change jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,kv.protectedts.reconciliation.errors,number of errors encountered during reconciliation runs on this node,Count,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,kv.protectedts.reconciliation.num_runs,number of successful reconciliation runs on this node,Count,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,kv.protectedts.reconciliation.records_processed,number of records processed without error during reconciliation on this node,Count,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,kv.protectedts.reconciliation.records_removed,number of records removed during reconciliation runs on this node,Count,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,physical_replication.admit_latency,Event admission latency: a difference between event MVCC timestamp and the time it was admitted into ingestion processor,Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,physical_replication.commit_latency,"Event commit latency: a difference between event MVCC timestamp and the time it was flushed into disk. If we batch events, then the difference between the oldest event in the batch and flush is recorded",Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,physical_replication.cutover_progress,The number of ranges left to revert in order to complete an inflight cutover,Ranges,GAUGE,COUNT,AVG,NONE
+APPLICATION,physical_replication.distsql_replan_count,Total number of dist sql replanning events,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,physical_replication.earliest_data_checkpoint_span,The earliest timestamp of the last checkpoint forwarded by an ingestion data processor,Timestamp,GAUGE,TIMESTAMP_NS,AVG,NONE
+APPLICATION,physical_replication.events_ingested,Events ingested by all replication jobs,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,physical_replication.flush_hist_nanos,Time spent flushing messages across all replication streams,Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,physical_replication.flushes,Total flushes across all replication jobs,Flushes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,physical_replication.job_progress_updates,Total number of updates to the ingestion job progress,Job Updates,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,physical_replication.latest_data_checkpoint_span,The latest timestamp of the last checkpoint forwarded by an ingestion data processor,Timestamp,GAUGE,TIMESTAMP_NS,AVG,NONE
+APPLICATION,physical_replication.logical_bytes,Logical bytes (sum of keys + values) ingested by all replication jobs,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,physical_replication.replicated_time_seconds,The replicated time of the physical replication stream in seconds since the unix epoch.,Seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,physical_replication.resolved_events_ingested,Resolved events ingested by all replication jobs,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,physical_replication.running,Number of currently running replication streams,Replication Streams,GAUGE,COUNT,AVG,NONE
+APPLICATION,physical_replication.sst_bytes,SST bytes (compressed) sent to KV by all replication jobs,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,requests.slow.distsender,"Number of replica-bound RPCs currently stuck or retrying for a long time.
+
+Note that this is not a good signal for KV health. The remote side of the
+RPCs tracked here may experience contention, so an end user can easily
+cause values for this metric to be emitted by leaving a transaction open
+for a long time and contending with it using a second transaction.",Requests,GAUGE,COUNT,AVG,NONE
+APPLICATION,round-trip-latency,"Distribution of round-trip latencies with other nodes.
+
+This only reflects successful heartbeats and measures gRPC overhead as well as
+possible head-of-line blocking. Elevated values in this metric may hint at
+network issues and/or saturation, but they are no proof of them. CPU overload
+can similarly elevate this metric. The operator should look towards OS-level
+metrics such as packet loss, retransmits, etc, to conclusively diagnose network
+issues. Heartbeats are not very frequent (~seconds), so they may not capture
+rare or short-lived degradations.
+",Round-trip time,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,rpc.connection.avg_round_trip_latency,"Sum of exponentially weighted moving average of round-trip latencies, as measured through a gRPC RPC.
+
+Dividing this Gauge by rpc.connection.healthy gives an approximation of average
+latency, but the top-level round-trip-latency histogram is more useful. Instead,
+users should consult the label families of this metric if they are available
+(which requires prometheus and the cluster setting 'server.child_metrics.enabled');
+these provide per-peer moving averages.
+
+This metric does not track failed connection. A failed connection's contribution
+is reset to zero.
+",Latency,GAUGE,NANOSECONDS,AVG,NONE
+APPLICATION,rpc.connection.failures,"Counter of failed connections.
+
+This includes both the event in which a healthy connection terminates as well as
+unsuccessful reconnection attempts.
+
+Connections that are terminated as part of local node shutdown are excluded.
+Decommissioned peers are excluded.
+",Connections,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,rpc.connection.healthy,Gauge of current connections in a healthy state (i.e. bidirectionally connected and heartbeating),Connections,GAUGE,COUNT,AVG,NONE
+APPLICATION,rpc.connection.healthy_nanos,"Gauge of nanoseconds of healthy connection time
+
+On the prometheus endpoint scraped with the cluster setting 'server.child_metrics.enabled' set,
+the constituent parts of this metric are available on a per-peer basis and one can read off
+for how long a given peer has been connected",Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+APPLICATION,rpc.connection.heartbeats,Counter of successful heartbeats.,Heartbeats,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,rpc.connection.inactive,"Gauge of current connections in an inactive state and pending deletion; these are not healthy but are not tracked as unhealthy either because there is reason to believe that the connection is no longer relevant,for example if the node has since been seen under a new address",Connections,GAUGE,COUNT,AVG,NONE
+APPLICATION,rpc.connection.unhealthy,Gauge of current connections in an unhealthy state (not bidirectionally connected or heartbeating),Connections,GAUGE,COUNT,AVG,NONE
+APPLICATION,rpc.connection.unhealthy_nanos,"Gauge of nanoseconds of unhealthy connection time.
+
+On the prometheus endpoint scraped with the cluster setting 'server.child_metrics.enabled' set,
+the constituent parts of this metric are available on a per-peer basis and one can read off
+for how long a given peer has been unreachable",Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+APPLICATION,schedules.BACKUP.failed,Number of BACKUP jobs failed,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,schedules.BACKUP.last-completed-time,The unix timestamp of the most recently completed backup by a schedule specified as maintaining this metric,Jobs,GAUGE,TIMESTAMP_SEC,AVG,NONE
+APPLICATION,schedules.BACKUP.protected_age_sec,The age of the oldest PTS record protected by BACKUP schedules,Seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,schedules.BACKUP.protected_record_count,Number of PTS records held by BACKUP schedules,Records,GAUGE,COUNT,AVG,NONE
+APPLICATION,schedules.BACKUP.started,Number of BACKUP jobs started,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,schedules.BACKUP.succeeded,Number of BACKUP jobs succeeded,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,schedules.CHANGEFEED.failed,Number of CHANGEFEED jobs failed,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,schedules.CHANGEFEED.started,Number of CHANGEFEED jobs started,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,schedules.CHANGEFEED.succeeded,Number of CHANGEFEED jobs succeeded,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,schedules.error,Number of schedules which did not execute successfully,Schedules,GAUGE,COUNT,AVG,NONE
+APPLICATION,schedules.malformed,Number of malformed schedules,Schedules,GAUGE,COUNT,AVG,NONE
+APPLICATION,schedules.round.jobs-started,The number of jobs started,Jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,schedules.round.reschedule-skip,The number of schedules rescheduled due to SKIP policy,Schedules,GAUGE,COUNT,AVG,NONE
+APPLICATION,schedules.round.reschedule-wait,The number of schedules rescheduled due to WAIT policy,Schedules,GAUGE,COUNT,AVG,NONE
+APPLICATION,schedules.scheduled-row-level-ttl-executor.failed,Number of scheduled-row-level-ttl-executor jobs failed,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,schedules.scheduled-row-level-ttl-executor.started,Number of scheduled-row-level-ttl-executor jobs started,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,schedules.scheduled-row-level-ttl-executor.succeeded,Number of scheduled-row-level-ttl-executor jobs succeeded,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,schedules.scheduled-schema-telemetry-executor.failed,Number of scheduled-schema-telemetry-executor jobs failed,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,schedules.scheduled-schema-telemetry-executor.started,Number of scheduled-schema-telemetry-executor jobs started,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,schedules.scheduled-schema-telemetry-executor.succeeded,Number of scheduled-schema-telemetry-executor jobs succeeded,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,schedules.scheduled-sql-stats-compaction-executor.failed,Number of scheduled-sql-stats-compaction-executor jobs failed,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,schedules.scheduled-sql-stats-compaction-executor.started,Number of scheduled-sql-stats-compaction-executor jobs started,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,schedules.scheduled-sql-stats-compaction-executor.succeeded,Number of scheduled-sql-stats-compaction-executor jobs succeeded,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.bytesin,Number of SQL bytes received,SQL Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.bytesout,Number of SQL bytes sent,SQL Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.conn.failures,Number of SQL connection failures,Connections,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.conn.latency,Latency to establish and authenticate a SQL connection,Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,sql.conns,Number of open SQL connections,Connections,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.conns_waiting_to_hash,Number of SQL connection attempts that are being throttled in order to limit password hashing concurrency,Connections,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.contention.resolver.failed_resolutions,Number of failed transaction ID resolution attempts,Failed transaction ID resolution count,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.contention.resolver.queue_size,Length of queued unresolved contention events,Queue length,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.contention.resolver.retries,Number of times transaction id resolution has been retried,Retry count,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.contention.txn_id_cache.miss,Number of cache misses,Cache miss,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.contention.txn_id_cache.read,Number of cache read,Cache read,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.copy.count,Number of COPY SQL statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.copy.count.internal,Number of COPY SQL statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.copy.nonatomic.count,Number of non-atomic COPY SQL statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.copy.nonatomic.count.internal,Number of non-atomic COPY SQL statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.copy.nonatomic.started.count,Number of non-atomic COPY SQL statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.copy.nonatomic.started.count.internal,Number of non-atomic COPY SQL statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.copy.started.count,Number of COPY SQL statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.copy.started.count.internal,Number of COPY SQL statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.ddl.count,Number of SQL DDL statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.ddl.count.internal,Number of SQL DDL statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.ddl.started.count,Number of SQL DDL statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.ddl.started.count.internal,Number of SQL DDL statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.delete.count,Number of SQL DELETE statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.delete.count.internal,Number of SQL DELETE statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.delete.started.count,Number of SQL DELETE statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.delete.started.count.internal,Number of SQL DELETE statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.disk.distsql.current,Current sql statement disk usage for distsql,Disk,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.disk.distsql.max,Disk usage per sql statement for distsql,Disk,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.disk.distsql.spilled.bytes.read,Number of bytes read from temporary disk storage as a result of spilling,Disk,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.disk.distsql.spilled.bytes.written,Number of bytes written to temporary disk storage as a result of spilling,Disk,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.distsql.contended_queries.count,Number of SQL queries that experienced contention,Queries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.distsql.dist_query_rerun_locally.count,Total number of cases when distributed query error resulted in a local rerun,Queries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.distsql.dist_query_rerun_locally.failure_count,Total number of cases when the local rerun of a distributed query resulted in an error,Queries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.distsql.exec.latency,Latency of DistSQL statement execution,Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,sql.distsql.exec.latency.internal,Latency of DistSQL statement execution (internal queries),SQL Internal Statements,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,sql.distsql.flows.active,Number of distributed SQL flows currently active,Flows,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.distsql.flows.total,Number of distributed SQL flows executed,Flows,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.distsql.queries.active,Number of SQL queries currently active,Queries,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.distsql.queries.spilled,Number of queries that have spilled to disk,Queries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.distsql.queries.total,Number of SQL queries executed,Queries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.distsql.select.count,Number of DistSQL SELECT statements,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.distsql.select.count.internal,Number of DistSQL SELECT statements (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.distsql.service.latency,Latency of DistSQL request execution,Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,sql.distsql.service.latency.internal,Latency of DistSQL request execution (internal queries),SQL Internal Statements,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,sql.distsql.vec.openfds,Current number of open file descriptors used by vectorized external storage,Files,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.exec.latency,Latency of SQL statement execution,Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,sql.exec.latency.internal,Latency of SQL statement execution (internal queries),SQL Internal Statements,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,sql.failure.count,Number of statements resulting in a planning or runtime error,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.failure.count.internal,Number of statements resulting in a planning or runtime error (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.feature_flag_denial,Counter of the number of statements denied by a feature flag,Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.full.scan.count,Number of full table or index scans,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.full.scan.count.internal,Number of full table or index scans (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.guardrails.full_scan_rejected.count,Number of full table or index scans that have been rejected because of `disallow_full_table_scans` guardrail,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.guardrails.full_scan_rejected.count.internal,Number of full table or index scans that have been rejected because of `disallow_full_table_scans` guardrail (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.guardrails.max_row_size_err.count,Number of rows observed violating sql.guardrails.max_row_size_err,Rows,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.guardrails.max_row_size_err.count.internal,Number of rows observed violating sql.guardrails.max_row_size_err (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.guardrails.max_row_size_log.count,Number of rows observed violating sql.guardrails.max_row_size_log,Rows,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.guardrails.max_row_size_log.count.internal,Number of rows observed violating sql.guardrails.max_row_size_log (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.guardrails.transaction_rows_read_err.count,Number of transactions errored because of transaction_rows_read_err guardrail,Errored transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.guardrails.transaction_rows_read_err.count.internal,Number of transactions errored because of transaction_rows_read_err guardrail (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.guardrails.transaction_rows_read_log.count,Number of transactions logged because of transaction_rows_read_log guardrail,Logged transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.guardrails.transaction_rows_read_log.count.internal,Number of transactions logged because of transaction_rows_read_log guardrail (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.guardrails.transaction_rows_written_err.count,Number of transactions errored because of transaction_rows_written_err guardrail,Errored transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.guardrails.transaction_rows_written_err.count.internal,Number of transactions errored because of transaction_rows_written_err guardrail (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.guardrails.transaction_rows_written_log.count,Number of transactions logged because of transaction_rows_written_log guardrail,Logged transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.guardrails.transaction_rows_written_log.count.internal,Number of transactions logged because of transaction_rows_written_log guardrail (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.hydrated_schema_cache.hits,counter on the number of cache hits,reads,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.hydrated_schema_cache.misses,counter on the number of cache misses,reads,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.hydrated_table_cache.hits,counter on the number of cache hits,reads,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.hydrated_table_cache.misses,counter on the number of cache misses,reads,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.hydrated_type_cache.hits,counter on the number of cache hits,reads,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.hydrated_type_cache.misses,counter on the number of cache misses,reads,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.hydrated_udf_cache.hits,counter on the number of cache hits,reads,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.hydrated_udf_cache.misses,counter on the number of cache misses,reads,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.insert.count,Number of SQL INSERT statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.insert.count.internal,Number of SQL INSERT statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.insert.started.count,Number of SQL INSERT statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.insert.started.count.internal,Number of SQL INSERT statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.insights.anomaly_detection.evictions,Evictions of fingerprint latency summaries due to memory pressure,Evictions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.insights.anomaly_detection.fingerprints,Current number of statement fingerprints being monitored for anomaly detection,Fingerprints,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.insights.anomaly_detection.memory,Current memory used to support anomaly detection,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.leases.active,The number of outstanding SQL schema leases.,Outstanding leases,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.mem.bulk.current,Current sql statement memory usage for bulk operations,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.mem.bulk.max,Memory usage per sql statement for bulk operations,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.mem.conns.current,Current sql statement memory usage for conns,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.mem.conns.max,Memory usage per sql statement for conns,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.mem.distsql.current,Current sql statement memory usage for distsql,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.mem.distsql.max,Memory usage per sql statement for distsql,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.mem.internal.current,Current sql statement memory usage for internal,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.mem.internal.max,Memory usage per sql statement for internal,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.mem.internal.session.current,Current sql session memory usage for internal,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.mem.internal.session.max,Memory usage per sql session for internal,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.mem.internal.session.prepared.current,Current sql session memory usage by prepared statements for internal,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.mem.internal.session.prepared.max,Memory usage by prepared statements per sql session for internal,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.mem.internal.txn.current,Current sql transaction memory usage for internal,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.mem.internal.txn.max,Memory usage per sql transaction for internal,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.mem.root.current,Current sql statement memory usage for root,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.mem.root.max,Memory usage per sql statement for root,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.mem.sql.current,Current sql statement memory usage for sql,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.mem.sql.max,Memory usage per sql statement for sql,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.mem.sql.session.current,Current sql session memory usage for sql,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.mem.sql.session.max,Memory usage per sql session for sql,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.mem.sql.session.prepared.current,Current sql session memory usage by prepared statements for sql,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.mem.sql.session.prepared.max,Memory usage by prepared statements per sql session for sql,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.mem.sql.txn.current,Current sql transaction memory usage for sql,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.mem.sql.txn.max,Memory usage per sql transaction for sql,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.misc.count,Number of other SQL statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.misc.count.internal,Number of other SQL statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.misc.started.count,Number of other SQL statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.misc.started.count.internal,Number of other SQL statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.new_conns,Number of SQL connections created,Connections,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.optimizer.fallback.count,Number of statements which the cost-based optimizer was unable to plan,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.optimizer.fallback.count.internal,Number of statements which the cost-based optimizer was unable to plan (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.optimizer.plan_cache.hits,Number of non-prepared statements for which a cached plan was used,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.optimizer.plan_cache.hits.internal,Number of non-prepared statements for which a cached plan was used (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.optimizer.plan_cache.misses,Number of non-prepared statements for which a cached plan was not used,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.optimizer.plan_cache.misses.internal,Number of non-prepared statements for which a cached plan was not used (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.pgwire_cancel.ignored,Number of pgwire query cancel requests that were ignored due to rate limiting,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.pgwire_cancel.successful,Number of pgwire query cancel requests that were successful,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.pgwire_cancel.total,Number of pgwire query cancel requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.pre_serve.bytesin,Number of SQL bytes received prior to routing the connection to the target SQL server,SQL Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.pre_serve.bytesout,Number of SQL bytes sent prior to routing the connection to the target SQL server,SQL Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.pre_serve.conn.failures,Number of SQL connection failures prior to routing the connection to the target SQL server,Connections,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.pre_serve.mem.cur,Current memory usage for SQL connections prior to routing the connection to the target SQL server,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.pre_serve.mem.max,Memory usage for SQL connections prior to routing the connection to the target SQL server,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.pre_serve.new_conns,Number of SQL connections created prior to routing the connection to the target SQL server,Connections,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.query.count,Number of SQL queries executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.query.count.internal,Number of SQL queries executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.query.started.count,Number of SQL queries started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.query.started.count.internal,Number of SQL queries started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.restart_savepoint.count,Number of `SAVEPOINT cockroach_restart` statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.restart_savepoint.count.internal,Number of `SAVEPOINT cockroach_restart` statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.restart_savepoint.release.count,Number of `RELEASE SAVEPOINT cockroach_restart` statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.restart_savepoint.release.count.internal,Number of `RELEASE SAVEPOINT cockroach_restart` statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.restart_savepoint.release.started.count,Number of `RELEASE SAVEPOINT cockroach_restart` statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.restart_savepoint.release.started.count.internal,Number of `RELEASE SAVEPOINT cockroach_restart` statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.restart_savepoint.rollback.count,Number of `ROLLBACK TO SAVEPOINT cockroach_restart` statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.restart_savepoint.rollback.count.internal,Number of `ROLLBACK TO SAVEPOINT cockroach_restart` statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.restart_savepoint.rollback.started.count,Number of `ROLLBACK TO SAVEPOINT cockroach_restart` statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.restart_savepoint.rollback.started.count.internal,Number of `ROLLBACK TO SAVEPOINT cockroach_restart` statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.restart_savepoint.started.count,Number of `SAVEPOINT cockroach_restart` statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.restart_savepoint.started.count.internal,Number of `SAVEPOINT cockroach_restart` statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.savepoint.count,Number of SQL SAVEPOINT statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.savepoint.count.internal,Number of SQL SAVEPOINT statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.savepoint.release.count,Number of `RELEASE SAVEPOINT` statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.savepoint.release.count.internal,Number of `RELEASE SAVEPOINT` statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.savepoint.release.started.count,Number of `RELEASE SAVEPOINT` statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.savepoint.release.started.count.internal,Number of `RELEASE SAVEPOINT` statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.savepoint.rollback.count,Number of `ROLLBACK TO SAVEPOINT` statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.savepoint.rollback.count.internal,Number of `ROLLBACK TO SAVEPOINT` statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.savepoint.rollback.started.count,Number of `ROLLBACK TO SAVEPOINT` statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.savepoint.rollback.started.count.internal,Number of `ROLLBACK TO SAVEPOINT` statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.savepoint.started.count,Number of SQL SAVEPOINT statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.savepoint.started.count.internal,Number of SQL SAVEPOINT statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.schema.invalid_objects,Gauge of detected invalid objects within the system.descriptor table (measured by querying crdb_internal.invalid_objects),Objects,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.schema_changer.permanent_errors,Counter of the number of permanent errors experienced by the schema changer,Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.schema_changer.retry_errors,Counter of the number of retriable errors experienced by the schema changer,Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.schema_changer.running,Gauge of currently running schema changes,Schema changes,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.schema_changer.successes,Counter of the number of schema changer resumes which succeed,Schema changes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.select.count,Number of SQL SELECT statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.select.count.internal,Number of SQL SELECT statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.select.started.count,Number of SQL SELECT statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.select.started.count.internal,Number of SQL SELECT statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.service.latency,Latency of SQL request execution,Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,sql.service.latency.internal,Latency of SQL request execution (internal queries),SQL Internal Statements,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,sql.statements.active,Number of currently active user SQL statements,Active Statements,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.statements.active.internal,Number of currently active user SQL statements (internal queries),SQL Internal Statements,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.stats.cleanup.rows_removed,Number of stale statistics rows that are removed,SQL Stats Cleanup,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.stats.discarded.current,Number of fingerprint statistics being discarded,Discarded SQL Stats,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.stats.flush.count,Number of times SQL Stats are flushed to persistent storage,SQL Stats Flush,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.stats.flush.duration,Time took to in nanoseconds to complete SQL Stats flush,SQL Stats Flush,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,sql.stats.flush.error,Number of errors encountered when flushing SQL Stats,SQL Stats Flush,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.stats.mem.current,Current memory usage for fingerprint storage,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.stats.mem.max,Memory usage for fingerprint storage,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.stats.reported.mem.current,Current memory usage for reported fingerprint storage,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.stats.reported.mem.max,Memory usage for reported fingerprint storage,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.stats.txn_stats_collection.duration,Time took in nanoseconds to collect transaction stats,SQL Transaction Stats Collection Overhead,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,sql.temp_object_cleaner.active_cleaners,number of cleaner tasks currently running on this node,Count,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.temp_object_cleaner.schemas_deletion_error,number of errored schema deletions by the temp object cleaner on this node,Count,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.temp_object_cleaner.schemas_deletion_success,number of successful schema deletions by the temp object cleaner on this node,Count,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.temp_object_cleaner.schemas_to_delete,number of schemas to be deleted by the temp object cleaner on this node,Count,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.abort.count,Number of SQL transaction abort errors,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.abort.count.internal,Number of SQL transaction abort errors (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.begin.count,Number of SQL transaction BEGIN statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.begin.count.internal,Number of SQL transaction BEGIN statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.begin.started.count,Number of SQL transaction BEGIN statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.begin.started.count.internal,Number of SQL transaction BEGIN statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.commit.count,Number of SQL transaction COMMIT statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.commit.count.internal,Number of SQL transaction COMMIT statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.commit.started.count,Number of SQL transaction COMMIT statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.commit.started.count.internal,Number of SQL transaction COMMIT statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.contended.count,Number of SQL transactions experienced contention,Contention,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.contended.count.internal,Number of SQL transactions experienced contention (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.latency,Latency of SQL transactions,Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,sql.txn.latency.internal,Latency of SQL transactions (internal queries),SQL Internal Statements,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,sql.txn.rollback.count,Number of SQL transaction ROLLBACK statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.rollback.count.internal,Number of SQL transaction ROLLBACK statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.rollback.started.count,Number of SQL transaction ROLLBACK statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.rollback.started.count.internal,Number of SQL transaction ROLLBACK statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txns.open,Number of currently open user SQL transactions,Open SQL Transactions,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.txns.open.internal,Number of currently open user SQL transactions (internal queries),SQL Internal Statements,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.update.count,Number of SQL UPDATE statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.update.count.internal,Number of SQL UPDATE statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.update.started.count,Number of SQL UPDATE statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.update.started.count.internal,Number of SQL UPDATE statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sqlliveness.is_alive.cache_hits,Number of calls to IsAlive that return from the cache,Calls,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sqlliveness.is_alive.cache_misses,Number of calls to IsAlive that do not return from the cache,Calls,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sqlliveness.sessions_deleted,Number of expired sessions which have been deleted,Sessions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sqlliveness.sessions_deletion_runs,Number of calls to delete sessions which have been performed,Sessions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sqlliveness.write_failures,Number of update or insert calls which have failed,Writes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sqlliveness.write_successes,Number of update or insert calls successfully performed,Writes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.aborts,Number of aborted KV transactions,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.commit_waits,Number of KV transactions that had to commit-wait on commit in order to ensure linearizability. This generally happens to transactions writing to global ranges.,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.commits,Number of committed KV transactions (including 1PC),KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.commits1PC,Number of KV transaction one-phase commit attempts,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.condensed_intent_spans,KV transactions that have exceeded their intent tracking memory budget (kv.transaction.max_intents_bytes). See also txn.condensed_intent_spans_gauge for a gauge of such transactions currently running.,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.condensed_intent_spans_gauge,KV transactions currently running that have exceeded their intent tracking memory budget (kv.transaction.max_intents_bytes). See also txn.condensed_intent_spans for a perpetual counter/rate.,KV Transactions,GAUGE,COUNT,AVG,NONE
+APPLICATION,txn.condensed_intent_spans_rejected,KV transactions that have been aborted because they exceeded their intent tracking memory budget (kv.transaction.max_intents_bytes). Rejection is caused by kv.transaction.reject_over_max_intents_budget.,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.durations,KV transaction durations,KV Txn Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,txn.parallelcommits,Number of KV transaction parallel commit attempts,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.parallelcommits.auto_retries,Number of commit tries after successful failed parallel commit attempts,Retries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.refresh.auto_retries,Number of request retries after successful client-side refreshes,Retries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.refresh.fail,Number of failed client-side transaction refreshes,Refreshes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.refresh.fail_with_condensed_spans,"Number of failed client-side refreshes for transactions whose read tracking lost fidelity because of condensing. Such a failure could be a false conflict. Failures counted here are also counted in txn.refresh.fail, and the respective transactions are also counted in txn.refresh.memory_limit_exceeded.",Refreshes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.refresh.memory_limit_exceeded,"Number of transaction which exceed the refresh span bytes limit, causing their read spans to be condensed",Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.refresh.success,"Number of successful client-side transaction refreshes. A refresh may be preemptive or reactive. A reactive refresh is performed after a request throws an error because a refresh is needed for it to succeed. In these cases, the request will be re-issued as an auto-retry (see txn.refresh.auto_retries) after the refresh succeeds.",Refreshes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.refresh.success_server_side,Number of successful server-side transaction refreshes,Refreshes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.restarts,Number of restarted KV transactions,KV Transactions,HISTOGRAM,COUNT,AVG,NONE
+APPLICATION,txn.restarts.asyncwritefailure,Number of restarts due to async consensus writes that failed to leave intents,Restarted Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.restarts.commitdeadlineexceeded,Number of restarts due to a transaction exceeding its deadline,Restarted Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.restarts.readwithinuncertainty,Number of restarts due to reading a new value within the uncertainty interval,Restarted Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.restarts.serializable,Number of restarts due to a forwarded commit timestamp and isolation=SERIALIZABLE,Restarted Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.restarts.txnaborted,Number of restarts due to an abort by a concurrent transaction (usually due to deadlock),Restarted Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.restarts.txnpush,Number of restarts due to a transaction push failure,Restarted Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.restarts.unknown,Number of restarts due to a unknown reasons,Restarted Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.restarts.writetooold,Number of restarts due to a concurrent writer committing first,Restarted Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.restarts.writetoooldmulti,Number of restarts due to multiple concurrent writers committing first,Restarted Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.rollbacks.async.failed,Number of KV transaction that failed to send abort asynchronously which is not always retried,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.rollbacks.failed,Number of KV transaction that failed to send final abort,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,build.timestamp,Build information,Build Time,GAUGE,TIMESTAMP_SEC,AVG,NONE
+SERVER,go.scheduler_latency,Go scheduling latency,Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+SERVER,log.buffered.messages.dropped,"Count of log messages that are dropped by buffered log sinks. When CRDB attempts to buffer a log message in a buffered log sink whose buffer is already full, it drops the oldest buffered messages to make space for the new message",Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,log.fluent.sink.conn.errors,Number of connection errors experienced by fluent-server logging sinks,Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,log.messages.count,Count of messages logged on the node since startup. Note that this does not measure the fan-out of single log messages to the various configured logging sinks.,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,sys.cgo.allocbytes,Current bytes of memory allocated by cgo,Memory,GAUGE,BYTES,AVG,NONE
+SERVER,sys.cgo.totalbytes,"Total bytes of memory allocated by cgo, but not released",Memory,GAUGE,BYTES,AVG,NONE
+SERVER,sys.cgocalls,Total number of cgo calls,cgo Calls,GAUGE,COUNT,AVG,NONE
+SERVER,sys.cpu.combined.percent-normalized,"Current user+system cpu percentage consumed by the CRDB process, normalized 0-1 by number of cores",CPU Time,GAUGE,PERCENT,AVG,NONE
+SERVER,sys.cpu.host.combined.percent-normalized,"Current user+system cpu percentage across the whole machine, normalized 0-1 by number of cores",CPU Time,GAUGE,PERCENT,AVG,NONE
+SERVER,sys.cpu.now.ns,"The time when CPU measurements were taken, as nanoseconds since epoch",CPU Time,GAUGE,NANOSECONDS,AVG,NONE
+SERVER,sys.cpu.sys.ns,Total system cpu time consumed by the CRDB process,CPU Time,GAUGE,NANOSECONDS,AVG,NONE
+SERVER,sys.cpu.sys.percent,Current system cpu percentage consumed by the CRDB process,CPU Time,GAUGE,PERCENT,AVG,NONE
+SERVER,sys.cpu.user.ns,Total user cpu time consumed by the CRDB process,CPU Time,GAUGE,NANOSECONDS,AVG,NONE
+SERVER,sys.cpu.user.percent,Current user cpu percentage consumed by the CRDB process,CPU Time,GAUGE,PERCENT,AVG,NONE
+SERVER,sys.fd.open,Process open file descriptors,File Descriptors,GAUGE,COUNT,AVG,NONE
+SERVER,sys.fd.softlimit,Process open FD soft limit,File Descriptors,GAUGE,COUNT,AVG,NONE
+SERVER,sys.gc.count,Total number of GC runs,GC Runs,GAUGE,COUNT,AVG,NONE
+SERVER,sys.gc.pause.ns,Total GC pause,GC Pause,GAUGE,NANOSECONDS,AVG,NONE
+SERVER,sys.gc.pause.percent,Current GC pause percentage,GC Pause,GAUGE,PERCENT,AVG,NONE
+SERVER,sys.go.allocbytes,Current bytes of memory allocated by go,Memory,GAUGE,BYTES,AVG,NONE
+SERVER,sys.go.totalbytes,"Total bytes of memory allocated by go, but not released",Memory,GAUGE,BYTES,AVG,NONE
+SERVER,sys.goroutines,Current number of goroutines,goroutines,GAUGE,COUNT,AVG,NONE
+SERVER,sys.host.disk.io.time,Time spent reading from or writing to all disks since this process started,Time,GAUGE,NANOSECONDS,AVG,NONE
+SERVER,sys.host.disk.iopsinprogress,IO operations currently in progress on this host,Operations,GAUGE,COUNT,AVG,NONE
+SERVER,sys.host.disk.read.bytes,Bytes read from all disks since this process started,Bytes,GAUGE,BYTES,AVG,NONE
+SERVER,sys.host.disk.read.count,Disk read operations across all disks since this process started,Operations,GAUGE,COUNT,AVG,NONE
+SERVER,sys.host.disk.read.time,Time spent reading from all disks since this process started,Time,GAUGE,NANOSECONDS,AVG,NONE
+SERVER,sys.host.disk.weightedio.time,Weighted time spent reading from or writing to to all disks since this process started,Time,GAUGE,NANOSECONDS,AVG,NONE
+SERVER,sys.host.disk.write.bytes,Bytes written to all disks since this process started,Bytes,GAUGE,BYTES,AVG,NONE
+SERVER,sys.host.disk.write.count,Disk write operations across all disks since this process started,Operations,GAUGE,COUNT,AVG,NONE
+SERVER,sys.host.disk.write.time,Time spent writing to all disks since this process started,Time,GAUGE,NANOSECONDS,AVG,NONE
+SERVER,sys.host.net.recv.bytes,Bytes received on all network interfaces since this process started,Bytes,GAUGE,BYTES,AVG,NONE
+SERVER,sys.host.net.recv.packets,Packets received on all network interfaces since this process started,Packets,GAUGE,COUNT,AVG,NONE
+SERVER,sys.host.net.send.bytes,Bytes sent on all network interfaces since this process started,Bytes,GAUGE,BYTES,AVG,NONE
+SERVER,sys.host.net.send.packets,Packets sent on all network interfaces since this process started,Packets,GAUGE,COUNT,AVG,NONE
+SERVER,sys.rss,Current process RSS,RSS,GAUGE,BYTES,AVG,NONE
+SERVER,sys.runnable.goroutines.per.cpu,"Average number of goroutines that are waiting to run, normalized by number of cores",goroutines,GAUGE,COUNT,AVG,NONE
+SERVER,sys.totalmem,Total memory (both free and used),Memory,GAUGE,BYTES,AVG,NONE
+SERVER,sys.uptime,Process uptime,Uptime,GAUGE,SECONDS,AVG,NONE
diff --git a/src/current/_data/metrics.yml b/src/current/_data/metrics.yml
new file mode 100644
index 00000000000..d455ecc5c01
--- /dev/null
+++ b/src/current/_data/metrics.yml
@@ -0,0 +1,730 @@
+- metric_id: sql.new_conns
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Connections Per Second"
+ datadog_id_selfhosted: sql.new_conns.count
+ essential: true
+ metric_type: SQL
+ metric_ui_tab: [ Overview, SQL ]
+ metric_ui_graph: "SQL Connections"
+
+- metric_id: sql.select.count
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Select"
+ datadog_id_selfhosted: sql.select.count
+ datadog_id_dedicated: sql.select.count
+ essential: true
+ metric_type: SQL
+ metric_ui_tab: [ Overview, SQL ]
+ metric_ui_graph: "SQL Statements"
+
+- metric_id: sql.update.count
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Update"
+ datadog_id_selfhosted: sql.update.count
+ datadog_id_dedicated: sql.update.count
+ essential: true
+ metric_type: SQL
+ metric_ui_tab: [ Overview, SQL ]
+ metric_ui_graph: "SQL Statements"
+
+- metric_id: sql.insert.count
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Insert"
+ datadog_id_selfhosted: sql.insert.count
+ datadog_id_dedicated: sql.insert.count
+ essential: true
+ metric_type: SQL
+ metric_ui_tab: [ Overview, SQL ]
+ metric_ui_graph: "SQL Statements"
+
+- metric_id: sql.delete.count
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Delete"
+ datadog_id_selfhosted: sql.delete.count
+ datadog_id_dedicated: sql.delete.count
+ essential: true
+ metric_type: SQL
+ metric_ui_tab: [ Overview, SQL ]
+ metric_ui_graph: "SQL Statements"
+
+- metric_id: sql.service.latency
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "P90, P99, P99.9, P99.99"
+ datadog_id_selfhosted: sql.service.latency
+ datadog_id_dedicated: sql.service.latency
+ essential: true
+ metric_type: SQL
+ metric_ui_tab: [ Overview, SQL ]
+ metric_ui_graph: "Service Latency: SQL Statements"
+
+- metric_id: tenant.consumption.request_units
+ deploy_selfhosted: false
+ deploy_dedicated: false
+ deploy_serverless: true
+ short_name: "RU, Average RUs"
+ datadog_id_selfhosted: "NOT AVAILABLE"
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "Request Units"
+ metric_ui_tab: [ Overview, "Request Units"]
+ metric_ui_graph: "Request Units"
+
+- metric_id: livebytes
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Storage usage"
+ datadog_id_selfhosted: "NOT AVAILABLE"
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: Storage
+ metric_ui_tab: [ Overview ]
+ metric_ui_graph: Storage
+
+- metric_id: tenant.consumption.sql_pods_cpu_seconds
+ deploy_selfhosted: false
+ deploy_dedicated: false
+ deploy_serverless: true
+ short_name: "Total amount of CPU used by SQL pods"
+ datadog_id_selfhosted: "NOT AVAILABLE"
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "Request Units"
+ metric_ui_tab: [ "Request Units" ]
+ metric_ui_graph: "CPU"
+
+- metric_id: tenant.consumption.pgwire_egress_bytes
+ deploy_selfhosted: false
+ deploy_dedicated: false
+ deploy_serverless: true
+ short_name: "Client traffic"
+ datadog_id_selfhosted: "NOT AVAILABLE"
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "Request Units"
+ metric_ui_tab: [ "Request Units" ]
+ metric_ui_graph: "Egress"
+
+- metric_id: tenant.consumption.external_io_egress_bytes
+ deploy_selfhosted: false
+ deploy_dedicated: false
+ deploy_serverless: true
+ short_name: "Bulk I/O operations"
+ datadog_id_selfhosted: "NOT AVAILABLE"
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "Request Units"
+ metric_ui_tab: [ "Request Units" ]
+ metric_ui_graph: "Egress"
+
+- metric_id: tenant.consumption.read_requests
+ deploy_selfhosted: false
+ deploy_dedicated: false
+ deploy_serverless: true
+ short_name: "Requests"
+ datadog_id_selfhosted: "NOT AVAILABLE"
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "Request Units"
+ metric_ui_tab: [ "Request Units" ]
+ metric_ui_graph: "Reads"
+
+- metric_id: tenant.consumption.read_batches
+ deploy_selfhosted: false
+ deploy_dedicated: false
+ deploy_serverless: true
+ short_name: "Batches"
+ datadog_id_selfhosted: "NOT AVAILABLE"
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "Request Units"
+ metric_ui_tab: [ "Request Units" ]
+ metric_ui_graph: "Reads"
+
+- metric_id: tenant.consumption.read_bytes
+ deploy_selfhosted: false
+ deploy_dedicated: false
+ deploy_serverless: true
+ short_name: "Bytes"
+ datadog_id_selfhosted: "NOT AVAILABLE"
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "Request Units"
+ metric_ui_tab: [ "Request Units" ]
+ metric_ui_graph: "Reads"
+
+- metric_id: tenant.consumption.write_requests
+ deploy_selfhosted: false
+ deploy_dedicated: false
+ deploy_serverless: true
+ short_name: "Requests"
+ datadog_id_selfhosted: "NOT AVAILABLE"
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "Request Units"
+ metric_ui_tab: [ "Request Units" ]
+ metric_ui_graph: "Writes"
+
+- metric_id: tenant.consumption.write_batches
+ deploy_selfhosted: false
+ deploy_dedicated: false
+ deploy_serverless: true
+ short_name: "Batches"
+ datadog_id_selfhosted: "NOT AVAILABLE"
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "Request Units"
+ metric_ui_tab: [ "Request Units" ]
+ metric_ui_graph: "Writes"
+
+- metric_id: tenant.consumption.write_bytes
+ deploy_selfhosted: false
+ deploy_dedicated: false
+ deploy_serverless: true
+ short_name: "Bytes"
+ datadog_id_selfhosted: "NOT AVAILABLE"
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "Request Units"
+ metric_ui_tab: [ "Request Units" ]
+ metric_ui_graph: "Writes"
+
+- metric_id: tenant.consumption.cross_region_network_ru
+ deploy_selfhosted: false
+ deploy_dedicated: false
+ deploy_serverless: true
+ short_name: "Network traffic"
+ datadog_id_selfhosted: "NOT AVAILABLE"
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "Request Units"
+ metric_ui_tab: [ "Request Units" ]
+ metric_ui_graph: "Cross-region Networking"
+
+- metric_id: sql.conn.latency
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "P90, P99"
+ datadog_id_selfhosted: sql.conn.latency
+ datadog_id_dedicated: sql.conn.latency
+ essential: true
+ metric_type: "SQL"
+ metric_ui_tab: [ SQL ]
+ metric_ui_graph: "Connection Latency"
+
+- metric_id: sql.conns
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Connections"
+ datadog_id_selfhosted: sql.conns
+ datadog_id_dedicated: sql.conns
+ essential: true
+ metric_type: "SQL"
+ metric_ui_tab: [ SQL ]
+ metric_ui_graph: "Open SQL Sessions"
+
+- metric_id: sql.txns.open
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Open Transactions"
+ datadog_id_selfhosted: sql.txns.open
+ datadog_id_dedicated: sql.txns.open
+ essential: true
+ metric_type: "SQL"
+ metric_ui_tab: [ SQL ]
+ metric_ui_graph: "Open SQL Transactions"
+
+- metric_id: sql.txn.begin.count
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Begin"
+ datadog_id_selfhosted: sql.txn.begin.count
+ datadog_id_dedicated: sql.txn.begin.count
+ essential: true
+ metric_type: "SQL"
+ metric_ui_tab: [ SQL ]
+ metric_ui_graph: "Transactions"
+
+- metric_id: sql.txn.commit.count
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Commits"
+ datadog_id_selfhosted: sql.txn.commit.count
+ datadog_id_dedicated: sql.txn.commit.count
+ essential: true
+ metric_type: "SQL"
+ metric_ui_tab: [ SQL ]
+ metric_ui_graph: "Transactions"
+
+- metric_id: sql.txn.rollback.count
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Rollbacks"
+ datadog_id_selfhosted: sql.txn.rollback.count
+ datadog_id_dedicated: sql.txn.rollback.count
+ essential: true
+ metric_type: "SQL"
+ metric_ui_tab: [ SQL ]
+ metric_ui_graph: "Transactions"
+
+- metric_id: sql.txn.abort.count
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Aborts"
+ datadog_id_selfhosted: sql.txn.abort.count
+ datadog_id_dedicated: sql.txn.abort.count
+ essential: true
+ metric_type: "SQL"
+ metric_ui_tab: [ SQL ]
+ metric_ui_graph: "Transactions"
+
+- metric_id: txn.restarts.writetooold
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Write Too Old"
+ datadog_id_selfhosted: txn.restarts.writetooold
+ datadog_id_dedicated: txn.restarts.writetooold
+ essential: true
+ metric_type: "SQL"
+ metric_ui_tab: [ SQL ]
+ metric_ui_graph: "Transaction Restarts"
+
+- metric_id: txn.restarts.writetoooldmulti
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Write Too Old (multiple)"
+ datadog_id_selfhosted: txn.restarts.writetoooldmulti.count
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "SQL"
+ metric_ui_tab: [ SQL ]
+ metric_ui_graph: "Transaction Restarts"
+
+- metric_id: txn.restarts.serializable
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Forwarded Timestamp"
+ datadog_id_selfhosted: txn.restarts.serializable
+ datadog_id_dedicated: txn.restarts.serializable
+ essential: true
+ metric_type: "SQL"
+ metric_ui_tab: [ SQL ]
+ metric_ui_graph: "Transaction Restarts"
+
+- metric_id: txn.restarts.asyncwritefailure
+ deploy_selfhosted: false
+ deploy_dedicated: false
+ deploy_serverless: true
+ short_name: "Async Consensus Failure"
+ datadog_id_selfhosted: "NOT AVAILABLE"
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "SQL"
+ metric_ui_tab: [ SQL ]
+ metric_ui_graph: "Transaction Restarts"
+
+- metric_id: txn.restarts.readwithinuncertainty
+ deploy_selfhosted: false
+ deploy_dedicated: false
+ deploy_serverless: true
+ short_name: "Read Within Uncertainty Interval"
+ datadog_id_selfhosted: "NOT AVAILABLE"
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "SQL"
+ metric_ui_tab: [ SQL ]
+ metric_ui_graph: "Transaction Restarts"
+
+- metric_id: txn.restarts.txnaborted
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Aborted"
+ datadog_id_selfhosted: txn.restarts.txnaborted.count
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "SQL"
+ metric_ui_tab: [ SQL ]
+ metric_ui_graph: "Transaction Restarts"
+
+- metric_id: txn.restarts.txnpush
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Push Failure"
+ datadog_id_selfhosted: txn.restarts.txnpush.count
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "SQL"
+ metric_ui_tab: [ SQL ]
+ metric_ui_graph: "Transaction Restarts"
+
+- metric_id: txn.restarts.unknown
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Unknown"
+ datadog_id_selfhosted: txn.restarts.unknown.count
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "SQL"
+ metric_ui_tab: [ SQL ]
+ metric_ui_graph: "Transaction Restarts"
+
+- metric_id: sql.txn.latency
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "P90, P99"
+ datadog_id_selfhosted: sql.txn.latency
+ datadog_id_dedicated: sql.txn.latency
+ essential: true
+ metric_type: "SQL"
+ metric_ui_tab: [ "SQL" ]
+ metric_ui_graph: "Transaction Latency"
+
+- metric_id: sql.statements.active
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Active Statements"
+ datadog_id_selfhosted: sql.statements.active
+ datadog_id_dedicated: sql.statements.active
+ essential: true
+ metric_type: "SQL"
+ metric_ui_tab: [ "SQL" ]
+ metric_ui_graph: "Active SQL Statements"
+
+- metric_id: sql.failure.count
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Errors"
+ datadog_id_selfhosted: sql.failure
+ datadog_id_dedicated: sql.failure.count
+ essential: true
+ metric_type: "SQL"
+ metric_ui_tab: [ "SQL" ]
+ metric_ui_graph: "SQL Statement Errors"
+
+- metric_id: sql.full.scan.count
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Full scans"
+ datadog_id_selfhosted: sql.full.scan
+ datadog_id_dedicated: sql.full.scan.count
+ essential: true
+ metric_type: "SQL"
+ metric_ui_tab: [ "SQL" ]
+ metric_ui_graph: "Full Scans"
+
+- metric_id: sql.ddl.count
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "DDL Statements"
+ datadog_id_selfhosted: sql.ddl.count
+ datadog_id_dedicated: sql.ddl.count
+ essential: true
+ metric_type: "SQL"
+ metric_ui_tab: [ "SQL" ]
+ metric_ui_graph: "Schema Changes"
+
+- metric_id: jobs.auto_create_stats.currently_running
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Auto Create Statistics Running"
+ datadog_id_selfhosted: jobs.auto_create_stats.currently_running
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "Table Statistics"
+ metric_ui_tab: [ "SQL" ]
+ metric_ui_graph: "Create Statistics Jobs"
+
+- metric_id: jobs.create_stats.currently_running
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Create Statistics Running"
+ datadog_id_selfhosted: jobs.create_stats.currently_running
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "Table Statistics"
+ metric_ui_tab: [ "SQL" ]
+ metric_ui_graph: "Create Statistics Jobs"
+
+- metric_id: jobs.auto_create_stats.resume_failed
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Auto Create Statistics Failed"
+ datadog_id_selfhosted: jobs.auto.create.stats.resume_failed.count
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "Table Statistics"
+ metric_ui_tab: [ "SQL" ]
+ metric_ui_graph: "Create Statistics Jobs"
+
+- metric_id: jobs.auto_create_stats.currently_paused
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Auto Create Statistics Paused"
+ datadog_id_selfhosted: jobs.auto.create.stats.currently_paused
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "Table Statistics"
+ metric_ui_tab: [ "SQL" ]
+ metric_ui_graph: "Create Statistics Jobs"
+
+- metric_id: changefeed.running
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Running"
+ datadog_id_selfhosted: changefeed.running
+ datadog_id_dedicated: changefeed.running
+ essential: true
+ metric_type: Changefeeds
+ metric_ui_tab: [ "Changefeeds" ]
+ metric_ui_graph: "Changefeed Status"
+
+- metric_id: jobs.changefeed.currently_paused
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Paused"
+ datadog_id_selfhosted: jobs.changefeed.currently_paused
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: Changefeeds
+ metric_ui_tab: [ "Changefeeds" ]
+ metric_ui_graph: "Changefeed Status"
+
+- metric_id: changefeed.failures
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Failures"
+ datadog_id_selfhosted: changefeed.failures
+ datadog_id_dedicated: changefeed.failures
+ essential: true
+ metric_type: Changefeeds
+ metric_ui_tab: [ "Changefeeds" ]
+ metric_ui_graph: "Changefeed Status"
+
+- metric_id: changefeed.error_retries
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Errors"
+ datadog_id_selfhosted: changefeed.error_retries
+ datadog_id_dedicated: changefeed.error_retries
+ essential: true
+ metric_type: Changefeeds
+ metric_ui_tab: [ "Changefeeds" ]
+ metric_ui_graph: "Retryable Errors"
+
+- metric_id: changefeed.emitted_messages
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Emitted messages"
+ datadog_id_selfhosted: changefeed.emitted.messages
+ datadog_id_dedicated: changefeed.emitted.messages
+ essential: true
+ metric_type: Changefeeds
+ metric_ui_tab: [ "Changefeeds" ]
+ metric_ui_graph: "Emitted Messages"
+
+- metric_id: changefeed.emitted_bytes
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Emitted bytes"
+ datadog_id_selfhosted: changefeed.emitted_bytes.count
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: Changefeeds
+ metric_ui_tab: [ "Changefeeds" ]
+ metric_ui_graph: "Emitted Bytes"
+
+- metric_id: changefeed.commit_latency
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "P99, P90"
+ datadog_id_selfhosted: changefeed.commit_latency
+ datadog_id_dedicated: changefeed.commit_latency
+ essential: true
+ metric_type: Changefeeds
+ metric_ui_tab: [ "Changefeeds" ]
+ metric_ui_graph: "Commit Latency"
+
+- metric_id: jobs.changefeed.protected_age_sec
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Protected Timestamp Age"
+ datadog_id_selfhosted: jobs.changefeed.protected_age_sec
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: Changefeeds
+ metric_ui_tab: [ "Changefeeds" ]
+ metric_ui_graph: "Oldest Protected Timestamp"
+
+- metric_id: jobs.row_level_ttl.resume_completed
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Resume Completed"
+ datadog_id_selfhosted: jobs.row_level_ttl.resume_completed.count
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "Row-Level TTL"
+ metric_ui_tab: [ "Row-Level TTL" ]
+ metric_ui_graph: "Row-Level TTL Jobs"
+
+- metric_id: jobs.row_level_ttl.currently_running
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Running"
+ datadog_id_selfhosted: jobs.row.level.ttl.currently_running
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "Row-Level TTL"
+ metric_ui_tab: [ "Row-Level TTL" ]
+ metric_ui_graph: "Row-Level TTL Jobs"
+
+- metric_id: jobs.row_level_ttl.currently_paused
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Paused"
+ datadog_id_selfhosted: jobs.row_level_ttl.currently_paused
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "Row-Level TTL"
+ metric_ui_tab: [ "Row-Level TTL" ]
+ metric_ui_graph: "Row-Level TTL Jobs"
+
+- metric_id: jobs.row_level_ttl.resume_failed
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Resume Failed"
+ datadog_id_selfhosted: jobs.row_level_ttl.resume_failed.count
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "Row-Level TTL"
+ metric_ui_tab: [ "Row-Level TTL" ]
+ metric_ui_graph: "Row-Level TTL Jobs"
+
+- metric_id: schedules.scheduled-row-level-ttl-executor.failed
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Failed Schedules"
+ datadog_id_selfhosted: schedules.scheduled-row-level-ttl-executor.failed.count
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "Row-Level TTL"
+ metric_ui_tab: [ "Row-Level TTL" ]
+ metric_ui_graph: "Row-Level TTL Jobs"
+
+- metric_id: jobs.row_level_ttl.rows_selected
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Rows selected"
+ datadog_id_selfhosted: jobs.row_level_ttl.rows_selected.count
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "Row-Level TTL"
+ metric_ui_tab: [ "Row-Level TTL" ]
+ metric_ui_graph: "Processing Rate"
+
+- metric_id: jobs.row_level_ttl.rows_deleted
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Rows deleted"
+ datadog_id_selfhosted: jobs.row_level_ttl.rows_deleted.count
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "Row-Level TTL"
+ metric_ui_tab: [ "Row-Level TTL" ]
+ metric_ui_graph: "Processing Rate"
+
+- metric_id: jobs.row_level_ttl.total_rows
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Total Rows"
+ datadog_id_selfhosted: "NOT AVAILABLE"
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "Row-Level TTL"
+ metric_ui_tab: [ "Row-Level TTL" ]
+ metric_ui_graph: "Estimated Rows"
+
+- metric_id: jobs.row_level_ttl.total_expired_rows
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Expired Rows"
+ datadog_id_selfhosted: "NOT AVAILABLE"
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "Row-Level TTL"
+ metric_ui_tab: [ "Row-Level TTL" ]
+ metric_ui_graph: "Estimated Rows"
+
+- metric_id: jobs.row_level_ttl.select_duration
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Select Latency (P90), Select Latency (P99)"
+ datadog_id_selfhosted: "NOT AVAILABLE"
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "Row-Level TTL"
+ metric_ui_tab: [ "Row-Level TTL" ]
+ metric_ui_graph: "Row-Level TTL Job Latency"
+
+- metric_id: jobs.row_level_ttl.total_expired_rows
+ deploy_selfhosted: true
+ deploy_dedicated: true
+ deploy_serverless: true
+ short_name: "Delete Latency (P90), Delete Latency (P99)"
+ datadog_id_selfhosted: "NOT AVAILABLE"
+ datadog_id_dedicated: "NOT AVAILABLE"
+ essential: true
+ metric_type: "Row-Level TTL"
+ metric_ui_tab: [ "Row-Level TTL" ]
+ metric_ui_graph: "Row-Level TTL Job Latency"
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/changefeed.commit_latency.md b/src/current/_includes/metrics-usage/changefeed.commit_latency.md
new file mode 100644
index 00000000000..36c417ff322
--- /dev/null
+++ b/src/current/_includes/metrics-usage/changefeed.commit_latency.md
@@ -0,0 +1 @@
+This metric provides a useful context when assessing the state of changefeeds. This metric characterizes the end-to-end lag between a committed change and that change applied at the destination.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/changefeed.emitted_bytes.md b/src/current/_includes/metrics-usage/changefeed.emitted_bytes.md
new file mode 100644
index 00000000000..011700ac01a
--- /dev/null
+++ b/src/current/_includes/metrics-usage/changefeed.emitted_bytes.md
@@ -0,0 +1 @@
+This metric provides a useful context when assessing the state of changefeeds. This metric characterizes the throughput bytes being streamed from the CockroachDB cluster.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/changefeed.emitted_messages.md b/src/current/_includes/metrics-usage/changefeed.emitted_messages.md
new file mode 100644
index 00000000000..93d28a59781
--- /dev/null
+++ b/src/current/_includes/metrics-usage/changefeed.emitted_messages.md
@@ -0,0 +1 @@
+This metric provides a useful context when assessing the state of changefeeds. This metric characterizes the rate of changes being streamed from the CockroachDB cluster.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/changefeed.error_retries.md b/src/current/_includes/metrics-usage/changefeed.error_retries.md
new file mode 100644
index 00000000000..bda610fedbd
--- /dev/null
+++ b/src/current/_includes/metrics-usage/changefeed.error_retries.md
@@ -0,0 +1 @@
+This metric tracks transient changefeed errors. Alert on "too many" errors, such as 50 retries in 15 minutes. For example, during a rolling upgrade this counter will increase because the changefeed jobs will restart following node restarts. There is an exponential backoff, up to 10 minutes. But if there is no rolling upgrade in process or other cluster maintenance, and the error rate is high, investigate the changefeed job.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/changefeed.failures.md b/src/current/_includes/metrics-usage/changefeed.failures.md
new file mode 100644
index 00000000000..67252cd1d5b
--- /dev/null
+++ b/src/current/_includes/metrics-usage/changefeed.failures.md
@@ -0,0 +1 @@
+This metric tracks the permanent changefeed job failures that the jobs system will not try to restart. Any increase in this counter should be investigated. An alert on this metric is recommended.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/changefeed.running.md b/src/current/_includes/metrics-usage/changefeed.running.md
new file mode 100644
index 00000000000..4779c9f2da1
--- /dev/null
+++ b/src/current/_includes/metrics-usage/changefeed.running.md
@@ -0,0 +1 @@
+This metric tracks the total number of all running changefeeds.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/jobs.auto_create_stats.currently_paused.md b/src/current/_includes/metrics-usage/jobs.auto_create_stats.currently_paused.md
new file mode 100644
index 00000000000..7b6c30cf303
--- /dev/null
+++ b/src/current/_includes/metrics-usage/jobs.auto_create_stats.currently_paused.md
@@ -0,0 +1 @@
+This metric is a high-level indicator that automatically generated statistics jobs are paused which can lead to the query optimizer running with stale statistics. Stale statistics can cause suboptimal query plans to be selected leading to poor query performance.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/jobs.auto_create_stats.currently_running.md b/src/current/_includes/metrics-usage/jobs.auto_create_stats.currently_running.md
new file mode 100644
index 00000000000..ea8e79c5fff
--- /dev/null
+++ b/src/current/_includes/metrics-usage/jobs.auto_create_stats.currently_running.md
@@ -0,0 +1 @@
+This metric tracks the number of active automatically generated statistics jobs that could also be consuming resources. Ensure that foreground SQL traffic is not impacted by correlating this metric with SQL latency and query volume metrics.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/jobs.auto_create_stats.resume_failed.md b/src/current/_includes/metrics-usage/jobs.auto_create_stats.resume_failed.md
new file mode 100644
index 00000000000..0d127d394cf
--- /dev/null
+++ b/src/current/_includes/metrics-usage/jobs.auto_create_stats.resume_failed.md
@@ -0,0 +1 @@
+This metric is a high-level indicator that automatically generated table statistics is failing. Failed statistic creation can lead to the query optimizer running with stale statistics. Stale statistics can cause suboptimal query plans to be selected leading to poor query performance.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/jobs.changefeed.currently_paused.md b/src/current/_includes/metrics-usage/jobs.changefeed.currently_paused.md
new file mode 100644
index 00000000000..a25d0b9501f
--- /dev/null
+++ b/src/current/_includes/metrics-usage/jobs.changefeed.currently_paused.md
@@ -0,0 +1 @@
+Monitor and alert on this metric to safeguard against an inadvertent operational error of leaving a changefeed job in a paused state for an extended period of time. Changefeed jobs should not be paused for a long time because the protected timestamp prevents garbage collection.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/jobs.changefeed.protected_age_sec.md b/src/current/_includes/metrics-usage/jobs.changefeed.protected_age_sec.md
new file mode 100644
index 00000000000..f7154d00066
--- /dev/null
+++ b/src/current/_includes/metrics-usage/jobs.changefeed.protected_age_sec.md
@@ -0,0 +1 @@
+Changefeeds use protected timestamps to protect the data from being garbage collected. Ensure the protected timestamp age does not significantly exceed the GC TTL zone configuration. Alert on this metric if the protected timestamp age is greater than 3 times the GC TTL.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/jobs.create_stats.currently_running.md b/src/current/_includes/metrics-usage/jobs.create_stats.currently_running.md
new file mode 100644
index 00000000000..86da7562218
--- /dev/null
+++ b/src/current/_includes/metrics-usage/jobs.create_stats.currently_running.md
@@ -0,0 +1 @@
+This metric tracks the number of active create statistics jobs that may be consuming resources. Ensure that foreground SQL traffic is not impacted by correlating this metric with SQL latency and query volume metrics.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/jobs.row_level_ttl.currently_paused.md b/src/current/_includes/metrics-usage/jobs.row_level_ttl.currently_paused.md
new file mode 100644
index 00000000000..9b51186b20b
--- /dev/null
+++ b/src/current/_includes/metrics-usage/jobs.row_level_ttl.currently_paused.md
@@ -0,0 +1 @@
+Monitor this metric to ensure the Row-Level TTL job does not remain paused inadvertently for an extended period.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/jobs.row_level_ttl.currently_running.md b/src/current/_includes/metrics-usage/jobs.row_level_ttl.currently_running.md
new file mode 100644
index 00000000000..245e54ecae3
--- /dev/null
+++ b/src/current/_includes/metrics-usage/jobs.row_level_ttl.currently_running.md
@@ -0,0 +1 @@
+Monitor this metric to ensure there are not too many Row Level TTL jobs running at the same time. Generally, this metric should be in the low single digits.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/jobs.row_level_ttl.delete_duration.md b/src/current/_includes/metrics-usage/jobs.row_level_ttl.delete_duration.md
new file mode 100644
index 00000000000..f4f4d60667f
--- /dev/null
+++ b/src/current/_includes/metrics-usage/jobs.row_level_ttl.delete_duration.md
@@ -0,0 +1 @@
+See Description.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/jobs.row_level_ttl.resume_completed.md b/src/current/_includes/metrics-usage/jobs.row_level_ttl.resume_completed.md
new file mode 100644
index 00000000000..f8794ae742d
--- /dev/null
+++ b/src/current/_includes/metrics-usage/jobs.row_level_ttl.resume_completed.md
@@ -0,0 +1 @@
+If Row-Level TTL is enabled, this metric should be nonzero and correspond to the `ttl_cron` setting that was chosen. If this metric is zero, it means the job is not running.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/jobs.row_level_ttl.resume_failed.md b/src/current/_includes/metrics-usage/jobs.row_level_ttl.resume_failed.md
new file mode 100644
index 00000000000..95861e2d64c
--- /dev/null
+++ b/src/current/_includes/metrics-usage/jobs.row_level_ttl.resume_failed.md
@@ -0,0 +1 @@
+This metric should remain at zero. Repeated errors means the Row-Level TTL job is not deleting data.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/jobs.row_level_ttl.rows_deleted.md b/src/current/_includes/metrics-usage/jobs.row_level_ttl.rows_deleted.md
new file mode 100644
index 00000000000..befa81fcc6e
--- /dev/null
+++ b/src/current/_includes/metrics-usage/jobs.row_level_ttl.rows_deleted.md
@@ -0,0 +1 @@
+Correlate this metric with the metric `jobs.row_level_ttl.rows_selected` to ensure all the rows that should be deleted are actually getting deleted.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/jobs.row_level_ttl.rows_selected.md b/src/current/_includes/metrics-usage/jobs.row_level_ttl.rows_selected.md
new file mode 100644
index 00000000000..a80cc587a9e
--- /dev/null
+++ b/src/current/_includes/metrics-usage/jobs.row_level_ttl.rows_selected.md
@@ -0,0 +1 @@
+Correlate this metric with the metric `jobs.row_level_ttl.rows_deleted` to ensure all the rows that should be deleted are actually getting deleted.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/jobs.row_level_ttl.select_duration.md b/src/current/_includes/metrics-usage/jobs.row_level_ttl.select_duration.md
new file mode 100644
index 00000000000..f4f4d60667f
--- /dev/null
+++ b/src/current/_includes/metrics-usage/jobs.row_level_ttl.select_duration.md
@@ -0,0 +1 @@
+See Description.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/jobs.row_level_ttl.total_expired_rows.md b/src/current/_includes/metrics-usage/jobs.row_level_ttl.total_expired_rows.md
new file mode 100644
index 00000000000..f4f4d60667f
--- /dev/null
+++ b/src/current/_includes/metrics-usage/jobs.row_level_ttl.total_expired_rows.md
@@ -0,0 +1 @@
+See Description.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/jobs.row_level_ttl.total_rows.md b/src/current/_includes/metrics-usage/jobs.row_level_ttl.total_rows.md
new file mode 100644
index 00000000000..f4f4d60667f
--- /dev/null
+++ b/src/current/_includes/metrics-usage/jobs.row_level_ttl.total_rows.md
@@ -0,0 +1 @@
+See Description.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/livebytes.md b/src/current/_includes/metrics-usage/livebytes.md
new file mode 100644
index 00000000000..2aa4b0edee2
--- /dev/null
+++ b/src/current/_includes/metrics-usage/livebytes.md
@@ -0,0 +1 @@
+The amount of data being stored in the cluster. This is the logical number of live bytes and does not account for compression or replication.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/schedules.scheduled-row-level-ttl-executor.failed.md b/src/current/_includes/metrics-usage/schedules.scheduled-row-level-ttl-executor.failed.md
new file mode 100644
index 00000000000..56671c3b7e6
--- /dev/null
+++ b/src/current/_includes/metrics-usage/schedules.scheduled-row-level-ttl-executor.failed.md
@@ -0,0 +1 @@
+Monitor this metric to ensure the Row-Level TTL job is running. If it is non-zero, it means the job could not be created.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/sql.conn.latency.md b/src/current/_includes/metrics-usage/sql.conn.latency.md
new file mode 100644
index 00000000000..6a11ea50172
--- /dev/null
+++ b/src/current/_includes/metrics-usage/sql.conn.latency.md
@@ -0,0 +1,3 @@
+Connection latency is calculated as the time in nanoseconds between when the cluster receives a connection request and establishes the connection to the client, including authentication. This graph shows the p90 and p99 latencies for SQL connections to the cluster.
+
+These metrics characterize the database connection latency which can affect the application performance, for example, by having slow startup times.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/sql.conns.md b/src/current/_includes/metrics-usage/sql.conns.md
new file mode 100644
index 00000000000..45a75ab3efb
--- /dev/null
+++ b/src/current/_includes/metrics-usage/sql.conns.md
@@ -0,0 +1,5 @@
+This metric shows the total number of SQL client connections across the cluster.
+
+Refer to the Sessions page for more details on the sessions.
+
+This metric also shows the distribution, or balancing, of connections across the cluster. Review Connection Pooling.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/sql.ddl.count.md b/src/current/_includes/metrics-usage/sql.ddl.count.md
new file mode 100644
index 00000000000..a2c83e6444f
--- /dev/null
+++ b/src/current/_includes/metrics-usage/sql.ddl.count.md
@@ -0,0 +1 @@
+This high-level metric reflects workload volume. Monitor this metric to identify abnormal application behavior or patterns over time. If abnormal patterns emerge, apply the metric's time range to the SQL Activity pages to investigate interesting outliers or patterns. For example, on the Transactions page and the Statements page, sort on the Execution Count column. To find problematic sessions, on the Sessions page, sort on the Transaction Count column. Find the sessions with high transaction counts and trace back to a user or application.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/sql.delete.count.md b/src/current/_includes/metrics-usage/sql.delete.count.md
new file mode 100644
index 00000000000..a2c83e6444f
--- /dev/null
+++ b/src/current/_includes/metrics-usage/sql.delete.count.md
@@ -0,0 +1 @@
+This high-level metric reflects workload volume. Monitor this metric to identify abnormal application behavior or patterns over time. If abnormal patterns emerge, apply the metric's time range to the SQL Activity pages to investigate interesting outliers or patterns. For example, on the Transactions page and the Statements page, sort on the Execution Count column. To find problematic sessions, on the Sessions page, sort on the Transaction Count column. Find the sessions with high transaction counts and trace back to a user or application.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/sql.distsql.contended_queries.count.md b/src/current/_includes/metrics-usage/sql.distsql.contended_queries.count.md
new file mode 100644
index 00000000000..4c04dc9c207
--- /dev/null
+++ b/src/current/_includes/metrics-usage/sql.distsql.contended_queries.count.md
@@ -0,0 +1 @@
+The total number of SQL statements that experienced contention.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/sql.failure.count.md b/src/current/_includes/metrics-usage/sql.failure.count.md
new file mode 100644
index 00000000000..a4f589343c6
--- /dev/null
+++ b/src/current/_includes/metrics-usage/sql.failure.count.md
@@ -0,0 +1 @@
+This metric is a high-level indicator of workload and application degradation with query failures. Use the Insights page to find failed executions with their error code to troubleshoot or use application-level logs, if instrumented, to determine the cause of error.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/sql.full.scan.count.md b/src/current/_includes/metrics-usage/sql.full.scan.count.md
new file mode 100644
index 00000000000..a41311784ab
--- /dev/null
+++ b/src/current/_includes/metrics-usage/sql.full.scan.count.md
@@ -0,0 +1 @@
+This metric is a high-level indicator of potentially suboptimal query plans in the workload that may require index tuning and maintenance. To identify the statements with a full table scan, use `SHOW FULL TABLE SCAN` or the SQL Activity Statements page with the corresponding metric time frame. The Statements page also includes explain plans and index recommendations. Not all full scans are necessarily bad especially over smaller tables.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/sql.insert.count.md b/src/current/_includes/metrics-usage/sql.insert.count.md
new file mode 100644
index 00000000000..a2c83e6444f
--- /dev/null
+++ b/src/current/_includes/metrics-usage/sql.insert.count.md
@@ -0,0 +1 @@
+This high-level metric reflects workload volume. Monitor this metric to identify abnormal application behavior or patterns over time. If abnormal patterns emerge, apply the metric's time range to the SQL Activity pages to investigate interesting outliers or patterns. For example, on the Transactions page and the Statements page, sort on the Execution Count column. To find problematic sessions, on the Sessions page, sort on the Transaction Count column. Find the sessions with high transaction counts and trace back to a user or application.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/sql.new_conns.md b/src/current/_includes/metrics-usage/sql.new_conns.md
new file mode 100644
index 00000000000..4313e9bdf65
--- /dev/null
+++ b/src/current/_includes/metrics-usage/sql.new_conns.md
@@ -0,0 +1 @@
+The rate of this metric shows how frequently new connections are being established. This can be useful in determining if a high rate of incoming new connections is causing additional load on the server due to a misconfigured application.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/sql.select.count.md b/src/current/_includes/metrics-usage/sql.select.count.md
new file mode 100644
index 00000000000..a2c83e6444f
--- /dev/null
+++ b/src/current/_includes/metrics-usage/sql.select.count.md
@@ -0,0 +1 @@
+This high-level metric reflects workload volume. Monitor this metric to identify abnormal application behavior or patterns over time. If abnormal patterns emerge, apply the metric's time range to the SQL Activity pages to investigate interesting outliers or patterns. For example, on the Transactions page and the Statements page, sort on the Execution Count column. To find problematic sessions, on the Sessions page, sort on the Transaction Count column. Find the sessions with high transaction counts and trace back to a user or application.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/sql.service.latency.md b/src/current/_includes/metrics-usage/sql.service.latency.md
new file mode 100644
index 00000000000..a48ac51810d
--- /dev/null
+++ b/src/current/_includes/metrics-usage/sql.service.latency.md
@@ -0,0 +1 @@
+These high-level metrics reflect workload performance. Monitor these metrics to understand latency over time. If abnormal patterns emerge, apply the metric's time range to the SQL Activity pages to investigate interesting outliers or patterns. The Statements page has P90 Latency and P99 latency columns to enable correlation with this metric.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/sql.statements.active.md b/src/current/_includes/metrics-usage/sql.statements.active.md
new file mode 100644
index 00000000000..2b3040eb5a0
--- /dev/null
+++ b/src/current/_includes/metrics-usage/sql.statements.active.md
@@ -0,0 +1 @@
+This high-level metric reflects workload volume.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/sql.txn.abort.count.md b/src/current/_includes/metrics-usage/sql.txn.abort.count.md
new file mode 100644
index 00000000000..7424a23c89c
--- /dev/null
+++ b/src/current/_includes/metrics-usage/sql.txn.abort.count.md
@@ -0,0 +1 @@
+This high-level metric reflects workload performance. A persistently high number of SQL transaction abort errors may negatively impact the workload performance and needs to be investigated.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/sql.txn.begin.count.md b/src/current/_includes/metrics-usage/sql.txn.begin.count.md
new file mode 100644
index 00000000000..45574c4041d
--- /dev/null
+++ b/src/current/_includes/metrics-usage/sql.txn.begin.count.md
@@ -0,0 +1 @@
+This metric reflects workload volume by counting explicit transactions. Use this metric to determine whether explicit transactions can be refactored as implicit transactions (individual statements).
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/sql.txn.commit.count.md b/src/current/_includes/metrics-usage/sql.txn.commit.count.md
new file mode 100644
index 00000000000..c8cab65bc6b
--- /dev/null
+++ b/src/current/_includes/metrics-usage/sql.txn.commit.count.md
@@ -0,0 +1 @@
+This metric shows the number of transactions that completed successfully. This metric can be used as a proxy to measure the number of successful explicit transactions.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/sql.txn.latency.md b/src/current/_includes/metrics-usage/sql.txn.latency.md
new file mode 100644
index 00000000000..fc7583d158f
--- /dev/null
+++ b/src/current/_includes/metrics-usage/sql.txn.latency.md
@@ -0,0 +1 @@
+Over the last minute, this cluster executed 90% or 99% of transactions within this time. This time does not include network latency between the cluster and client. These metrics provide an overview of the current SQL workload.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/sql.txn.rollback.count.md b/src/current/_includes/metrics-usage/sql.txn.rollback.count.md
new file mode 100644
index 00000000000..e4273af9279
--- /dev/null
+++ b/src/current/_includes/metrics-usage/sql.txn.rollback.count.md
@@ -0,0 +1 @@
+This metric shows the number of orderly transaction transactions. A persistently high number of rollbacks may negatively impact the workload performance and needs to be investigated.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/sql.txns.open.md b/src/current/_includes/metrics-usage/sql.txns.open.md
new file mode 100644
index 00000000000..7de072c2f60
--- /dev/null
+++ b/src/current/_includes/metrics-usage/sql.txns.open.md
@@ -0,0 +1 @@
+This metric should roughly correspond to the number of cores * 4. If this metric is consistently larger, scale out the cluster.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/sql.update.count.md b/src/current/_includes/metrics-usage/sql.update.count.md
new file mode 100644
index 00000000000..0d5d7cdc05c
--- /dev/null
+++ b/src/current/_includes/metrics-usage/sql.update.count.md
@@ -0,0 +1 @@
+This high-level metric reflects workload volume. Monitor this metric to identify abnormal application behavior or patterns over time. If abnormal patterns emerge, apply the metric's time range to the SQL Activity pages to investigate interesting outliers or patterns. For example, on the Transactions page and the Statements page, sort on the Execution Count column. To find problematic sessions, on the Sessions page, sort on the Transaction Count column. Find the sessions with high transaction counts and trace back to a user or application.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/tenant.consumption.cross_region_network_ru.md b/src/current/_includes/metrics-usage/tenant.consumption.cross_region_network_ru.md
new file mode 100644
index 00000000000..c65ea58d1ca
--- /dev/null
+++ b/src/current/_includes/metrics-usage/tenant.consumption.cross_region_network_ru.md
@@ -0,0 +1 @@
+The number of RUs that were consumed due to cross-region networking. Correlate these metrics with Request Units (RUs). Learn more.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/tenant.consumption.external_io_egress_bytes.md b/src/current/_includes/metrics-usage/tenant.consumption.external_io_egress_bytes.md
new file mode 100644
index 00000000000..b2abb7201db
--- /dev/null
+++ b/src/current/_includes/metrics-usage/tenant.consumption.external_io_egress_bytes.md
@@ -0,0 +1 @@
+The number of RUs that were consumed because of byte traffic to the client and cluster bulk I/O operations (e.g., CDC). Correlate this metric with Request Units (RUs). Learn more.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/tenant.consumption.pgwire_egress_bytes.md b/src/current/_includes/metrics-usage/tenant.consumption.pgwire_egress_bytes.md
new file mode 100644
index 00000000000..b2abb7201db
--- /dev/null
+++ b/src/current/_includes/metrics-usage/tenant.consumption.pgwire_egress_bytes.md
@@ -0,0 +1 @@
+The number of RUs that were consumed because of byte traffic to the client and cluster bulk I/O operations (e.g., CDC). Correlate this metric with Request Units (RUs). Learn more.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/tenant.consumption.read_batches.md b/src/current/_includes/metrics-usage/tenant.consumption.read_batches.md
new file mode 100644
index 00000000000..dec472b5cc6
--- /dev/null
+++ b/src/current/_includes/metrics-usage/tenant.consumption.read_batches.md
@@ -0,0 +1 @@
+The number of RUs that were consumed due to KV reads, broken down by requests, batches, and bytes. SQL statements are translated into lower-level KV read requests that are sent in batches. Correlate these metrics with Request Units (RUs). Learn more.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/tenant.consumption.read_bytes.md b/src/current/_includes/metrics-usage/tenant.consumption.read_bytes.md
new file mode 100644
index 00000000000..dec472b5cc6
--- /dev/null
+++ b/src/current/_includes/metrics-usage/tenant.consumption.read_bytes.md
@@ -0,0 +1 @@
+The number of RUs that were consumed due to KV reads, broken down by requests, batches, and bytes. SQL statements are translated into lower-level KV read requests that are sent in batches. Correlate these metrics with Request Units (RUs). Learn more.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/tenant.consumption.read_requests.md b/src/current/_includes/metrics-usage/tenant.consumption.read_requests.md
new file mode 100644
index 00000000000..dec472b5cc6
--- /dev/null
+++ b/src/current/_includes/metrics-usage/tenant.consumption.read_requests.md
@@ -0,0 +1 @@
+The number of RUs that were consumed due to KV reads, broken down by requests, batches, and bytes. SQL statements are translated into lower-level KV read requests that are sent in batches. Correlate these metrics with Request Units (RUs). Learn more.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/tenant.consumption.request_units.md b/src/current/_includes/metrics-usage/tenant.consumption.request_units.md
new file mode 100644
index 00000000000..84668c3f589
--- /dev/null
+++ b/src/current/_includes/metrics-usage/tenant.consumption.request_units.md
@@ -0,0 +1 @@
+The CPU and I/O resources being used by queries in the cluster. Simple queries consume few RUs, while complicated queries with many reads and writes consume more RUs. Learn more.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/tenant.consumption.sql_pods_cpu_seconds.md b/src/current/_includes/metrics-usage/tenant.consumption.sql_pods_cpu_seconds.md
new file mode 100644
index 00000000000..1f5fbd78d78
--- /dev/null
+++ b/src/current/_includes/metrics-usage/tenant.consumption.sql_pods_cpu_seconds.md
@@ -0,0 +1 @@
+The number of RUs that were consumed because of SQL CPU usage. Correlate this metric with Request Units (RUs) and determine if your workload is CPU bound. Learn more.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/tenant.consumption.write_batches.md b/src/current/_includes/metrics-usage/tenant.consumption.write_batches.md
new file mode 100644
index 00000000000..869779af131
--- /dev/null
+++ b/src/current/_includes/metrics-usage/tenant.consumption.write_batches.md
@@ -0,0 +1 @@
+The number of RUs that were consumed due to KV writes, broken down by requests, batches, and bytes. SQL statements are translated into lower-level KV read requests that are sent in batches. Correlate these metrics with Request Units (RUs). Learn more.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/tenant.consumption.write_bytes.md b/src/current/_includes/metrics-usage/tenant.consumption.write_bytes.md
new file mode 100644
index 00000000000..869779af131
--- /dev/null
+++ b/src/current/_includes/metrics-usage/tenant.consumption.write_bytes.md
@@ -0,0 +1 @@
+The number of RUs that were consumed due to KV writes, broken down by requests, batches, and bytes. SQL statements are translated into lower-level KV read requests that are sent in batches. Correlate these metrics with Request Units (RUs). Learn more.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/tenant.consumption.write_requests.md b/src/current/_includes/metrics-usage/tenant.consumption.write_requests.md
new file mode 100644
index 00000000000..869779af131
--- /dev/null
+++ b/src/current/_includes/metrics-usage/tenant.consumption.write_requests.md
@@ -0,0 +1 @@
+The number of RUs that were consumed due to KV writes, broken down by requests, batches, and bytes. SQL statements are translated into lower-level KV read requests that are sent in batches. Correlate these metrics with Request Units (RUs). Learn more.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/txn.restarts.asyncwritefailure.md b/src/current/_includes/metrics-usage/txn.restarts.asyncwritefailure.md
new file mode 100644
index 00000000000..3eca6449c6e
--- /dev/null
+++ b/src/current/_includes/metrics-usage/txn.restarts.asyncwritefailure.md
@@ -0,0 +1 @@
+This metric is one measure of the impact of contention conflicts on workload performance. For guidance on contention conflicts, review transaction contention best practices and performance tuning recipes. Tens of restarts per minute may be a high value, a signal of an elevated degree of contention in the workload, which should be investigated. For the specific error, refer to the transaction retry error reference for more details.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/txn.restarts.readwithinuncertainty.md b/src/current/_includes/metrics-usage/txn.restarts.readwithinuncertainty.md
new file mode 100644
index 00000000000..3eca6449c6e
--- /dev/null
+++ b/src/current/_includes/metrics-usage/txn.restarts.readwithinuncertainty.md
@@ -0,0 +1 @@
+This metric is one measure of the impact of contention conflicts on workload performance. For guidance on contention conflicts, review transaction contention best practices and performance tuning recipes. Tens of restarts per minute may be a high value, a signal of an elevated degree of contention in the workload, which should be investigated. For the specific error, refer to the transaction retry error reference for more details.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/txn.restarts.serializable.md b/src/current/_includes/metrics-usage/txn.restarts.serializable.md
new file mode 100644
index 00000000000..3eca6449c6e
--- /dev/null
+++ b/src/current/_includes/metrics-usage/txn.restarts.serializable.md
@@ -0,0 +1 @@
+This metric is one measure of the impact of contention conflicts on workload performance. For guidance on contention conflicts, review transaction contention best practices and performance tuning recipes. Tens of restarts per minute may be a high value, a signal of an elevated degree of contention in the workload, which should be investigated. For the specific error, refer to the transaction retry error reference for more details.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/txn.restarts.txnaborted.md b/src/current/_includes/metrics-usage/txn.restarts.txnaborted.md
new file mode 100644
index 00000000000..3eca6449c6e
--- /dev/null
+++ b/src/current/_includes/metrics-usage/txn.restarts.txnaborted.md
@@ -0,0 +1 @@
+This metric is one measure of the impact of contention conflicts on workload performance. For guidance on contention conflicts, review transaction contention best practices and performance tuning recipes. Tens of restarts per minute may be a high value, a signal of an elevated degree of contention in the workload, which should be investigated. For the specific error, refer to the transaction retry error reference for more details.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/txn.restarts.txnpush.md b/src/current/_includes/metrics-usage/txn.restarts.txnpush.md
new file mode 100644
index 00000000000..3eca6449c6e
--- /dev/null
+++ b/src/current/_includes/metrics-usage/txn.restarts.txnpush.md
@@ -0,0 +1 @@
+This metric is one measure of the impact of contention conflicts on workload performance. For guidance on contention conflicts, review transaction contention best practices and performance tuning recipes. Tens of restarts per minute may be a high value, a signal of an elevated degree of contention in the workload, which should be investigated. For the specific error, refer to the transaction retry error reference for more details.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/txn.restarts.unknown.md b/src/current/_includes/metrics-usage/txn.restarts.unknown.md
new file mode 100644
index 00000000000..8faac5725ee
--- /dev/null
+++ b/src/current/_includes/metrics-usage/txn.restarts.unknown.md
@@ -0,0 +1 @@
+The errors tracked by this metric are generally due to deadlocks. Deadlocks can often be prevented with a considered transaction design. Identify the conflicting transactions involved in the deadlocks, then, if possible, redesign the business logic implementation prone to deadlocks.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/txn.restarts.writetooold.md b/src/current/_includes/metrics-usage/txn.restarts.writetooold.md
new file mode 100644
index 00000000000..3eca6449c6e
--- /dev/null
+++ b/src/current/_includes/metrics-usage/txn.restarts.writetooold.md
@@ -0,0 +1 @@
+This metric is one measure of the impact of contention conflicts on workload performance. For guidance on contention conflicts, review transaction contention best practices and performance tuning recipes. Tens of restarts per minute may be a high value, a signal of an elevated degree of contention in the workload, which should be investigated. For the specific error, refer to the transaction retry error reference for more details.
\ No newline at end of file
diff --git a/src/current/_includes/metrics-usage/txn.restarts.writetoooldmulti.md b/src/current/_includes/metrics-usage/txn.restarts.writetoooldmulti.md
new file mode 100644
index 00000000000..3eca6449c6e
--- /dev/null
+++ b/src/current/_includes/metrics-usage/txn.restarts.writetoooldmulti.md
@@ -0,0 +1 @@
+This metric is one measure of the impact of contention conflicts on workload performance. For guidance on contention conflicts, review transaction contention best practices and performance tuning recipes. Tens of restarts per minute may be a high value, a signal of an elevated degree of contention in the workload, which should be investigated. For the specific error, refer to the transaction retry error reference for more details.
\ No newline at end of file
diff --git a/src/current/_includes/v23.2/sidebar-data/cloud-deployments.json b/src/current/_includes/v23.2/sidebar-data/cloud-deployments.json
index 51125344ab8..d4ebb61f4aa 100644
--- a/src/current/_includes/v23.2/sidebar-data/cloud-deployments.json
+++ b/src/current/_includes/v23.2/sidebar-data/cloud-deployments.json
@@ -327,16 +327,63 @@
]
},
{
- "title": "Metrics Page",
- "urls": [
- "/cockroachcloud/metrics-page.html"
- ]
- },
- {
- "title": "Custom Metrics Chart Page",
- "urls": [
- "/cockroachcloud/custom-metrics-chart-page.html"
- ]
+ "title": "Metrics",
+ "items": [
+ {
+ "title": "Overview",
+ "urls": [
+ "/cockroachcloud/metrics-overview.html"
+ ]
+ },
+ {
+ "title": "Request Units",
+ "urls": [
+ "/cockroachcloud/metrics-request-units.html"
+ ]
+ },
+ {
+ "title": "SQL",
+ "urls": [
+ "/cockroachcloud/metrics-sql.html"
+ ]
+ },
+ {
+ "title": "Changefeeds",
+ "urls": [
+ "/cockroachcloud/metrics-changefeeds.html"
+ ]
+ },
+ {
+ "title": "Row-Level TTL",
+ "urls": [
+ "/cockroachcloud/metrics-row-level-ttl.html"
+ ]
+ },
+ {
+ "title": "Custom",
+ "urls": [
+ "/cockroachcloud/custom-metrics-chart-page.html"
+ ]
+ },
+ {
+ "title": "Essential Metrics for {{ site.data.products.serverless }}",
+ "urls": [
+ "/cockroachcloud/metrics-essential-serverless.html"
+ ]
+ },
+ {
+ "title": "Export Metrics from {{ site.data.products.dedicated }}",
+ "urls": [
+ "/cockroachcloud/export-metrics.html"
+ ]
+ },
+ {
+ "title": "Essential Metrics for {{ site.data.products.dedicated }}",
+ "urls": [
+ "/${VERSION}/essential-metrics-dedicated.html"
+ ]
+ }
+ ]
},
{
"title": "SQL Activity Page",
@@ -378,18 +425,6 @@
"urls": [
"/cockroachcloud/jobs-page.html"
]
- },
- {
- "title": "Export Metrics From a CockroachDB {{ site.data.products.dedicated }} Cluster",
- "urls": [
- "/cockroachcloud/export-metrics.html"
- ]
- },
- {
- "title": "Essential Metrics for CockroachDB {{ site.data.products.dedicated }} Deployments",
- "urls": [
- "/${VERSION}/essential-metrics-dedicated.html"
- ]
}
]
},
diff --git a/src/current/cockroachcloud/metrics-changefeeds.md b/src/current/cockroachcloud/metrics-changefeeds.md
new file mode 100644
index 00000000000..4e397832c6c
--- /dev/null
+++ b/src/current/cockroachcloud/metrics-changefeeds.md
@@ -0,0 +1,48 @@
+---
+title: Changefeed metrics
+summary: The Changefeed metrics let you monitor the performance of your changefeeds.
+toc: true
+---
+
+The Changefeed metrics let you monitor the performance of your [changefeeds]({% link {{site.current_cloud_version}}/change-data-capture-overview.md %}).
+
+To view these graphs, select a cluster from the [**Clusters** page]({% link cockroachcloud/cluster-management.md %}#view-clusters-page), and click **Metrics** in the **Monitoring** section of the left side navigation. On the **Metrics** page, click the **Changefeeds** tab.
+
+## Time interval selection
+
+The time interval selector at the top of each tab allows you to filter the view for a predefined or custom time interval. Use the navigation buttons to move to the previous, next, or current time interval. When you select a time interval, the same interval is selected for all charts on the page.
+
+{% assign tab = "Changefeeds" %}
+{% assign graphs = site.data.metrics | where_exp: "graphs", "graphs.metric_ui_tab contains tab" | map: "metric_ui_graph" | uniq %}
+
+{% for g in graphs %} {% comment %} Iterate through the graphs. {% endcomment %}
+
+## {{ g }}
+
+{% assign metrics = site.data.metrics | where: "metric_ui_graph", g %}
+{% comment %} Fetch all metrics for given metric_ui_tab. {% endcomment %}
+
+
+
+
+ Short Name |
+ CockroachDB Metric Name |
+ Description |
+ Usage |
+
+
+
+ {% for m in metrics %} {% comment %} Iterate through the metrics. {% endcomment %}
+ {% assign metrics-list = site.data.metrics-list | where: "metric", m.metric_id %}
+ {% comment %} Get the row from the metrics-list with the given metric_id. {% endcomment %}
+
+ {{ m.short_name }} |
+ {{ m.metric_id }} |
+ {{ metrics-list[0].description}} |
+ {% include metrics-usage/{{ m.metric_id }}.md %} |
+
+ {% endfor %} {% comment %} metrics {% endcomment %}
+
+
+
+{% endfor %} {% comment %} charts {% endcomment %}
diff --git a/src/current/cockroachcloud/metrics-essential-serverless.md b/src/current/cockroachcloud/metrics-essential-serverless.md
new file mode 100644
index 00000000000..94457d2a484
--- /dev/null
+++ b/src/current/cockroachcloud/metrics-essential-serverless.md
@@ -0,0 +1,43 @@
+---
+title: Essential Metrics for CockroachDB Serverless Deployments
+summary: Learn about the recommended essential metrics for monitoring your CockroachDB Serverless cluster.
+toc: true
+---
+
+These essential CockroachDB metrics let you monitor your CockroachDB Serverless cluster.
+
+{% assign types = site.data.metrics | map: "metric_type" | uniq %}
+{% comment %} Fetch the list of all metric types {% endcomment %}
+
+{% for t in types %} {% comment %} Iterate through the types. {% endcomment %}
+
+## {{ t }}
+
+ {% assign metrics = site.data.metrics | where: "metric_type", t | sort: "metric_id" | where_exp: "metrics", "metrics.deploy_serverless == true"%}
+ {% comment %} Fetch all metrics for that metric_type. {% endcomment %}
+
+
+
+
+ CockroachDB Metric Name |
+ Short Name |
+ Description |
+ Usage |
+
+
+
+ {% for m in metrics %} {% comment %} Iterate through the metrics. {% endcomment %}
+ {% assign metrics-list = site.data.metrics-list | where: "metric", m.metric_id %}
+ {% comment %} Get the row from the metrics-list with the given metric_id. {% endcomment %}
+ {% comment %} The metrics-list is generated using: cockroach gen metric-list --format=csv > metrics-list.csv and then changing the case of the headers to lowercase to work with liquid. {% endcomment %}
+
+ {{ m.metric_id }} |
+ {{ m.short_name }} |
+ {{ metrics-list[0].description}} |
+ {% include metrics-usage/{{ m.metric_id }}.md %} |
+
+ {% endfor %} {% comment %} metrics {% endcomment %}
+
+
+
+{% endfor %} {% comment %} types {% endcomment %}
\ No newline at end of file
diff --git a/src/current/cockroachcloud/metrics-overview.md b/src/current/cockroachcloud/metrics-overview.md
new file mode 100644
index 00000000000..5f3155200dd
--- /dev/null
+++ b/src/current/cockroachcloud/metrics-overview.md
@@ -0,0 +1,48 @@
+---
+title: Overview metrics
+summary: The Metrics Overview graphs let you monitor SQL performance, Request Units, and storage.
+toc: true
+---
+
+The Overview metrics let you monitor SQL performance, Request Units, and storage.
+
+To view these graphs, select a cluster from the [**Clusters** page]({% link cockroachcloud/cluster-management.md %}#view-clusters-page), and click **Metrics** in the **Monitoring** section of the left side navigation.
+
+## Time interval selection
+
+The time interval selector at the top of each tab allows you to filter the view for a predefined or custom time interval. Use the navigation buttons to move to the previous, next, or current time interval. When you select a time interval, the same interval is selected for all charts on the page.
+
+{% assign tab = "Overview" %}
+{% assign graphs = site.data.metrics | where_exp: "graphs", "graphs.metric_ui_tab contains tab" | map: "metric_ui_graph" | uniq %}
+
+{% for g in graphs %} {% comment %} Iterate through the graphs. {% endcomment %}
+
+## {{ g }}
+
+{% assign metrics = site.data.metrics | where: "metric_ui_graph", g %}
+{% comment %} Fetch all metrics for given metric_ui_tab. {% endcomment %}
+
+
+
+
+ Short Name |
+ CockroachDB Metric Name |
+ Description |
+ Usage |
+
+
+
+ {% for m in metrics %} {% comment %} Iterate through the metrics. {% endcomment %}
+ {% assign metrics-list = site.data.metrics-list | where: "metric", m.metric_id %}
+ {% comment %} Get the row from the metrics-list with the given metric_id. {% endcomment %}
+
+ {{ m.short_name }} |
+ {{ m.metric_id }} |
+ {{ metrics-list[0].description}} |
+ {% include metrics-usage/{{ m.metric_id }}.md %} |
+
+ {% endfor %} {% comment %} metrics {% endcomment %}
+
+
+
+{% endfor %} {% comment %} charts {% endcomment %}
diff --git a/src/current/cockroachcloud/metrics-request-units.md b/src/current/cockroachcloud/metrics-request-units.md
new file mode 100644
index 00000000000..19582e146b1
--- /dev/null
+++ b/src/current/cockroachcloud/metrics-request-units.md
@@ -0,0 +1,48 @@
+---
+title: Request Unit metrics
+summary: The Request Unit metrics let you monitor resource consumption.
+toc: true
+---
+
+The Request Unit metrics let you monitor [resource consumption]({% link cockroachcloud/serverless-resource-usage.md %}).
+
+To view these graphs, select a cluster from the [**Clusters** page]({% link cockroachcloud/cluster-management.md %}#view-clusters-page), and click **Metrics** in the **Monitoring** section of the left side navigation. On the **Metrics** page, click the **Request Units** tab.
+
+## Time interval selection
+
+The time interval selector at the top of each tab allows you to filter the view for a predefined or custom time interval. Use the navigation buttons to move to the previous, next, or current time interval. When you select a time interval, the same interval is selected for all charts on the page.
+
+{% assign tab = "Request Units" %}
+{% assign graphs = site.data.metrics | where_exp: "graphs", "graphs.metric_ui_tab contains tab" | map: "metric_ui_graph" | uniq %}
+
+{% for g in graphs %} {% comment %} Iterate through the graphs. {% endcomment %}
+
+## {{ g }}
+
+{% assign metrics = site.data.metrics | where: "metric_ui_graph", g %}
+{% comment %} Fetch all metrics for given metric_ui_tab. {% endcomment %}
+
+
+
+
+ Short Name |
+ CockroachDB Metric Name |
+ Description |
+ Usage |
+
+
+
+ {% for m in metrics %} {% comment %} Iterate through the metrics. {% endcomment %}
+ {% assign metrics-list = site.data.metrics-list | where: "metric", m.metric_id %}
+ {% comment %} Get the row from the metrics-list with the given metric_id. {% endcomment %}
+
+ {{ m.short_name }} |
+ {{ m.metric_id }} |
+ {{ metrics-list[0].description}} |
+ {% include metrics-usage/{{ m.metric_id }}.md %} |
+
+ {% endfor %} {% comment %} metrics {% endcomment %}
+
+
+
+{% endfor %} {% comment %} charts {% endcomment %}
diff --git a/src/current/cockroachcloud/metrics-row-level-ttl.md b/src/current/cockroachcloud/metrics-row-level-ttl.md
new file mode 100644
index 00000000000..f0460d7daf5
--- /dev/null
+++ b/src/current/cockroachcloud/metrics-row-level-ttl.md
@@ -0,0 +1,48 @@
+---
+title: Row-Level TTL metrics
+summary: The Row-Level TTL metrics let you monitor the performance of your Row-Level TTL jobs.
+toc: true
+---
+
+The Row-Level TTL metrics let you monitor the performance of your [Row-Level TTL jobs]({% link {{site.current_cloud_version}}/row-level-ttl.md %}).
+
+To view these graphs, select a cluster from the [**Clusters** page]({% link cockroachcloud/cluster-management.md %}#view-clusters-page), and click **Metrics** in the **Monitoring** section of the left side navigation. On the **Metrics** page, click the **Row-Level TTL** tab.
+
+## Time interval selection
+
+The time interval selector at the top of each tab allows you to filter the view for a predefined or custom time interval. Use the navigation buttons to move to the previous, next, or current time interval. When you select a time interval, the same interval is selected for all charts on the page.
+
+{% assign tab = "Row-Level TTL" %}
+{% assign graphs = site.data.metrics | where_exp: "graphs", "graphs.metric_ui_tab contains tab" | map: "metric_ui_graph" | uniq %}
+
+{% for g in graphs %} {% comment %} Iterate through the graphs. {% endcomment %}
+
+## {{ g }}
+
+{% assign metrics = site.data.metrics | where: "metric_ui_graph", g %}
+{% comment %} Fetch all metrics for given metric_ui_tab. {% endcomment %}
+
+
+
+
+ Short Name |
+ CockroachDB Metric Name |
+ Description |
+ Usage |
+
+
+
+ {% for m in metrics %} {% comment %} Iterate through the metrics. {% endcomment %}
+ {% assign metrics-list = site.data.metrics-list | where: "metric", m.metric_id %}
+ {% comment %} Get the row from the metrics-list with the given metric_id. {% endcomment %}
+
+ {{ m.short_name }} |
+ {{ m.metric_id }} |
+ {{ metrics-list[0].description}} |
+ {% include metrics-usage/{{ m.metric_id }}.md %} |
+
+ {% endfor %} {% comment %} metrics {% endcomment %}
+
+
+
+{% endfor %} {% comment %} charts {% endcomment %}
diff --git a/src/current/cockroachcloud/metrics-sql.md b/src/current/cockroachcloud/metrics-sql.md
new file mode 100644
index 00000000000..a08f4925f32
--- /dev/null
+++ b/src/current/cockroachcloud/metrics-sql.md
@@ -0,0 +1,48 @@
+---
+title: SQL metrics
+summary: The SQL metrics let you monitor SQL performance.
+toc: true
+---
+
+The SQL metrics let you monitor SQL performance.
+
+To view these graphs, select a cluster from the [**Clusters** page]({% link cockroachcloud/cluster-management.md %}#view-clusters-page), and click **Metrics** in the **Monitoring** section of the left side navigation. On the **Metrics** page, click the **SQL** tab.
+
+## Time interval selection
+
+The time interval selector at the top of each tab allows you to filter the view for a predefined or custom time interval. Use the navigation buttons to move to the previous, next, or current time interval. When you select a time interval, the same interval is selected for all charts on the page.
+
+{% assign tab = "SQL" %}
+{% assign graphs = site.data.metrics | where_exp: "graphs", "graphs.metric_ui_tab contains tab" | map: "metric_ui_graph" | uniq %}
+
+{% for g in graphs %} {% comment %} Iterate through the graphs. {% endcomment %}
+
+## {{ g }}
+
+{% assign metrics = site.data.metrics | where: "metric_ui_graph", g %}
+{% comment %} Fetch all metrics for given metric_ui_tab. {% endcomment %}
+
+
+
+
+ Short Name |
+ CockroachDB Metric Name |
+ Description |
+ Usage |
+
+
+
+ {% for m in metrics %} {% comment %} Iterate through the metrics. {% endcomment %}
+ {% assign metrics-list = site.data.metrics-list | where: "metric", m.metric_id %}
+ {% comment %} Get the row from the metrics-list with the given metric_id. {% endcomment %}
+
+ {{ m.short_name }} |
+ {{ m.metric_id }} |
+ {{ metrics-list[0].description}} |
+ {% include metrics-usage/{{ m.metric_id }}.md %} |
+
+ {% endfor %} {% comment %} metrics {% endcomment %}
+
+
+
+{% endfor %} {% comment %} charts {% endcomment %}