CloudWatch Metric Guide

CloudWatch Metric Guide

Every important CloudWatch metric explained — what it measures, recommended alarm thresholds, common failures, and how to debug it when it fires. Covers 45 metrics across 12 AWS services.

45

metrics covered

12

AWS services

5 min

to run a free audit

APIGATEWAY

Amazon API Gateway

4 metrics covered

AWS/ApiGateway

Latency

Milliseconds

Latency measures the total time between when API Gateway receives a request from a client and when it returns a response. This includes the backend integration time (IntegrationLatency) plus API Gateway's own overhead — authorizers, request/response mapping templates, and throttling checks.

Threshold

p99 Latency > 3,000 ms (3 seconds) for 5 consecutive minutes

AWS/ApiGateway

5XXError

Count

5XXError counts server-side errors returned by API Gateway in a given period — responses indicating the backend integration failed, timed out, or API Gateway itself hit an internal problem. The Sum statistic gives the raw count; the Average statistic gives the error rate (5XXError count divided by total Count).

Threshold

Average (error rate) ≥ 1% over 5 minutes, OR any 5XXError on low-traffic APIs

AWS/ApiGateway

4XXError

Count

4XXError counts client-side errors captured by API Gateway in a given period — including throttling (429), authentication/authorization failures (401/403), and modified gateway responses. The Sum statistic gives the raw count; the Average statistic gives the error rate (4XXError count divided by total Count).

Threshold

Average (error rate) rises more than 3x above its trailing 24-hour baseline, sustained for 10 minutes

AWS/ApiGateway

Count

Count

Count is the total number of API requests API Gateway received in a given period, across all response codes. AWS represents this metric with the SampleCount statistic.

Threshold

Count drops below 50% of its trailing same-hour-of-week baseline for 10 consecutive minutes

S3

Amazon S3

4 metrics covered

AWS/S3

BucketSizeBytes

Bytes

BucketSizeBytes reports the total size, in bytes, of all objects stored in a bucket for a given storage class — including current and noncurrent object versions, object metadata, and the parts of any incomplete multipart uploads. It is a free, always-on storage metric published once per day.

Threshold

Alarm on a >20% day-over-day increase (or use CloudWatch Anomaly Detection) rather than an absolute byte value

AWS/S3

NumberOfObjects

Count

NumberOfObjects reports the total count of objects in a general purpose bucket across all storage classes — including current and noncurrent versions, delete markers, and the parts of incomplete multipart uploads. Like BucketSizeBytes, it is a free storage metric published once per day, filtered with StorageType=AllStorageTypes.

Threshold

Alarm on a >20% day-over-day increase (or use CloudWatch Anomaly Detection) rather than an absolute count

AWS/S3

4xxErrors

Count

4xxErrors reports HTTP 4xx client error status codes returned for requests to a bucket, published as 0 or 1 per request. The Sum statistic gives the error count for the period; the Average statistic gives the error rate.

Threshold

Average (error rate) > 5% sustained for 5 minutes — or Sum-based, scaled to your normal request volume

AWS/S3

5xxErrors

Count

5xxErrors reports HTTP 5xx server error status codes returned by S3 for requests to a bucket, published as 0 or 1 per request. The Sum statistic gives the error count for the period; the Average statistic gives the error rate.

Threshold

Average (error rate) > 1% sustained for 5 minutes — or Sum > 0 sustained across periods for low-traffic buckets

CLOUDFRONT

Amazon CloudFront

4 metrics covered

AWS/CloudFront

Requests

None

Requests counts the total number of viewer requests received by CloudFront for a distribution, across all HTTP methods and both HTTP and HTTPS. Per AWS documentation, CloudWatch reports this metric with Unit set to "None" rather than "Count."

Threshold

Anomaly detection recommended over a fixed threshold — alarm when Requests falls more than 50% below the expected baseline for the same time of day, sustained for 3 consecutive 5-minute periods

AWS/CloudFront

5xxErrorRate

Percent

5xxErrorRate is the percentage of all viewer requests for which CloudFront's response had an HTTP status code in the 5xx range, indicating a server-side error at the origin or within CloudFront itself.

Threshold

> 1% sustained for 3 consecutive 5-minute periods (Average statistic)

AWS/CloudFront

4xxErrorRate

Percent

4xxErrorRate is the percentage of all viewer requests for which CloudFront's response had an HTTP status code in the 4xx range, indicating a client-side or request-validation error such as a missing resource or a denied request.

Threshold

> 5% sustained for 3 consecutive 5-minute periods (Average statistic)

AWS/CloudFront

OriginLatency

Milliseconds

OriginLatency measures the total time, in milliseconds, from when CloudFront receives a request to when it starts sending a response back toward the network — but only for requests served from the origin (a cache miss), not from CloudFront's cache. Also known as first-byte latency or time-to-first-byte.

Threshold

p90 > 1000 ms sustained for 3 consecutive 5-minute periods (ExtendedStatistics p90)

EKS

Amazon EKS

4 metrics covered

ContainerInsights

pod_cpu_utilization

Percent

pod_cpu_utilization reports the percentage of CPU units used by a pod (or aggregated by Namespace, Service, or ClusterName, depending on which dimension set you query), calculated as pod_cpu_usage_total ÷ node_cpu_limit — the node's total CPU capacity, not the pod's own CPU limit.

Threshold

> 80% sustained for 5+ minutes at the PodName+Namespace+ClusterName dimension for critical workloads

ContainerInsights

pod_memory_utilization

Percent

pod_memory_utilization reports the percentage of memory used by a pod (or aggregated by Namespace, Service, or ClusterName), calculated as pod_memory_working_set ÷ node_memory_limit — the node's total memory capacity, not the pod's own memory limit.

Threshold

Namespace or ClusterName aggregate > 75% sustained for 10+ minutes; per-pod, pair with pod_memory_utilization_over_pod_limit for OOM-kill-specific alerting

ContainerInsights

node_cpu_utilization

Percent

node_cpu_utilization reports the total percentage of CPU units in use on a worker node (or aggregated across all nodes at the ClusterName dimension), calculated as node_cpu_usage_total ÷ node_cpu_limit — the node's total allocatable CPU capacity.

Threshold

> 80% sustained for 15 minutes, evaluated per NodeName

ContainerInsights

cluster_failed_node_count

Count

cluster_failed_node_count reports the number of worker nodes in the cluster currently suffering from a Kubernetes node condition — per AWS documentation, a node is considered failed if it is suffering from any node condition (e.g. NotReady, MemoryPressure, DiskPressure, or PIDPressure).

Threshold

> 0 — alarm immediately

Audit your setup

Not sure which of these you’re missing?

The free Nuberio Audit scans your CloudWatch setup in 5 minutes and identifies missing alarms, noisy alarms, and unmonitored resources across all the services on this page. No credit card. Read-only access.

Finding too many gaps? Run a free CloudWatch audit to get a hygiene score across your entire account — all missing alarms surfaced in one report with copy-paste CLI fixes.