記事公開日
Amazon Bedrock Model Invocation Loggingで見られる内容を確かめてみた!

この記事のポイント
Amazon Bedrockの「Invocation Logging」機能を活用し、追加インフラなしでユーザー別の利用状況(トークン数やレイテンシー)を可視化する方法を検証しました。高機能なOpenTelemetry構成と比較したコストメリットや、実際のログ構造に基づいた集計手法を、現役エンジニアの視点で具体的に解説します。
- 圧倒的なコストパフォーマンス:
OpenTelemetry構成(月額約$30〜50)に対し、Invocation Loggingはサーバーレスのため、ログ保存料(東京リージョン:取り込み$0.76/GB)のみで大幅にコストを抑えた運用が可能です。 - 詳細なユーザー別追跡と集計:
公式ドキュメントに基づき、JSONログ内の identity.arn フィールドからIAMユーザーを特定。CloudWatch Logs Insightsを用いた、トークン消費量(totalInput/Output)を算出する実用的なクエリ例を紹介します。 - 2026年4月の独自検証データ:
実際の検証環境にて「hello」と送信した際の生ログを解析。レイテンシー2046ms、合計31トークンといったリクエスト単位の詳細データが正確に記録されることを確認しました。
はじめに
こんにちは。DXソリューション営業本部の岡田です。
Claude Code on Amazon Bedrockの監視を検討する中で、「ユーザー別の利用状況を追跡するにはOpenTelemetry(OTel)のコンテナ構成が必要」という議題に上がりました。
しかし、コンテナの維持費や運用負荷を考え、Bedrock Model Invocation Loggingで実際にどこまで見られるのか、検証環境で確かめてみました。
OpenTelemetryを使ったフルスタック構成の詳細については、下記ブログをご覧ください。
Invocation Loggingとは
Bedrock Model Invocation Loggingは、Amazon Bedrockの設定画面でONにするだけで、アカウント内の全モデル呼び出しの詳細ログを記録できる機能です。ログの送信先はCloudWatch Logs、S3、またはその両方を選択できます。
デフォルトでは無効になっており、有効化後にログの記録が開始されます。追加のインフラ(コンテナやサーバー)は一切不要です。
参考: Monitor model invocation using CloudWatch Logs and Amazon S3 - Amazon Bedrock
設定方法
設定は以下の手順で行います。
1. CloudWatch Logsのロググループを作成
CloudWatchコンソールで、ロググループを作成します。今回は /aws/bedrock/modelinvocations という名前で作成しました。
2. IAMロールの作成
BedrockがCloudWatch Logsにログを書き込むためのIAMロールが必要です。信頼ポリシーで bedrock.amazonaws.com を信頼エンティティとし、CloudWatch Logsへの書き込み権限(logs:CreateLogStream、logs:PutLogEvents)を付与します。
Bedrockの設定画面で「新しいロールを作成して使用」を選択すると自動作成されますが、権限が不足する場合はIAMコンソールから手動で作成する必要があります。
3. Invocation LoggingをONにする
Bedrockコンソール → 設定 → 「モデル呼び出しのログ記録」の画面を開きます。
デフォルトではOFFになっています。

ONにすると、以下の設定項目が展開されます。

各項目を以下のように設定します。
| 項目 | 設定値 |
|---|---|
| ログに含めるデータタイプ | テキスト、イメージ、埋め込み、ビデオ(必要に応じて選択) |
| ログ記録先 | CloudWatch Logs のみ(S3のみやS3とCloudWatchの併用も可能) |
| ロググループ名 | /aws/bedrock/modelinvocations |
| サービスロール | 作成したIAMロールを選択 |
設定を保存すれば、以降のモデル呼び出しがすべてログに記録されます。
ログに記録される内容
実際にBedrockのプレイグラウンドから「hello」と送信し、CloudWatch Logsに出力されたログを確認しました。
記録されたJSONログの内容は以下の通りです。
{
"timestamp": "2026-04-30T05:48:22Z",
"accountId": "123456789012",
"region": "ap-northeast-1",
"requestId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"operation": "ConverseStream",
"modelId": "arn:aws:bedrock:ap-northeast-1:123456789012:inference-profile/jp.anthropic.claude-sonnet-4-6",
"input": {
"inputBodyJson": {
"messages": [{ "role": "user", "content": [{ "text": "hello" }] }]
},
"inputTokenCount": 8,
"cacheReadInputTokenCount": 0,
"cacheWriteInputTokenCount": 0
},
"output": {
"outputBodyJson": {
"output": {
"message": {
"role": "assistant",
"content": [{ "text": "Hello! How are you doing?..." }]
}
},
"stopReason": "end_turn",
"metrics": { "latencyMs": 2046 },
"usage": { "inputTokens": 8, "outputTokens": 23, "totalTokens": 31 }
},
"outputTokenCount": 23
},
"identity": {
"arn": "arn:aws:iam::123456789012:user/taro.yamada@example.com"
},
"inferenceRegion": "ap-northeast-1",
"schemaType": "ModelInvocationLog",
"schemaVersion": "1.0"
}
各フィールドの意味を整理します。
| フィールド | 内容 | 用途 |
|---|---|---|
| timestamp | リクエストの日時 | 時系列分析 |
| accountId | AWSアカウントID | マルチアカウント環境での識別 |
| operation | API操作名(ConverseStream等) | 呼び出し方法の確認 |
| modelId | 使用モデルのARN | モデル別の利用分析 |
| input.inputTokenCount | 入力トークン数 | コスト計算 |
| output.outputTokenCount | 出力トークン数 | コスト計算 |
| output.metrics.latencyMs | レイテンシー(ミリ秒) | パフォーマンス監視 |
| input.cacheReadInputTokenCount | キャッシュ読み取りトークン数 | キャッシュ効率の確認 |
| identity.arn | 呼び出し元のIAM ARN | ユーザー別の利用追跡 |
| inferenceRegion | 推論が実行されたリージョン | データレジデンシーの確認 |
| input/output.inputBodyJson/outputBodyJson | プロンプトとレスポンスの全文 | 監査・品質管理 |
ユーザー別の集計は可能か?
可能です。
ログの identity.arn フィールドにIAMユーザー名が含まれていることを確認しました。今回の検証では taro.yamada@example.com のようなIAMユーザー名が記録されています。
CloudWatch Logs Insightsを使えば、以下のようなクエリでユーザー別の集計が可能です。
fields @timestamp, identity.arn, modelId, input.inputTokenCount, output.outputTokenCount | filter schemaType = "ModelInvocationLog" | stats sum(input.inputTokenCount) as totalInput, sum(output.outputTokenCount) as totalOutput, count(*) as invocations by identity.arn | sort totalInput desc
このクエリにより、ユーザーごとの入力トークン数、出力トークン数、呼び出し回数を集計できます。
Bedrock標準メトリクス・Invocation Logging・OpenTelemetryの比較
Claude Code on Bedrockの監視方法を3つの観点で比較します。
| 項目 | Bedrock標準メトリクス | Invocation Logging | OpenTelemetry |
|---|---|---|---|
| 設定の手間 | 不要(自動) | 設定画面でON | コンテナ(ECS Fargate + ALB)の構築が必要 |
| ユーザー別追跡 | ❌ 不可 | ✅ 可能(identity.arn) | ✅ 可能(メール、部門等も取得可能) |
| トークン数 | ✅ モデル単位の合計 | ✅ リクエスト単位の詳細 | ✅ ユーザー単位の詳細 |
| レイテンシー | ✅ 平均/p99等 | ✅ リクエスト単位 | ✅ リクエスト単位 |
| 入出力内容 | ❌ 不可 | ✅ 全文記録 | ✅ 可能(要設定。デフォルトでは不可) |
| コード行数・PR数 | ❌ 不可 | ❌ 不可 | ✅ 可能 |
| ダッシュボード連携 | ✅ CloudWatch標準 | ✅ Logs Insights + メトリクスフィルター | ✅ CloudWatchカスタムメトリクス |
| 維持費 | ほぼ無料 | ログ保存料のみ | 約$30〜50/月 |
| ユースケース | 基本監視 | ユーザー別追跡・監査 | 開発者の生産性可視化 |
利用料金
Invocation Loggingの料金は、CloudWatch Logsの取り込み・保存料金のみです。
※以下は2026年4月時点の料金です。最新の料金はCloudWatch料金ページをご確認ください。
| 項目 | 料金(東京リージョン) |
|---|---|
| ログ取り込み | $0.76/GB |
| ログ保存 | $0.033/GB/月 |
OpenTelemetryの場合はECS Fargate(約$9/月)+ ALB(約$20/月)で月$30〜50の維持費がかかるのに対し、Invocation Loggingは追加インフラが不要なため、大幅にコストを抑えられます。
まとめ
Bedrock Model Invocation Loggingを検証環境で実際に有効化し、ログの内容を確認しました。
| 確認項目 | 結果 |
|---|---|
| 設定の手間 | Bedrockコンソールの設定画面でONにするだけ |
| ユーザー別追跡 | identity.arnフィールドにIAMユーザー名が記録される |
| 記録される情報 | モデルID、トークン数、レイテンシー、入出力内容、推論リージョン |
| ダッシュボード連携 | Logs Insightsでクエリ可能 |
| 追加インフラ | 不要(コンテナやサーバーは不要) |
| 維持費 | ログ保存料のみ(OpenTelemetryの月$30〜50と比較して大幅に安い) |
「誰が何トークン使ったか」レベルの監視であれば、Invocation Loggingで十分対応できます。
コード行数やPR数など開発者の生産性メトリクスまで必要な場合はOpenTelemetryが必要ですが、
多くのユースケースではInvocation Loggingがコストパフォーマンスに優れた選択肢になると思われます。
ぜひチェックしてみてください。
もし「このサービスについて知りたい」「AI・AWS活用のご相談」などのリクエストがございましたら、弊社お問い合わせフォームまでお気軽にご連絡ください。複雑な内容に関するお問い合わせの場合には直接営業からご連絡を差し上げます。また、よろしければ以下のリンクもご覧ください!
<QES関連ソリューション/ブログ>
<QESが参画しているAWSのセキュリティ推進コンソーシアムがホワイトペーパーを公開しました>
※Claude、Claude Codeは、Anthropic, PBCの商標または登録商標です。
※Amazon Web Services、"Powered by Amazon Web Services"ロゴ、およびブログで使用されるその他のAWS商標は、米国その他の諸国における、Amazon.com, Inc.またはその関連会社の商標です。


