GCP Vertex AI Feature Store Idle
What does ZopNight detect here?
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.
Signal and threshold
| Field | Value |
|---|---|
| Rule IDs | RC-1216 |
| Category | idle |
| Severity | medium |
| Metric | none — pure configuration read |
| Source | vertex_idle.go |
Where it applies
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
- Confirm no application reads online features from this store
- 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)