Skip to main content
rightsizing · aws

CloudWatch metric streams whose per-namespace cost split cannot be measured (a permanent abstain)

resource types
1
rule IDs covered
1
severity
low

What does ZopNight detect here?

Metric streams bill $0.003 per 1,000 metric updates, and the only real lever is excluding namespaces you do not need downstream. AWS publishes no per-namespace update breakdown, so the droppable fraction is unmeasurable. ZopNight keeps this rule as a permanent abstain rather than invent one.

Signal and threshold

How ZopNight evaluates CloudWatch metric streams whose per-namespace cost split cannot be measured (a permanent abstain).
Field Value
Rule IDsRC-177
Categoryrightsizing
Severitylow
Metricnone — pure configuration read
Sourcecloudwatch_metric_stream.go

The lever is real; the measurement is not

A CloudWatch metric stream forwards every metric update in its configured namespaces to a Firehose destination at $0.003 per 1,000 updates. Streams configured with broad includes, or with no filter at all, routinely forward namespaces the downstream consumer never reads, and tightening the filter genuinely cuts the bill. The saving would be the stream’s monthly cost multiplied by the fraction of updates in excludable namespaces. Half of that formula is obtainable; the other half does not exist.

Where the arithmetic dies

The total update volume per stream is cheap to get: the MetricStreams namespace publishes a MetricUpdate counter dimensioned by stream name. But the numerator, updates attributable to excludable namespaces, is unavailable three ways. The stream’s configuration lists which namespaces flow, with no volume per namespace. The MetricUpdate metric carries only the stream-name dimension, so AWS never breaks a stream’s volume down by namespace. And “excludable” is a judgment about what the downstream consumer needs, which no API exposes. Splitting the total evenly, or assuming all non-core namespaces are droppable, would be a fabricated fraction wearing measurement’s clothes, so the rule declines to emit, on every stream, permanently under the current producers.

What the abstain protects

A cost recommendation is a claim that a specific dollar amount is recoverable by a specific action. Shipping this one with an invented split would put confident-looking numbers in front of people who cannot check them. The catalogue keeps the entry so the reasoning is inspectable, and so any future producer that does surface per-namespace volume has a defined formula waiting.

Do the review manually; it is genuinely worth doing

Terminal window
aws cloudwatch get-metric-statistics \
--namespace AWS/CloudWatch/MetricStreams --metric-name MetricUpdate \
--dimensions Name=MetricStreamName,Value=my-stream \
--start-time "$(date -u -v-30d +%Y-%m-%dT%H:%M:%SZ)" \
--end-time "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
--period 86400 --statistics Sum

Multiply the monthly sum by $0.003 per thousand for the stream’s real cost, then compare aws cloudwatch get-metric-stream --name my-stream against what your observability vendor actually ingests. Humans can make the excludability judgment the API cannot: trim the include list to namespaces the dashboard queries, and the same arithmetic the rule refuses to fake becomes your measured saving.

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·