Skip to main content

Monitoring metrics

A reference sheet of the metrics that matter at each tier. Use it as a starting point — add the metrics that predict failure for this particular workload, and remove the ones nobody acts on.

Web tier​

Elastic Load Balancer​

MetricWhat it tells you
RequestCountTraffic volume; the denominator for every rate metric
HTTPCode_ELB_4XX_CountRequests the load balancer rejected, often malformed or unauthorised
HTTPCode_ELB_5XX_CountLoad balancer errors; usually capacity or target health
HTTPCode_Target_5XX_CountErrors returned by the application
TargetResponseTimeTime spent behind the load balancer — the user's experience
HealthyHostCount / UnhealthyHostCountTarget availability
ActiveConnectionCountConnection pressure
RejectedConnectionCountLoad balancer at connection limit

API Gateway​

MetricWhat it tells you
CountRequests handled
4XXErrorClient-side failure — auth, validation, rate limiting
5XXErrorIntegration or authoriser failure
LatencyEnd-to-end request time including integration
IntegrationLatencyTime spent in the backend — latency minus this is gateway overhead
CacheHitCount / CacheMissCountCache effectiveness

CloudFront​

MetricWhat it tells you
RequestsVolume at the edge
BytesDownloaded / BytesUploadedTransfer volume and cost driver
4xxErrorRate / 5xxErrorRateError rate at the edge
CacheHitRateOrigin load and cost; a low rate points at cache policy
OriginLatencyTime to origin when the cache misses

Application tier​

EC2​

MetricWhat it tells you
CPUUtilizationCompute saturation; scales with most workloads
MemoryUtilizationRequires the CloudWatch agent; often the real constraint
DiskReadOps / DiskWriteOpsI/O pressure
NetworkIn / NetworkOutTraffic and potential cost
StatusCheckFailedInstance or host failure

Auto Scaling​

MetricWhat it tells you
GroupDesiredCapacityIntended capacity
GroupInServiceInstancesCapacity actually available
GroupOutOfServiceInstancesCapacity lost to health failures
GroupPendingInstancesCapacity not yet ready — a scaling lag signal

Lambda​

MetricWhat it tells you
InvocationsVolume
DurationExecution time; the cost driver alongside memory
ErrorsHandler failures
ThrottlesConcurrency limit reached — requests are being dropped
ConcurrentExecutionsAccount and function pool pressure
IteratorAgeConsumer is falling behind a stream
DeadLetterErrorsFailed delivery to a DLQ

ElastiCache​

MetricWhat it tells you
CurrConnectionsConnection pool health
CacheHits / CacheMissesCache effectiveness
EvictionsMemory pressure causing silent data loss
CPUUtilizationNode saturation
MemoryUsage / MemoryFreeHeadroom
ReplicationLagRead replica freshness

EKS​

MetricWhat it tells you
pod_cpu_utilizationPod CPU relative to request
pod_memory_utilizationPod memory relative to limit
pod_number_of_container_restartsCrash loop or OOM kill
kube_pod_status_phasePending, Running, Failed
kube_deployment_status_replicas_availableServing replicas
kube_deployment_status_replicas_unavailableDeployment health
node_filesystem_avail_bytesDisk pressure
kube_job_failedBatch failure

Database tier​

RDS​

MetricWhat it tells you
CPUUtilizationInstance saturation
FreeStorageSpaceStorage exhaustion risk
DatabaseConnectionsConnection pool pressure
ReadIOPS / WriteIOPSI/O load against provisioned capacity
ReadLatency / WriteLatencyStorage-level performance
DatabaseLoadActive sessions — the most useful single RDS metric
ReplicaLagRead replica staleness
FreeableMemoryMemory pressure
BurstBalanceBurst-capable volume exhaustion

DynamoDB​

MetricWhat it tells you
ConsumedReadCapacityUnits / ConsumedWriteCapacityUnitsThroughput used
ReadThrottleEvents / WriteThrottleEventsRequests rejected for capacity
ThrottledRequestsCombined throttle signal
SuccessfulRequestLatencyUser-facing latency
SystemErrorsService-side failures

Aurora​

MetricWhat it tells you
AuroraReplicaLagReplica freshness
BufferCacheHitRatioWhether the working set fits in memory
DDLThroughput / DMLThroughputWrite load
RollbackSegmentHistoryListLengthLong-running transaction pressure

Cross-cutting signals​

SignalSourceWhy it matters
Deployment eventsCI/CD → CloudWatch annotationsCorrelates change with effect
Queue depth and ageSQSConsumers falling behind
DLQ depthSQSSilent message loss
Certificate expiryACMOutage on a known date
Snapshot ageAWS BackupRecovery point risk
Budget thresholdAWS BudgetsCost anomaly

How to use this sheet​

  1. Select the metrics for the tiers the workload actually has.
  2. Baseline for one week under normal load.
  3. Set thresholds relative to the baseline and to user impact, not to generic defaults.
  4. Alarm on the two or three that indicate a problem, with composite alarms to reduce noise.
  5. Dashboard the rest for diagnosis, not alerting.
  6. Review monthly — delete what nobody looks at.