Check your Bedrock prompt cache
Paste three numbers from CloudWatch and see how much of your Claude prompt came from the cache on Amazon Bedrock, what your input cost, and how much the misses cost you. Nothing to install. It runs in your browser and sends nothing anywhere.
What usually causes this
To find out which one it is, check a saved request with cachecanary lint, or compare two requests in a row with cachecanary diff. Setup is on the home page, and the framework guides show where LiteLLM, Strands Agents and LangChain lose the cache.
Where to find the three numbers
Amazon Bedrock publishes them to CloudWatch for every model you call, with no setup. In the CloudWatch console:
- Open Metrics, then All metrics, and type your model ID in the search box (or open Bedrock and the metrics listed by model ID).
- For the model you want to check, tick
InputTokenCount,CacheReadInputTokenCountandCacheWriteInputTokenCount. - Pick a time range, for example 1 week. On the Graphed metrics tab, set Statistic to Sum and Period to the same length as the time range, so each metric shows one total.
With the AWS CLI, list the exact model IDs CloudWatch has, then get each total. This is the cache read total for one week; run it again with the other two metric names, and add up the values if it returns more than one:
aws cloudwatch list-metrics --namespace AWS/Bedrock \ --metric-name CacheReadInputTokenCount aws cloudwatch get-metric-statistics --namespace AWS/Bedrock \ --metric-name CacheReadInputTokenCount \ --dimensions Name=ModelId,Value=YOUR_MODEL_ID \ --start-time 2026-10-13T00:00:00Z --end-time 2026-10-20T00:00:00Z \ --period 604800 --statistics Sum
Use the Region your app calls. InputTokenCount doesn't include cached tokens (AWS docs), so the three numbers add up to your whole input.
How the numbers work
- Hit rate is the share of all your input tokens that were read from the cache: cache reads divided by the three numbers added together.
- Input cost is uncached tokens at the input price, cache reads at the read price (a tenth of it for most models, less on the newest ones), and cache writes at 1.25 times the input price. CloudWatch doesn't say which writes used the 1-hour cache, which costs 2 times, so all writes are priced as 5-minute writes.
- Lost to cache misses compares that with the same tokens at your target hit rate: the part that would have been cache reads was paid at the full or write price instead.
- Prices are Bedrock's on-demand list prices (October 2026).
global.model IDs are billed at list price and regional ones cost 10% more, except older models, which cost the same on both. If you have a discount, enter your own input price. - The maths is the same as the
cachecanary logsandcachecanary langfusecommands, so the numbers match.
Want the same for each app or IAM role, a reason for each miss, or an alert when it drops? CacheCanary reads your invocation logs or your Langfuse traces, and runs in CI.
Using CacheCanary? I'd love to hear how it's going, good or bad, and whether you'd want the dashboard. Email me at hello@cachecanary.com. I read every message.