Skip to main content
orphan · aws

CloudWatch dashboards nobody has opened in 45 days

resource types
1
rule IDs covered
1
severity
low

What does ZopNight detect here?

ZopNight reviews a CloudWatch dashboard when its last captured GetDashboard view is at least 45 days old and the dashboard carries a real charge. Dashboards are free up to 3 per account, roughly $3 a month after that. Never-viewed dashboards abstain, because absent view data cannot justify a guided delete.

Signal and threshold

How ZopNight evaluates CloudWatch dashboards nobody has opened in 45 days.
Field Value
Rule IDsRC-094
Categoryorphan
Severitylow
Metricnone — pure configuration read
Sourcecloudwatch_dashboard.go

The fourth dashboard is where billing starts

CloudWatch gives every account 3 dashboards free. From the fourth onward each one carries a standing per-dashboard charge, around $3 a month, that accrues whether anyone opens it or not. Old project dashboards and experiment leftovers are the usual suspects. Because the free tier covers the common case, a dashboard with zero billed cost is deliberately never flagged: the delete lever recovers a real dollar or the rule stays quiet.

How a dashboard view becomes a signal

There is no “last viewed” field on a dashboard. The rule derives it: the aggregator captures GetDashboard read events per dashboard and keeps the most recent one, and staleness is the age of that latest view. No captured view at all means the rule abstains, fail-closed, because “no views” is indistinguishable from “no data, no permission, or created after the window”, and a guided delete must never rest on an unprovable “unused”.

A 45-day staleness bar inside a 90-day memory

The threshold is 45 days without a view. The activity feed the rule reads retains roughly 90 days of events, so in practice a finding fires when the latest recorded view falls in the 45-to-90-day band. A dashboard abandoned longer than the retention window has no view event left to date it with, and by the fail-closed gate above it abstains too. That known gap on very-long-abandoned dashboards is documented upstream and waits on a longer-retention event source; the rule does not paper over it by guessing.

Finding stale dashboards yourself

Terminal window
aws cloudwatch list-dashboards \
--query 'DashboardEntries[].[DashboardName,LastModified,Size]' --output table

LastModified tracks edits, not views. For actual reads, query CloudTrail for recent GetDashboard events and see which dashboard names never appear.

Consolidation beats deletion below the free tier

When a finding does fire, deleting the dashboard recovers its full charge. But if you are hovering just above 3 dashboards, merging two related boards into one drops you back into the free tier and achieves the same saving without losing any widgets. Confirm with the owner before removing anything a runbook might still reference.

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·