Management and Governance

Amazon CloudWatch

Bedrock のモデル呼び出しを数値で見る場所。`AWS/Bedrock` 名前空間のメトリクス(トークン数・レイテンシ・スロットル)と、Agents・Guardrails それぞれ別名前空間のメトリクスを押さえます。

  • B|実装まわり
  • D3 安全性・セキュリティ・ガバナンス
  • D4 運用効率と最適化
  • D5 テスト・検証・トラブルシュート

ひとことで言うと

Bedrock 呼び出しの「数値」が着地する場所です。呼び出し数・レイテンシ・トークン数・スロットル数を AWS/Bedrock 名前空間のメトリクスとして自動公開しており、ダッシュボード化・アラーム化ができます。中身(プロンプトやレスポンス本文)は見ません。それは CloudWatch Logs の仕事です。

要するに、計器盤です。速度・回転数・燃料残量は出ますが、車内で誰が何を話したかは記録しません。「何を話したか」が要るなら Logs(ログ)に切り替える必要があります。

なぜ生まれたか

Bedrock 運用で必要になることCloudWatch 側の受け皿
モデル呼び出しの成功・失敗・スロットルを数で追うAWS/Bedrock 名前空間のメトリクス
ガードレールの介入率を追うAWS/Bedrock/Guardrails 名前空間
エージェントのモデル呼び出し・ツール呼び出しの内訳を追うAWS/Bedrock/Agents 名前空間
レイテンシ悪化が「モデルが遅い」のか「応答が長くなった」のかを切り分けるTimeToFirstToken を使った OTPS(output tokens per second)計算
エージェント全体のトレース・スパンを一元的に見るAgentCore Observability の GenAI Observability ダッシュボード(CloudWatch 上)

D4「運用効率と最適化」の 4.3(監視)と D5「テスト・検証・トラブルシュート」の 5.2(トラブルシュート)が、ほぼこのメトリクス群の読み方を問うています。

何に使うか

用途使い方関連ドメイン
呼び出し量・エラー率の常時監視Invocations / InvocationClientErrors / InvocationServerErrors をダッシュボード化D4
スロットル検知InvocationThrottles(スロットルは Invocations にも Errors にもカウントされない点に注意)D4, D5
コスト・クォータの兆候把握InputTokenCount / OutputTokenCount / EstimatedTPMQuotaUsageD4
プロンプトキャッシュの効き具合CacheReadInputTokens(割引レート・TPM 対象外)/CacheWriteInputTokens(TPM 対象)D4
レイテンシ悪化の原因切り分けOTPS = OutputTokenCount / (InvocationLatency - TimeToFirstToken) * 1000 のメトリクス数式D5
エージェントのボトルネック特定AWS/Bedrock/Agents の ModelLatency と TotalTime の差分D2, D5

試験でどう問われるか

問われ方正解に寄る条件引っかけ
「呼び出しが遅い」だけの報告からアラームを組みたいレイテンシ悪化の原因(サービス側かプロンプト長か)を切り分けたい → OTPS のメトリクス数式アラームInvocationLatency に単純な閾値アラームを張るだけ(プロンプトが長くなっただけでも誤検知する)
ガードレールの介入率を可視化したいGuardrails 専用メトリクス → AWS/Bedrock/Guardrails 名前空間の InvocationsIntervenedAWS/Bedrock の Invocations を見る(介入は別名前空間)
「スロットルされたリクエスト数を知りたいのに Invocations と合計しても合わない」スロットルは Invocations にも Errors にもカウントされない仕様集計ミスと判断してコードを疑う
エージェントのどこで時間を食っているか特定したいモデル呼び出し自体の時間 ModelLatency と、ツール呼び出し込みの全体時間 TotalTime の比較X-Ray を使わないと切り分けられないと誤解する(メトリクスだけでも粗い切り分けは可能)
プロンプトキャッシュのコスト効果を数値で示したいCacheReadInputTokens と CacheWriteInputTokens を突き合わせるInputTokenCount だけを見る(キャッシュ分が埋もれる)

ストリーミングでないと TimeToFirstToken は出ません。ConverseStream / InvokeModelWithResponseStream 限定のメトリクスなので、同期 API(Converse / InvokeModel)だけを使っている構成では OTPS 計算そのものが組めません。「レイテンシの原因切り分けをしたい」というシナリオで、まずストリーミングを使っているかを確認する必要があります。

実務でどう使うか

  • メトリクスのディメンションは ModelId が基本。 複数モデルを併用していると、集約された値だけを見て「遅い」「速い」を判断すると誤ります。モデルIDで分けて見る
  • OTPS のアラームは静的閾値と異常検知の2種類。 ベースラインが分かっているなら静的閾値(期待値の8割程度から開始)、負荷パターンが変動するなら異常検知(最低2週間分のデータが必要)を使う。新規デプロイでは異常検知はまだ使えないので静的閾値から始める
  • Agents のメトリクスを受け取るには IAM ロールに cloudwatch:PutMetricData(AWS/Bedrock/Agents 名前空間限定)が要ります。 エージェント作成時のサービスロールにこの許可が無いと、メトリクス自体が飛んできません
  • AgentCore を使うなら「GenAI Observability」ダッシュボードが専用に用意されています。 ただし表示にはまず CloudWatch Transaction Search を有効化する一手間が要ります(既定では offです)

Guardrails の Latency と InvocationLatency は別物です。ApplyGuardrail API 呼び出し自体の InvocationLatency と、Automated Reasoning チェック用の Latency(InvokeAutomatedReasoningCheck)は指標も対象操作も異なります。同じ「レイテンシ」という語で片方だけ見ていると、もう一方の遅延を見落とします。

取り違えやすいもの

迷う相手切り分けの一言
CloudWatch LogsCloudWatch(このページ)は数値。Logs は中身(プロンプト・レスポンス本文)。「介入した理由を知りたい」なら Logs 側が要る
CloudTrailCloudWatch は「何が起きたか」の量。CloudTrail は「誰が」「いつ」「どの API を」の監査証跡。用途が違う
X-Rayメトリクスは集約値。X-Ray はリクエスト単位のトレース(サービスをまたいだ時間の内訳)。エージェントの1リクエストがどこで詰まったかまで追うなら X-Ray
AgentCore ObservabilityAgentCore はエージェント専用の可観測性の仕組みで、内部的に CloudWatch(メトリクス・ログ)と X-Ray(トレース)の両方を使う。両者を代替するものではなく、その上に乗る専用ダッシュボード

想起チェック

Q1. 「InvocationLatency が上がったが、原因がサービス側の劣化かプロンプトが長くなっただけか分からない」ときに見るべき指標は?

**OTPS(output tokens per second)**です。OutputTokenCount / (InvocationLatency - TimeToFirstToken) * 1000 で計算し、OTPS が安定していればレイテンシ増は出力トークン数の増加、OTPS が落ちていればサービス側の劣化と判断できます。ただしストリーミングAPIのみで計測可能です。

Q2. Guardrails の介入率を見たいとき、どの名前空間のどのメトリクスを見る?

**AWS/Bedrock/Guardrails 名前空間の InvocationsIntervened**です。AWS/Bedrock(モデル呼び出し本体)とは別名前空間なので混同しないこと。

Q3. スロットルされたリクエストは Invocations の分母に入る?

入りません。 InvocationThrottles は独立したカウントで、Invocations にも Errors にもカウントされません。成功率を計算するときにこれを見落とすと、実際より高い成功率が出ます。

出典(AWS公式)