# GCP Vertex AI Feature Store Idle

> Vertex AI Feature Stores are considered idle when online-serving CPU load sits below 1% over 30 days and any present request series carries zero traffic. Detection works today, but savings abstain fleet-wide: the provisioned node count has no per-node serving rate yet, so cost resolves to $0.

Source: https://zop.dev/integrations/gcp/recommendations/gcp-vertex-ai-feature-store-idle
Updated: 2026-08-19

---

## Near-zero CPU load anchors the idle call

- MetricsAware: VertexFeaturestoreCPULoad (the idle anchor, required present) and VertexFeaturestoreRequestCount (optional veto) over 30 days
the idle anchor is the continuous VertexFeaturestoreCPULoad gauge (present even at 0 QPS, harvested by the aggregator), required present via idleMetricGuard; the store is idle when its CPU load sits near-zero (\< vertexFeaturestoreActiveCPUPercent, 1.0%). VertexFeaturestoreRequestCount is a delta counter that emits no series while the store is idle, so its absence is idle-consistent evidence rather than an abstain. The earlier revision required it present-and-zero, which a delta counter can never be, making the rule structurally dead. A request series that is present and carries real traffic vetoes the rec (low-but-real QPS on fixed nodes can show sub-1% CPU while still in active use, a rightsize case rather than a delete case). Mirrors the RC-192 Neptune pattern (continuous CPU gauge anchors the window; absent activity counter confirms idle). When present-and-zero, the request series is stamped as supporting zero-traffic evidence alongside the primary CPU-load evidence.

## Why the missing node rate blocks a dollar figure

concrete-or-abstain. PRODUCER-GAP: the recoverable dollars are the fixed online-serving node-hours; the provisioned node count is discovered (fixedNodeCount) but is not yet multiplied by a per-node Vertex serving rate in pricing/gcp (Vertex serving is calcFree, so pricing[uid] is $0 on the calculated path). The concrete-or-abstain cost gate in idleMetricGuard therefore keeps this rule abstaining fleet-wide until that rate producer lands. Detection is now correct, but the dollar figure stays honest (never fabricated on a $0 cost).

## Scaling serving nodes to zero

1. Confirm no application reads online features from this store
2. Scale online-serving node count to zero, or delete the Feature Store if unused

## CPU load and request count over 30 days

VertexFeaturestoreCPULoad, VertexFeaturestoreRequestCount (30 day lookback each)
