Skip to main content
idle · gcp

GCP Bigtable Instance Idle

resource types
1
rule IDs covered
1
severity
medium

What does ZopNight detect here?

Bigtable instances whose request count averages and peaks at zero across a window with at least 30 days of coverage are flagged as idle, provided cluster CPU load stays under the 2% internal-work veto. Savings equal the instance's full monthly cost; an absent request-count series abstains.

Signal and threshold

How ZopNight evaluates GCP Bigtable Instance Idle.
Field Value
Rule IDsRC-1244
Categoryidle
Severitymedium
Metricnone — pure configuration read
Sourcebigtable_idle.go

Request count, with CPU load as a veto

  • MetricsAware (SetMultiMetrics): BigtableRequestCount read by name off the nested UID→metricName view; BigtableCPULoad read the same way as a corroborating “still doing internal work” veto (cpuActive, threshold 2.0%). No tag/Metadata fallback; the previous operations tag was a producerless field the discoverer never wrote and has been removed, and the rule abstains when BigtableRequestCount is absent.
  • Producer fix: the Cloud Monitoring filter previously keyed BigtableRequestCount/BigtableCPULoad on the table/cluster resource labels against the Bigtable instance ID, but those labels are a table name and a cluster ID respectively and never equal the instance ID, so the filter matched no series and both metrics were permanently unproduced (rule always abstained fleet-wide). Fixed to key on the instance resource label (present on both bigtable_table and bigtable_cluster, equal to the instance ID). Because one instance can have multiple tables/clusters sharing that label, the mappings also now set aggregation.crossSeriesReducer (REDUCE_SUM for request count across tables, REDUCE_MAX for cpu_load across clusters) with groupByFields=resource.label.”instance”, so a multi-table or replicated (multi-cluster) instance resolves to one instance-wide series instead of an arbitrary single one.

Why zero requests refunds the whole instance

Concrete or abstain (cost-driven idle). Skips when the priced run-rate cost is unknown/zero (resource.pricing). Fires only when BigtableRequestCount averages/peaks at zero over a ≥30d-covered window and BigtableCPULoad does not corroborate active internal work (compaction/replication/GC) at or above 2.0%: CurrentCostUSD = SavingsUSD = cost, OptimizedCostUSD = 0. The rule abstains (returns nil) when pricing is unknown, BigtableRequestCount is absent, any request activity is observed, the CPU-corroboration veto fires, or coverage is below the 30d floor; never a fixed or fabricated estimate.

Exporting data before you delete

  1. Verify no applications depend on this Bigtable instance
  2. Export data if needed using cbt export (CLI) or the Dataflow Cloud Bigtable to Avro Files on Cloud Storage template
  3. Delete the instance to stop charges
  4. Consider Bigtable autoscaling for variable workloads

One instance-wide series across tables and clusters

BigtableRequestCount (primary, server/request_count, SUM-reduced across tables) + BigtableCPULoad (corroborating veto, cluster/cpu_load, MAX-reduced across clusters), both 30d (aggregator: backend/aggregator/internal/metrics/gcp/monitoring.go)

See it fire on your bill.

Connect an account read-only. The first findings land in minutes.

417 rule families across 353 resource types on 22 platforms. Every threshold, metric, and IAM action is documented on these pages before you grant anything.

417 rule families documented
353 resource types covered
read-only default access level
Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console· Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console·