# CloudWatch Managed Prometheus Collectors — Destination Decision Matrix

Use this after the July 31, 2026 CloudWatch managed collectors announcement.
Confirm live rates on [CloudWatch pricing](https://aws.amazon.com/cloudwatch/pricing/) and [AMP pricing](https://aws.amazon.com/prometheus/pricing/).

## When to prefer which destination

| Situation | Prefer destination | Why | When NOT to |
| --- | --- | --- | --- |
| Team already lives in CloudWatch dashboards + PromQL Query Studio | **CloudWatch dataset** via managed collector | Unified alarms/dashboards with AWS vended metrics; OTLP $0.50/GB includes 15 months storage | You need Grafana-first multi-source dashboards |
| PromQL-native SRE team with existing Grafana + recording rules | **AMP workspace** via same CreateScraper surface | Per-sample AMP pricing + recording rules; AMG integration | Low cardinality / small fleet where CloudWatch OTLP GB math is cheaper |
| Self-managed ADOT/OTel collector fleet only scraping Prometheus → CloudWatch | **Managed collector → CloudWatch** | Removes patch/scale/HA of the scrape fleet | You still need ADOT for traces/logs/custom processors |
| EKS + Container Insights already on OTel path ($0.08/GB CI-OTel) | Keep **Container Insights OTel** for K8s infra | Cheaper GB rate for that product path | You need custom app `/metrics` outside CI receivers |
| ECS tasks with changing IPs | Managed collector + **Cloud Map DNS discovery** | Ephemeral task IPs break static scrape targets | Tasks do not register in Cloud Map |
| High-cardinality labels (`user_id`, raw URL, pod UID) | Fix labels **before** either destination | Destination choice does not fix cardinality | Shipping scrape-everything YAML into a new backend |

## Opinionated default (FactualMinds)

1. **CloudWatch-first platforms** → managed collector → CloudWatch dataset.
2. **Grafana/AMP platforms** → keep AMP destination; do not dual-write the same series to CloudWatch OTLP "for completeness."
3. Keep ADOT only when you need a **shared traces + logs + metrics** pipeline or custom processors managed collectors do not support.

## Pre-flight checklist

- [ ] Exporters expose `/metrics` and respond over private VPC path
- [ ] ≥2 subnets in different AZs for the scraper ENIs
- [ ] Security groups allow collector → exporter ports
- [ ] Private subnets have CloudWatch interface VPC endpoint (if no NAT)
- [ ] Scrape config uses `metric_relabel_configs` to drop high-cardinality labels
- [ ] gzip (or equivalent) compression enabled on `/metrics` responses where supported
- [ ] Single destination chosen — no dual-ingest of the same job
