Skip to content

How to Create a CloudWatch Dashboard to Monitor Amazon Bedrock Inference Workloads

7 minute read
Content level: Foundational
0

This guide provides step-by-step instructions for building a custom CloudWatch dashboard to monitor Amazon Bedrock inference workloads, including usage metrics, latency, throttling, quota consumption, and cost tracking — with recommended alarms and best practices. Customers adopting Amazon Bedrock for production workloads need visibility into model invocation performance, token consumption, and quota headroom to avoid unexpected throttling. While Bedrock provides an automatic dashboard, it lacks

How to Create a CloudWatch Dashboard to Monitor Amazon Bedrock Inference Workloads

This guide walks through creating a CloudWatch dashboard to monitor Amazon Bedrock inference workloads. It covers usage metrics, performance, reliability, quota tracking, and cost visibility.

Important: Track metrics per model. Quotas (RPM, TPM), pricing, throttling, and burndown rates are all model-specific.


What the Automatic Dashboard Already Provides

AWS provides a free, zero-setup automatic dashboard for Bedrock. Before building a custom dashboard, understand what it already covers.

Access: CloudWatch → Dashboards → Automatic Dashboards tab → Bedrock


Metrics to Monitor

Usage Metrics

MetricStatisticWhat It Tells You
InvocationsSum (1-min period)Requests per minute (RPM)
InputTokenCountAverageTypical prompt size per request
InputTokenCountMaximumLargest prompt in a single request
OutputTokenCountAverageTypical response size per request
OutputTokenCountMaximumLargest response in a single request
InputTokenCountSum (hourly/daily)Total input tokens — maps to cost
OutputTokenCountSum (hourly/daily)Total output tokens — larger cost driver

Performance Metrics

MetricStatisticWhat It Tells You
TimeToFirstTokenp50, p99User-perceived responsiveness for streaming
InvocationLatencyp50, p99End-to-end time from request to last token

Tip: If InvocationLatency is high but TTFT is normal → long response, not a problem. If TTFT is high → actual latency degradation.

Reliability Metrics

MetricStatisticWhat It Tells You
InvocationThrottlesSumHitting quota — requests being dropped
InvocationClientErrorsSum4xx — malformed prompts, context window exceeded
InvocationServerErrorsSum5xx — service-side failures

Quota Capacity Metrics

MetricStatisticWhat It Tells You
EstimatedTPMQuotaUsageSum (1-min)Token quota consumption with burndown
% of QuotaMath: m1/QUOTA*100Headroom before throttling

Cache Efficiency (If Using Prompt Caching)

MetricStatisticWhat It Tells You
CacheReadInputTokensSumCached tokens — cheaper, no TPM impact
CacheWriteInputTokensSumTokens written to cache — DO count against TPM
Cache Hit RateMath expressionHigher = better cost efficiency

Dashboard Setup — Step by Step

Step 1: Create a New Dashboard

  1. Open CloudWatch console: https://console.aws.amazon.com/cloudwatch
  2. Left navigation → click Dashboards
  3. Click Create dashboard
  4. Name: Bedrock-Monitoring
  5. Click Create dashboard

Step 2: Add Throttles Widget (Put This First)

Red alert widget — if non-zero, you're losing requests.

  1. Add widget → Line → Metrics
  2. Navigate: AWS/Bedrock → By Model Id
  3. Select InvocationThrottles for each model
  4. Graphed metrics: Statistic = Sum, Period = 1 Minute
  5. Label each line with the model name
  6. Create widget

Step 3: Add RPM Widget

  1. Add widget → Line → Metrics
  2. AWS/Bedrock → By Model Id → select Invocations
  3. Statistic = Sum, Period = 1 Minute
  4. Create widget
  5. Add quota line: Edit → Graph options → Horizontal annotations → Value = RPM quota, Color = Red

Step 4: Add Input Token Count (Avg & Peak)

  1. Add widget → Line → Metrics
  2. AWS/Bedrock → By Model Id → select InputTokenCount
  3. Add the metric a second time (duplicate)
  4. Line 1: Statistic = Average, Label = "Avg Input Tokens"
  5. Line 2: Statistic = Maximum, Label = "Peak Input Tokens"
  6. Create widget

Step 5: Add Output Token Count (Avg & Peak)

  1. Same as Step 4 but select OutputTokenCount
  2. Line 1: Average → "Avg Output Tokens"
  3. Line 2: Maximum → "Peak Output Tokens"

Step 6: Add Time to First Token

Note: Only emitted for streaming APIs (ConverseStream, InvokeModelWithResponseStream).

  1. Add widget → Line → Metrics
  2. AWS/Bedrock → By Model Id → select TimeToFirstToken
  3. Add metric a second time
  4. Line 1: Statistic = p50, Label = "TTFT median"
  5. Line 2: Statistic = p99, Label = "TTFT worst case"
  6. Create widget

Step 7: Add Error Rate Widget

  1. Add widget → Line → Metrics
  2. Select: InvocationThrottles, InvocationClientErrors, InvocationServerErrors
  3. All set to: Sum, Period = 1 Minute
  4. Create widget

Step 8: Add TPM Quota Usage

  1. Add widget → Line → Metrics
  2. Select EstimatedTPMQuotaUsage, Statistic = Sum, Period = 1 Minute
  3. Create widget
  4. Edit → Add math expression: m1 / YOUR_TPM_QUOTA * 100
  5. Add horizontal annotations: 80% (orange), 100% (red)

Step 9: Add Daily Token Totals (Cost)

Multiply by per-token pricing for cost estimate.

  1. Add widget → Number (single value) → Metrics
  2. InputTokenCount: Sum, Period = 1 Day
  3. OutputTokenCount: Sum, Period = 1 Day
  4. Create widget

Step 10: Save

Click Save at the top right. Dashboard is live.


Recommended Alarms

Create at: CloudWatch → Alarms → Create alarm → Select metric → Set threshold.

AlarmConditionPriority
Throttles > 0Any throttle in 1-min windowHIGH — requests dropped
RPM > 80% of quotaSustained 3 minutesWARNING
TPM > 80% of quotaSustained 3 minutesWARNING
Server errors > 5 in 5 min5xx spikeWARNING
Client errors > 10Error rate spikeWARNING — app bug
TTFT p99 > 5 secondsLatency degradationWARNING — UX impact
Invocations = 0No traffic 5 min (biz hrs)HIGH — app down

Best Practices

PracticeWhy
Track per modelQuotas/pricing/throttling are per-model
Throttles widget at the topMost important signal
Add quota limit annotationsMakes spikes immediately actionable
Monitor TTFT, not just latencyTTFT = user-perceived speed
Optimize maxTokensHigh values reserve quota upfront → throttles
Start with automatic dashboardFree baseline, then customize
Separate prod vs devAvoid masking patterns
Alarm at 80%, not 100%At 100% you're already throttled
Track daily token sumsCost estimation without waiting for billing

Important: Metric Visibility in CloudWatch

InvocationThrottles and other error/event metrics only appear in CloudWatch after the event has actually occurred. CloudWatch does not show metrics that have never been emitted.

What this means for your dashboard:

  • If you search for InvocationThrottles and get "no metrics found" — that's good news: you haven't been throttled yet.
  • Build your dashboard with the metrics that are available (Invocations, TokenCounts, Latency, TPM). Error and throttle metrics will appear automatically when those events occur.
  • You can still create alarms on these metrics — they will stay in INSUFFICIENT_DATA state until first emitted, then activate.
MetricWhen It First Appears
InvocationsAfter first successful request
InputTokenCount / OutputTokenCountAfter first successful request
TimeToFirstTokenAfter first successful streaming request
EstimatedTPMQuotaUsageAfter first successful request
InvocationThrottlesONLY after a request has been throttled
InvocationClientErrorsONLY after a 4xx error occurs
InvocationServerErrorsONLY after a 5xx error occurs