What this audit checks
Authentication & access
- IAM principal signs CloudWatch GetMetricData and redshift-data calls (SigV4) without AccessDenied
- redshift-data:ExecuteStatement / DescribeStatement / GetStatementResult permitted against the cluster / workgroup
- Database user (GetClusterCredentials / Serverless GetCredentials) has SELECT on SYS_/STV_/SVV_/STL_ monitoring views
- cloudwatch:GetMetricData scoped to the AWS/Redshift namespace returns datapoints, not empty / throttled
Disk & Capacity
- PercentageDiskSpaceUsed >90% (writes, vacuums and sorts fail when the cluster fills - the #1 Redshift outage cause)
- Connection saturation >90% - DatabaseConnections / max_connections (default 500; app login timeouts imminent)
- CPUUtilization sustained >90% across compute nodes (workload outgrowing node count / size)
- Largest table approaching node disk allocation (single table dominating SVV_TABLE_INFO.size)
WLM & Query Performance
- WLM queue length >5 sustained 5m (WLMQueueLength - queue under-provisioned; resize or enable concurrency scaling)
- Query latency p95 >5s sustained (SYS_QUERY_HISTORY.elapsed_time percentiles)
- Slow-query rate >5% of executions over the 5s threshold (SYS_QUERY_HISTORY)
- Queries spilling to disk >10 in 24h (SVL_QUERY_SUMMARY is_diskbased - undersized memory / bad joins)
- Queries blocked on locks >0 sustained (STV_LOCKS / SVV_TRANSACTIONS blocking chains)
Table Maintenance & Health
- Tables with >10% unsorted rows (SVV_TABLE_INFO.unsorted - VACUUM candidates; full scans + wasted disk)
- Tables with stale statistics >10% stats_off (SVV_TABLE_INFO.stats_off - bad planner join orders)
- Table distribution skew >4.0 (SVV_TABLE_INFO.skew_rows - one slice doing all the work; bad DISTKEY)
- Query error rate >1% in 5m (SYS_QUERY_HISTORY.status = ‘failed’ - aborts, resource exhaustion, permission errors)
Backup & Replication
- Last automated/manual snapshot older than 72h (DescribeClusterSnapshots - recovery window shrinking)
- Cross-region snapshot copy lag >10s (disaster-recovery replica freshness)
- Automated snapshot schedule disabled or retention
<1day (RPO violation)
Cross-channel: database vs ecommerce reconciliation
- Query / RPU spike with no matching ecom order spike (= dashboard storm / runaway job / scraper, sibling = bigcommerce.order / shopify.order)
- Slow analytics query co-occurs with an ecom checkout drop in the same 5-min window (sibling = bigcommerce.checkout / shopify.checkout)
- Connection saturation >90% during an ecom traffic burst (app gets connection / login timeouts)
- Product / orders table row count drifts vs ecom catalog count (ETL sync failure, sibling = bigcommerce.product / shopify.product)
Data sources
POST cloudwatch:GetMetricData- CPUUtilization, PercentageDiskSpaceUsed, DatabaseConnections, QueriesCompletedPerSecond, WLMQueueLength, ReadLatency, HealthStatusPOST redshift-data:ExecuteStatement- Submit read-only SQL against SYS_/STV_/SVV_/STL_ monitoring views (query history, WLM state, table info, locks)POST redshift-data:DescribeStatement- Poll async statement statusPOST redshift-data:GetStatementResult- Fetch system-view result rows once the statement FINISHEDPOST redshift:DescribeClusters- Cluster version, node type, node count, statusPOST redshift:DescribeClusterSnapshots- Snapshot recency for backup-age and cross-region copy lag