Endpoint: {{ endpoint }}
{% endif %} {% if application_profile_scope %}{{ scope_label }}: {{ application_profile_scope | join(', ') }}
{% endif %}Region: {{ region }}{% if region_info and region_info.display_name and region_info.display_name != region %} ({{ region_info.display_name }}){% endif %} {% if region_info and region_info.partition and region_info.partition != 'aws' %} · {{ region_info.partition_name }}{% endif %}
Generated: {{ timestamp }}
{% if quotas.tpm or quotas.rpm or quotas.tpd or quotas.concurrent %}{{ label }}: {{ "{:,.0f}".format(quota.value) }}
{% if quota.url | https_url %}[{{ quota.code }}]{% else %}[{{ quota.code }}]{% endif %} {{ quota.name }}
IMPORTANT: These quotas (and those on the charts) were intelligently mapped with large language model. It is always good to crosscheck with {% if service_quotas_console_url | https_url %}AWS service quotas{% else %}AWS service quotas{% endif %}
Custom Model Import models have no per-model TPM, RPM or TPD quotas, so this report shows usage without limits. Bedrock scales the model copies that serve an imported model with its traffic; throttles mean requests arrived faster than copies were added. See Custom Model Import for details.
Low TPM/TPD values in this report do not rule out token-based throttling. Bedrock reserves input_tokens + max_tokens from your quota at request start, but CloudWatch only records actual tokens used after completion. If max_tokens is set high (e.g., 64K) but actual output is low, you may hit throttling limits that are invisible in these metrics. To diagnose, check your max_tokens settings and enable model invocation logging. See How tokens are counted in Amazon Bedrock for details.
Note: Numbers are rounded to the nearest integer
{# Table 1: Original Metrics #}| Metric | Statistic | {% for period in ['1hour', '1day', '7days', '14days', '30days'] %}
{{ period.upper() }} {% set granularity_seconds = granularity_config.get(period, 300) %} {% if granularity_seconds == 60 %}1-min data {% elif granularity_seconds == 300 %}5-min data {% elif granularity_seconds == 3600 %}1-hour data {% else %}{{ granularity_seconds }}s data{% endif %} |
{% endfor %}
||||
|---|---|---|---|---|---|---|
|
{{ metric }} {% if metric == 'InvocationLatency' %} aggregated with AVERAGE (milliseconds) {% else %} aggregated with SUM {% endif %} |
{% endif %}
{{ stat }} | {% for period in ['1hour', '1day', '7days', '14days', '30days'] %} {% set metric_data = time_periods[period]['__AGGREGATED__'].get(metric, {}) %} {% if stat == 'P50' %}{{ "{:,}".format(metric_data.p50|round|int) if metric_data.p50 is defined else "0" }} | {% elif stat == 'P90' %}{{ "{:,}".format(metric_data.p90|round|int) if metric_data.p90 is defined else "0" }} | {% elif stat == 'Average' %}{{ "{:,}".format(metric_data.avg|round|int) if metric_data.avg is defined else "0" }} | {% elif stat == 'Total' %}{{ "{:,}".format(metric_data.sum|round|int) if metric_data.sum is defined else "0" }} | {% elif stat == 'Data Points' %}{{ metric_data.count if metric_data.count is defined else 0 }} | {% endif %} {% endfor %}
| Metric | Statistic | {% for period in ['1hour', '1day', '7days', '14days', '30days'] %}
{{ period.upper() }} 1-min data |
{% endfor %}
||||
|---|---|---|---|---|---|---|
|
{{ rate_metric_labels[metric] }} {% if metric in ['TPM_1min', 'TPD'] %} derived from token counts {% elif metric == 'RPM_1min' %} derived from invocations {% endif %} |
{% endif %}
{{ stat }} | {% for period in ['1hour', '1day', '7days', '14days', '30days'] %} {% if metric == 'TPD' and period == '1hour' %}N/A | {% else %} {% set metric_data = time_periods[period]['__AGGREGATED__'].get(metric, {}) %} {% if stat == 'P50' %}{{ "{:,}".format(metric_data.p50|round|int) if metric_data.p50 is defined else "0" }} | {% elif stat == 'P90' %}{{ "{:,}".format(metric_data.p90|round|int) if metric_data.p90 is defined else "0" }} | {% elif stat == 'Average' %}{{ "{:,}".format(metric_data.avg|round|int) if metric_data.avg is defined else "0" }} | {% elif stat == 'Data Points' %}{{ metric_data.count if metric_data.count is defined else 0 }} | {% endif %} {% endif %} {% endfor %}
Not available: {{ breakdown.unavailable }}
{% else %}From the model invocation logs in {{ breakdown.log_group }} ({{ local_time(breakdown.coverage.start) }} to {{ local_time(breakdown.coverage.end) }}). Shares are of the endpoint's CloudWatch totals over the covered time; "{{ unattributed_label }}" is usage CloudWatch counted that the logs do not hold.{% if not imported %} Quotas are shared by all callers.{% endif %} {% if breakdown.principal_filter %}Selected principals: {{ breakdown.principal_filter | join(', ') }}.{% endif %}
{% for note in breakdown.notes %}Note: {{ note }}
{% endfor %} {% for period in period_ms %} {% set section = breakdown.periods.get(period) %} {% if section and section.rows %}| {{ breakdown.label }} | {% if breakdown.kind != 'principal' %}IAM principals | {% else %}Tags (summed row: its principals) | {% endif %}Via | Share of tokens | Share of requests | Tokens | Requests | TPM P50 | TPM P90 | TPM max | RPM P50 | RPM P90 | RPM max | {% if period != '1hour' %}TPD avg | TPD max | {% endif %}
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ row.name }} | {% if breakdown.kind != 'principal' %}{{ row.principals | join(', ') }} | {% else %}{% if row.principals %}{{ row.principals | join(', ') }}{% elif row.tags %}{% for key, value in row.tags.items() %}{{ key }}={{ value }} {% endfor %}{% else %}N/A{% endif %} | {% endif %}
{{ row.via | join(', ') }} | {% if row.share_tokens is not none %}{{ "{:.1%}".format(row.share_tokens) }}{% else %}N/A{% endif %} | {% if row.share_requests is not none %}{{ "{:.1%}".format(row.share_requests) }}{% else %}N/A{% endif %} | {{ "{:,.0f}".format(row.tokens) }} | {{ "{:,.0f}".format(row.requests) }} | {{ "{:,.0f}".format(row.tpm_p50) }} | {{ "{:,.0f}".format(row.tpm_p90) }} | {{ "{:,.0f}".format(row.tpm_max) }} | {{ "{:,.1f}".format(row.rpm_p50) }} | {{ "{:,.1f}".format(row.rpm_p90) }} | {{ "{:,.1f}".format(row.rpm_max) }} | {% if period != '1hour' %}{{ "{:,.0f}".format(row.tpd_avg) }} | {{ "{:,.0f}".format(row.tpd_max) }} | {% endif %}
| Profile Name | ID | Tags | P50 | P90 | Average |
|---|---|---|---|---|---|
| {{ contrib.profile_name }} | {{ contrib.profile_arn_id }} | {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }} {% endfor %}{% else %}N/A{% endif %} |
{{ "{:,.0f}".format(contrib.tpm_p50) }} | {{ "{:,.0f}".format(contrib.tpm_p90) }} | {{ "{:,.0f}".format(contrib.tpm_avg) }} |
| Profile Name | ID | Tags | P50 | P90 | Average |
|---|---|---|---|---|---|
| {{ contrib.profile_name }} | {{ contrib.profile_arn_id }} | {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }} {% endfor %}{% else %}N/A{% endif %} |
{{ "{:,.0f}".format(contrib.rpm_p50) }} | {{ "{:,.0f}".format(contrib.rpm_p90) }} | {{ "{:,.0f}".format(contrib.rpm_avg) }} |
| Profile Name | ID | Tags | Total |
|---|---|---|---|
| {{ contrib.profile_name }} | {{ contrib.profile_arn_id }} | {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }} {% endfor %}{% else %}N/A{% endif %} |
{{ "{:,.0f}".format(contrib.throttles) }} |
| Profile Name | ID | Tags | P50 | P90 | Average |
|---|---|---|---|---|---|
| {{ contrib.profile_name }} | {{ contrib.profile_arn_id }} | {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }} {% endfor %}{% else %}N/A{% endif %} |
{{ "{:,.0f}".format(contrib.tpm_p50) }} | {{ "{:,.0f}".format(contrib.tpm_p90) }} | {{ "{:,.0f}".format(contrib.tpm_avg) }} |
| Profile Name | ID | Tags | P50 | P90 | Average |
|---|---|---|---|---|---|
| {{ contrib.profile_name }} | {{ contrib.profile_arn_id }} | {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }} {% endfor %}{% else %}N/A{% endif %} |
{{ "{:,.0f}".format(contrib.rpm_p50) }} | {{ "{:,.0f}".format(contrib.rpm_p90) }} | {{ "{:,.0f}".format(contrib.rpm_avg) }} |
| Profile Name | ID | Tags | P50 | P90 | Average |
|---|---|---|---|---|---|
| {{ contrib.profile_name }} | {{ contrib.profile_arn_id }} | {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }} {% endfor %}{% else %}N/A{% endif %} |
{{ "{:,.0f}".format(contrib.tpd_p50) }} | {{ "{:,.0f}".format(contrib.tpd_p90) }} | {{ "{:,.0f}".format(contrib.tpd_avg) }} |
| Profile Name | ID | Tags | Total |
|---|---|---|---|
| {{ contrib.profile_name }} | {{ contrib.profile_arn_id }} | {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }} {% endfor %}{% else %}N/A{% endif %} |
{{ "{:,.0f}".format(contrib.throttles) }} |
| Profile Name | ID | Tags | P50 | P90 | Average |
|---|---|---|---|---|---|
| {{ contrib.profile_name }} | {{ contrib.profile_arn_id }} | {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }} {% endfor %}{% else %}N/A{% endif %} |
{{ "{:,.0f}".format(contrib.tpm_p50) }} | {{ "{:,.0f}".format(contrib.tpm_p90) }} | {{ "{:,.0f}".format(contrib.tpm_avg) }} |
| Profile Name | ID | Tags | P50 | P90 | Average |
|---|---|---|---|---|---|
| {{ contrib.profile_name }} | {{ contrib.profile_arn_id }} | {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }} {% endfor %}{% else %}N/A{% endif %} |
{{ "{:,.0f}".format(contrib.rpm_p50) }} | {{ "{:,.0f}".format(contrib.rpm_p90) }} | {{ "{:,.0f}".format(contrib.rpm_avg) }} |
| Profile Name | ID | Tags | P50 | P90 | Average |
|---|---|---|---|---|---|
| {{ contrib.profile_name }} | {{ contrib.profile_arn_id }} | {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }} {% endfor %}{% else %}N/A{% endif %} |
{{ "{:,.0f}".format(contrib.tpd_p50) }} | {{ "{:,.0f}".format(contrib.tpd_p90) }} | {{ "{:,.0f}".format(contrib.tpd_avg) }} |
| Profile Name | ID | Tags | Total |
|---|---|---|---|
| {{ contrib.profile_name }} | {{ contrib.profile_arn_id }} | {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }} {% endfor %}{% else %}N/A{% endif %} |
{{ "{:,.0f}".format(contrib.throttles) }} |
| Profile Name | ID | Tags | P50 | P90 | Average |
|---|---|---|---|---|---|
| {{ contrib.profile_name }} | {{ contrib.profile_arn_id }} | {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }} {% endfor %}{% else %}N/A{% endif %} |
{{ "{:,.0f}".format(contrib.tpm_p50) }} | {{ "{:,.0f}".format(contrib.tpm_p90) }} | {{ "{:,.0f}".format(contrib.tpm_avg) }} |
| Profile Name | ID | Tags | P50 | P90 | Average |
|---|---|---|---|---|---|
| {{ contrib.profile_name }} | {{ contrib.profile_arn_id }} | {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }} {% endfor %}{% else %}N/A{% endif %} |
{{ "{:,.0f}".format(contrib.rpm_p50) }} | {{ "{:,.0f}".format(contrib.rpm_p90) }} | {{ "{:,.0f}".format(contrib.rpm_avg) }} |
| Profile Name | ID | Tags | P50 | P90 | Average |
|---|---|---|---|---|---|
| {{ contrib.profile_name }} | {{ contrib.profile_arn_id }} | {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }} {% endfor %}{% else %}N/A{% endif %} |
{{ "{:,.0f}".format(contrib.tpd_p50) }} | {{ "{:,.0f}".format(contrib.tpd_p90) }} | {{ "{:,.0f}".format(contrib.tpd_avg) }} |
| Profile Name | ID | Tags | Total |
|---|---|---|---|
| {{ contrib.profile_name }} | {{ contrib.profile_arn_id }} | {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }} {% endfor %}{% else %}N/A{% endif %} |
{{ "{:,.0f}".format(contrib.throttles) }} |
| Profile Name | ID | Tags | P50 | P90 | Average |
|---|---|---|---|---|---|
| {{ contrib.profile_name }} | {{ contrib.profile_arn_id }} | {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }} {% endfor %}{% else %}N/A{% endif %} |
{{ "{:,.0f}".format(contrib.tpm_p50) }} | {{ "{:,.0f}".format(contrib.tpm_p90) }} | {{ "{:,.0f}".format(contrib.tpm_avg) }} |
| Profile Name | ID | Tags | P50 | P90 | Average |
|---|---|---|---|---|---|
| {{ contrib.profile_name }} | {{ contrib.profile_arn_id }} | {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }} {% endfor %}{% else %}N/A{% endif %} |
{{ "{:,.0f}".format(contrib.rpm_p50) }} | {{ "{:,.0f}".format(contrib.rpm_p90) }} | {{ "{:,.0f}".format(contrib.rpm_avg) }} |
| Profile Name | ID | Tags | P50 | P90 | Average |
|---|---|---|---|---|---|
| {{ contrib.profile_name }} | {{ contrib.profile_arn_id }} | {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }} {% endfor %}{% else %}N/A{% endif %} |
{{ "{:,.0f}".format(contrib.tpd_p50) }} | {{ "{:,.0f}".format(contrib.tpd_p90) }} | {{ "{:,.0f}".format(contrib.tpd_avg) }} |
| Profile Name | ID | Tags | Total |
|---|---|---|---|
| {{ contrib.profile_name }} | {{ contrib.profile_arn_id }} | {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }} {% endfor %}{% else %}N/A{% endif %} |
{{ "{:,.0f}".format(contrib.throttles) }} |