CloudWatch metric streams whose per-namespace cost split cannot be measured (a permanent abstain)
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
| Field | Value |
|---|---|
| Rule IDs | RC-177 |
| Category | rightsizing |
| Severity | low |
| Metric | none — pure configuration read |
| Source | cloudwatch_metric_stream.go |
Where it applies
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
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 SumMultiply 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.