The Truth About CloudWatch Pricing
Tags: cloud, kubernetes, devops, aws
Published: 2023-03-10 11:43:03

<!-- wp:paragraph -->
<p>Amazon CloudWatch pricing can get tricky. CloudWatch's pricing is based on three parts, just like any other observability tool: a data ingest pipeline, a place to store data, and a management console.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>When using it, you’ll face costs related to ingesting data into the data store, retaining data there, and using the visualization and management tools that help you derive insights from data.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>But how exactly does CloudWatch pricing work? And how can you keep tabs on it so the charges don’t spiral out of control?&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Keep reading to find out—<a href="#h-4-best-practices-for-cloudwatch-costs">or jump directly to CloudWatch pricing best practices</a><strong>.</strong></p>
<!-- /wp:paragraph -->

<!-- wp:heading {"anchor":"h-what-is-amazon-cloudwatch"} -->
<h2 class="wp-block-heading" id="h-what-is-amazon-cloudwatch">What is Amazon CloudWatch?</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Amazon CloudWatch is a built-in AWS tool that keeps an eye on all of your AWS resources and applications.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Head over to the CloudWatch home page, and you’ll see metrics for every single AWS service you’re using. You can also build custom dashboards to display stats about your custom apps and metric groups.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>CloudWatch lets you set up alarms that notify you when a threshold is exceeded - or even adjust the monitored resources automatically (EC2 Auto Scaling and Amazon Simple Notification Service actions)</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For example, you can use CloudWatch to monitor different aspects of your <a href="https://cast.ai/blog/400-ec2-instance-types-the-good-the-bad-and-the-ugly/" target="_blank" rel="noreferrer noopener">EC2 instances</a> such as CPU utilization and disk reads and writes. Once you gather enough data, you can decide whether to deploy more instances to handle the increasing load or stop underutilized instances to save money.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3,"anchor":"h-how-do-you-access-amazon-cloudwatch"} -->
<h3 class="wp-block-heading" id="h-how-do-you-access-amazon-cloudwatch">How do you access Amazon CloudWatch?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Head over to your AWS account and use one of the following methods to access CloudWatch:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><!-- wp:list-item -->
<li><a href="https://console.aws.amazon.com/cloudwatch/" target="_blank" rel="noreferrer noopener">Amazon CloudWatch console</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html" target="_blank" rel="noreferrer noopener">AWS Command Line Interface</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><a href="http://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/Welcome.html" target="_blank" rel="noreferrer noopener">CloudWatch API</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><a href="http://aws.amazon.com/tools" target="_blank" rel="noreferrer noopener">AWS SDKs</a></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading {"level":3,"anchor":"h-how-does-cloudwatch-work"} -->
<h3 class="wp-block-heading" id="h-how-does-cloudwatch-work">How does CloudWatch work?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Amazon CloudWatch works like a metrics repository where services like EC2 can add their metrics, allowing you to retrieve statistics based on those metrics at any time. This graph helps to understand this:</p>
<!-- /wp:paragraph -->

<!-- wp:image -->
<figure class="wp-block-image"><img src="https://lh4.googleusercontent.com/T7wIBqXfDutIYeQUww_JDxX5IXUxqq9vTulvUa5hMIIr-CRUzXMhaB7Q_IdBn1o5qQIjhPnQ20x9rYxIZh2rxlRraw89Zwzi-8V_YMfHFazdFO8kFmj-ZWlDrTJqXgRYpIP4CZWSMW-1qwJbpJCAlRo" alt=""/></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Source: <a href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_architecture.html" target="_blank" rel="noreferrer noopener">AWS documentation</a></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>CloudWatch stores metrics separately per region, but thanks to the cross-region feature, it lets you aggregate statistics from different regions.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Now that we've gotten the fundamentals out of the way, let’s focus on pricing.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"anchor":"h-cloudwatch-pricing-tiers"} -->
<h2 class="wp-block-heading" id="h-cloudwatch-pricing-tiers">CloudWatch pricing tiers</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>In general, CloudWatch charges for its Metrics service based on the number of metrics submitted to it and the frequency with which the API is called to transmit or fetch a metric.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:quote {"className":"is-style-plain"} -->
<blockquote class="wp-block-quote is-style-plain"><!-- wp:paragraph -->
<p>The higher your cost, the more metrics you provide to CloudWatch, and the more frequently you access the API.&nbsp;</p>
<!-- /wp:paragraph --></blockquote>
<!-- /wp:quote -->

<!-- wp:paragraph -->
<p>This is vital to remember since the more metrics you track, the easier it is to analyze particular problems in your system. And the faster you submit data, the more detailed and exact you can be when troubleshooting service issues.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>CloudWatch is mostly priced based on how accurate the data it collects and stores is. The more accurate the data, the more Cloudwatch costs.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3,"anchor":"h-free"} -->
<h3 class="wp-block-heading" id="h-free">Free</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The CloudWatch free tier is applied to your service automatically before you receive any charges based on the tool’s paid tier. It comes with small allowances for every CloudWatch service, such as Metrics, Logs, and Dashboards.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>AWS offers three types of free tier:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>Always free - this option doesn’t have an expiry data and is available to all users.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>12 months free - available for 12 months from the sign up.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Trial - trials are short-term offers counted from the moment of activating the service.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>The Amazon CloudWatch free tier gives you access to:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>Basic monitoring metrics</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>10 detailed monitor metrics</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>1 million API requests</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>10 alarm metrics</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>5 GB of log data ingestion and archive</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>3 dashboards with up to 50 metrics per month</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:quote {"className":"is-style-plain"} -->
<blockquote class="wp-block-quote is-style-plain"><!-- wp:paragraph -->
<p>The free plan gives you a great opportunity to try out CloudWatch and check if the paid plan is a worthwhile investment.</p>
<!-- /wp:paragraph --></blockquote>
<!-- /wp:quote -->

<!-- wp:paragraph -->
<p>Still, don’t forget that basic monitoring metrics are, well, pretty basic. We’re talking about a few core metrics per service to make sure that you can monitor a service for availability and high-level performance. Most AWS services like EC2, EBS, RDS, or S3 offer basic monitoring none of the tracked metrics here will be billed to your account.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3,"anchor":"h-paid"} -->
<h3 class="wp-block-heading" id="h-paid">Paid</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The CloudWatch paid tier charges differ by region and are subject to change. To check the pricing for your region, go to the <a href="https://aws.amazon.com/cloudwatch/pricing/" target="_blank" rel="noreferrer noopener">CloudWatch pricing page</a> or use the <a href="https://calculator.aws/#/createCalculator/CloudWatch" target="_blank" rel="noreferrer noopener">AWS pricing calculator</a> to check the costs for your unique use case.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>In general, CloudWatch pricing will be calculated based on the features you use, like:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>Metrics</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Alarms</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Dashboards</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Events</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Logs</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Contributor insights</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Note that every feature is priced differently - and some are way pricier than others.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Consider this example:</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pricing for the US (East) Ohio region is as follows:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>First 10,000 metrics – $0.30</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Next 240,000 metrics – $0.10</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Next 750,000 metrics – $0.05</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Over 1,000,000 metrics – $0.02</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>API – $0.01 per 1000 metrics requested</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Dashboards – $3.00 per dashboard</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Alarm – $0.10 per alarm metric at a standard resolution of 60 seconds</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Logs – $0.50 per GB of data collected; $0.03 per GB for data stored</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading {"anchor":"h-4-best-practices-for-cloudwatch-costs"} -->
<h2 class="wp-block-heading" id="h-4-best-practices-for-cloudwatch-costs">4 best practices for CloudWatch costs&nbsp;</h2>
<!-- /wp:heading -->

<!-- wp:heading {"anchor":"h-1-monitor-ec2-like-a-pro"} -->
<h2 class="wp-block-heading" id="h-1-monitor-ec2-like-a-pro">1. Monitor EC2 like a pro</h2>
<!-- /wp:heading -->

<!-- wp:list -->
<ul><!-- wp:list-item -->
<li><strong>Remember about memory</strong> - The basic monitoring metrics for EC2 instance are CPU load, disk I/O, and network I/O metrics. What about memory? Well, you need to set up a custom metric to track this!&nbsp;</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:list -->
<ul><!-- wp:list-item -->
<li><strong>Choose detailed monitoring when needed </strong>- By default, Amazon EC2 sends data to CloudWatch in 5-mi intervals. If this level of monitoring isn’t enough for you, go for detailed monitoring, which delivers metrics in 1-min intervals to help you act faster. Note: from a price standpoint, detailed monitoring charges all of the basic monitoring measures as specialized metrics.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>For instance, let's say you run 12 EC2 instances and set them up for detailed monitoring. You’ll have to pay $22.2 for your CloudWatch Metric each month. The common EC2 instance types have 7 built-in metrics tracked for them by default. So:</p>
<!-- /wp:paragraph -->

<!-- wp:quote {"className":"is-style-plain"} -->
<blockquote class="wp-block-quote is-style-plain"><!-- wp:paragraph -->
<p>7 metrics per instance * 12 instances = 84 metrics in total&nbsp;</p>
<!-- /wp:paragraph --></blockquote>
<!-- /wp:quote -->

<!-- wp:paragraph -->
<p>Sure, you get 10 metrics for free as part of the CloudWatch free tier, so AWS will charge you for 74 metrics. And for the first 10k metrics, the charge per metric is $0.30/month: 74 metrics * $0.30 = $22.2 per month.</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><!-- wp:list-item -->
<li><strong>Don’t get fooled by custom metrics </strong>- they’re tracked differently from built-in metrics as you pay for the amount of custom metrics tracked as well as the number of API calls made.&nbsp;</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>So, if you want to monitor memory use at a resolution faster than 1 minute, your API calls will grow too. For example, if you want to track memory use at a 15-second resolution, you'll have to pay four times the amount in API expenses because the API request will be performed four times every minute.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"anchor":"h-2-consider-dimensions"} -->
<h2 class="wp-block-heading" id="h-2-consider-dimensions">2. Consider dimensions</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Every metric has unique qualities that define it, and dimensions work like categories for those traits. A metric might be CPU usage, while a dimension could be CPU core.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>On multi-core devices, this might result in CloudWatch tracking a large number of CPU metrics. Dimensions are part of a metric's unique identifier; adding a unique name/value combination to one of your metrics creates a new variant of that metric.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:quote {"className":"is-style-plain"} -->
<blockquote class="wp-block-quote is-style-plain"><!-- wp:paragraph -->
<p>Even though the metrics have the same name, CloudWatch interprets each unique combination of attributes as a different measure.&nbsp;</p>
<!-- /wp:paragraph --></blockquote>
<!-- /wp:quote -->

<!-- wp:paragraph -->
<p>When deciding whether to track certain dimensions of a metric, it’s critical to consider the dimension's cardinality. High-cardinality metrics, like an IP address or a unique identifier, can cause the number of CloudWatch metrics collected to grow, which can cause your AWS costs to go up by a large amount.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"anchor":"h-3-remove-custom-metrics-you-don-t-need"} -->
<h2 class="wp-block-heading" id="h-3-remove-custom-metrics-you-don-t-need">3. Remove custom metrics you don’t need</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Metrics strike a balance between data precision and cost. The more data you gather, the more information you’ll have that will come in handy when you need to understand what went wrong when a service fails.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Internal services and less essential external services can withstand some amount of service disruption. Prioritizing the importance and impact of a service correctly will help you to choose which services need additional monitoring expenditures.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:quote -->
<blockquote class="wp-block-quote"><!-- wp:paragraph -->
<p>Mission-critical services should record the most metrics with the highest resolution, while less important services can record the fewest metrics and have the lowest resolution to keep costs down.</p>
<!-- /wp:paragraph --></blockquote>
<!-- /wp:quote -->

<!-- wp:paragraph -->
<p>Don’t forget that Custom Metrics and EC2 Detailed Monitoring are premium monitoring options. Excessive or too comprehensive monitoring won’t improve your system's performance but drives costs.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Before monitoring a metric, consider whether it will help diagnose a specific issue. If a metric is already being recorded, check to see if it has been useful in the past and should be watched again. Can Basic Monitoring be sufficient if a service is not a high priority?</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"anchor":"h-4-lower-the-resolution-of-metrics-when-you-don-t-need-high-resolution"} -->
<h2 class="wp-block-heading" id="h-4-lower-the-resolution-of-metrics-when-you-don-t-need-high-resolution">4. Lower the resolution of metrics when you don’t need high resolution&nbsp;</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Address the metric resolution too! High-resolution metrics might be useful during an analysis to discover a needle in a haystack, but they come at a cost.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>If a service is so critical that learning about a problem within seconds is critical, then use a high-resolution measure. If a 5-minute delay in sending metrics and not being able to make metrics more detailed are fine for the service, limiting the resolution of metrics will save you money on Cloudwatch costs.</p>
<!-- /wp:paragraph -->