

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 CloudWatch 日志和 Amazon S3 监控模型调用
<a name="model-invocation-logging"></a>

您可以使用模型调用日志来收集您在某个地区的 Amazon Bedrock 中使用的所有调用的调用 AWS 账户 日志、模型输入数据和模型输出数据。

通过调用日志记录，您可以收集与您在某个区域的账户中执行的支持调用相关的完整请求数据、响应数据和元数据。可以配置日志记录以提供日志数据发布到的目标资源。支持的目标包括亚马逊 CloudWatch 日志和亚马逊简单存储服务 (Amazon S3) Service。仅支持来自相同账户和区域的目标。

默认情况下，模型调用日志记录处于禁用状态。启用模型调用日志记录后，将存储日志，直到删除日志记录配置为止。

以下操作可以记录模型调用。
+ [Converse](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html)
+ [ConverseStream](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ConverseStream.html)
+ [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html)
+ [InvokeModelWithResponseStream](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModelWithResponseStream.html)

**注意**  
只有通过`bedrock-runtime`端点进行的调用才支持模型调用日志。通过其他端点（例如终端节点上的 Res `bedrock-mantle` ponses API）发出的呼叫目前不会被调用日志记录捕获。

[使用 Converse API](conversation-inference-call.md) 时，您传递的任何图像或文档数据都将记录在 Amazon S3 中（前提是您已在 Amazon S3 中[启用](#model-invocation-logging-console)传送和图像日志记录功能）。

在启用调用日志之前，您需要设置 Amazon S3 或 CloudWatch 日志目标。您可以通过控制台或 API 启用调用日志记录。

**Topics**
+ [设置 Amazon S3 目标](#setup-s3-destination)
+ [设置 CloudWatch 日志目标](#setup-cloudwatch-logs-destination)
+ [使用控制台启用模型调用日志记录](#model-invocation-logging-console)
+ [使用 API 启用模型调用日志记录](#using-apis-logging)
+ [日志条目格式](#model-invocation-log-format)

## 设置 Amazon S3 目标
<a name="setup-s3-destination"></a>

**注意**  
使用 Amazon S3 作为日志记录目标时，存储桶必须 AWS 账户 与 AWS 区域 您创建模型调用日志配置的存储桶相同。

您可以按照以下步骤在 Amazon Bedrock 中设置 S3 日志记录目标：

1. 创建要将日志传输到 S3 存储桶。

1. 向其添加如下所示的存储桶策略（替换{{accountId}}、{{region}}{{bucketName}}、和的值（可选{{prefix}}）：
**注意**  
当您使用权限 `S3:GetBucketPolicy` 和 `S3:PutBucketPolicy` 配置日志记录时，系统会代表您自动将存储桶策略附加到存储桶。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AmazonBedrockLogsWrite",
               "Effect": "Allow",
               "Principal": {
                   "Service": "bedrock.amazonaws.com"
               },
               "Action": [
                   "s3:PutObject"
               ],
               "Resource": [
                   "arn:aws:s3:::{{bucketName}}/{{prefix}}/AWSLogs/{{123456789012}}/BedrockModelInvocationLogs/*"
               ],
               "Condition": {
                   "StringEquals": {
                       "aws:SourceAccount": "{{123456789012}}"
                   },
                   "ArnLike": {
                       "aws:SourceArn": "arn:aws:bedrock:{{us-east-1}}:{{123456789012}}:*"
                   }
               }
           }
       ]
   }
   ```

------

1. （可选）如果在存储桶 SSE-KMS 上进行配置，请在 KMS 密钥上添加以下策略：

   ```
   {
       "Effect": "Allow",
       "Principal": {
           "Service": "bedrock.amazonaws.com"
       },
       "Action": "kms:GenerateDataKey",
       "Resource": "*",
       "Condition": {
           "StringEquals": {
             "aws:SourceAccount": "{{accountId}}" 
           },
           "ArnLike": {
              "aws:SourceArn": "arn:aws:bedrock:{{region}}:{{accountId}}:*"
           }
       }
   }
   ```

有关 S3 SSE-KMS 配置的更多信息，请参阅[指定 KMS 加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/specifying-kms-encryption.html)。

**注意**  
必须禁用存储桶 ACL 才能使存储桶策略生效。有关更多信息，请参阅[禁用所有新存储桶的 ACL 并强制执行对象所有权](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ensure-object-ownership.html)。

## 设置 CloudWatch 日志目标
<a name="setup-cloudwatch-logs-destination"></a>

您可以按照以下步骤设置用于登录 Amazon Bedrock 的 Amazon Log CloudWatch s 目标：

1. 创建 CloudWatch 将在其中发布日志的日志组。

1. 创建具有以下 CloudWatch 日志权限的 IAM 角色。

   **可信实体**：

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Service": "bedrock.amazonaws.com"
               },
               "Action": "sts:AssumeRole",
               "Condition": {
                   "StringEquals": {
                       "aws:SourceAccount": "{{123456789012}}"
                   },
                   "ArnLike": {
                       "aws:SourceArn": "arn:aws:bedrock:{{us-east-1}}:{{123456789012}}:*"
                   }
               }
           }
       ]
   }
   ```

------

   **角色策略**：

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "logs:CreateLogStream",
                   "logs:PutLogEvents"
               ],
               "Resource": "arn:aws:logs:{{us-east-1}}:{{123456789012}}:log-group:{{logGroupName}}:log-stream:aws/bedrock/modelinvocations"
           }
       ]
   }
   ```

------

有关为 CloudWatch 日志设置 SSE 的更多信息，请参阅[使用加密日志中的 CloudWatch 日志数据 AWS Key Management Service](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html)。

## 使用控制台启用模型调用日志记录
<a name="model-invocation-logging-console"></a>

**启用模型调用日志**

使用有权使用 Amazon Bedrock 控制台的 IAM 身份登录。 AWS 管理控制台 然后，打开 Amazon Bedrock 控制台，网址为[https://console.aws.amazon.com/bedrock](https://console.aws.amazon.com/bedrock)。

1. 在左侧导航窗格中，选择 “**设置”**。

1. 在**模型调用日志**页面中，选择**模型调用**日志。将出现用于记录的其他配置设置。

1. 选择要发布到日志的数据请求和响应的模式。您可以选择以下输出选项的任意组合：
   + 文本
   + Image
   + 嵌入
   + 视频
**注意**  
将记录支持您选择的模态（无论是输入还是输出）*的所有*模型的数据。例如，如果您选择 “**图像**”，则将记录所有支持图像输入、图像输出或两者兼而有之的模型调用。

1. 选择发布日志的位置：
   + 仅限 Amazon S3
   + CloudWatch 仅限日志
   + Amazon S3 和 CloudWatch 日志 

**日志记录目标**  
调用 CloudWatch 日志以及小型输入和输出数据支持 Amazon S3 和日志目标。对于大型输入和输出数据或二进制图像输出，仅支持 Amazon S3。以下详细信息总结了目标位置的数据表示形式。
+ **S3 目标** — Gzip 类型的 JSON 文件（每个文件都包含一批调用日志记录）被传输到指定的 S3 存储桶。与 CloudWatch 日志事件类似，每条记录都将包含调用元数据以及大小不超过 100 KB 的输入和输出 JSON 正文。大于 100 KB 的二进制数据或 JSON 正文将作为单个对象上传到相应数据前缀下的指定 Amazon S3 存储桶中。可以使用 Amazon S3 Select 和 Amazon Athena 对数据进行查询，也可以使用 AWS Glue对 ETL 进行编目。数据可以加载到 OpenSearch 服务中，也可以由任何 Amazon EventBridge 目标进行处理。
+ **CloudWatch 日志目标**-JSON 调用日志事件被传送到日志中的 CloudWatch 指定日志组。日志事件包含调用元数据以及大小不超过 100 KB 的输入和输出 JSON 正文。如果提供了用于传输大量数据的 Amazon S3 位置，则大于 100 KB 的二进制数据或 JSON 正文将改为上传到数据前缀下的 Amazon S3 存储桶。可以使用 Logs Insights 查询数据，也可以使用 CloudWatch 日志进一步实时流式传输到各种服务。 CloudWatch 

## 使用 API 启用模型调用日志记录
<a name="using-apis-logging"></a>

可以使用以下 API 配置模型调用日志记录：
+ [PutModelInvocationLoggingConfiguration](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_PutModelInvocationLoggingConfiguration.html)
+ [GetModelInvocationLoggingConfiguration](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_GetModelInvocationLoggingConfiguration.html)
+ [DeleteModelInvocationLoggingConfiguration](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_DeleteModelInvocationLoggingConfiguration.html)

## 日志条目格式
<a name="model-invocation-log-format"></a>

每个调用日志条目都是一个 JSON 对象，其结构如下。 CloudWatch 日志和 Amazon S3 目标的格式相同。

```
{
    "schemaType": "ModelInvocationLog",
    "schemaVersion": "1.0",
    "timestamp": "2024-01-15T12:00:00Z",
    "accountId": "123456789012",
    "region": "us-east-1",
    "requestId": "abcd1234-5678-efgh-ijkl-mnopqrstuvwx",
    "operation": "Converse",
    "modelId": "anthropic.claude-sonnet-4-20250514-v1:0",
    "requestMetadata": {
        "team": "orchestrator",
        "environment": "production"
    },
    "input": {
        "inputContentType": "application/json",
        "inputBodyJson": { },
        "inputTokenCount": 25
    },
    "output": {
        "outputContentType": "application/json",
        "outputBodyJson": { },
        "outputTokenCount": 150
    }
}
```

下表描述了日志条目中的字段：


****  

| 字段 | 说明 | 
| --- | --- | 
| schemaType | 日志记录的类型。始终为 ModelInvocationLog。 | 
| schemaVersion | 日志架构的版本。 | 
| timestamp | 进行调用的时间，采用 ISO 8601 格式。 | 
| accountId | 进行调用的 AWS 账户 ID。 | 
| region | 进行调用 AWS 区域 的地方。 | 
| requestId | 请求的唯一标识符。 | 
| operation | API 操作调用（例如，Converse，InvokeModel）。 | 
| modelId | 用于调用的模型 ID 或推理配置文件 ID。 | 
| requestMetadata | 由调用者提供的键值标签组成的可选 JSON 对象。仅在调用方提供请求元数据时显示。有关更多信息，请参阅 [Per-request 元数据标记](cost-mgmt-request-metadata.md)。 | 
| input.inputBodyJson | 发送给模型的请求正文（最大 100 KB）。较大的主体作为单独的对象存储在 Amazon S3 中。 | 
| input.inputTokenCount | 请求中输入令牌的数量。 | 
| output.outputBodyJson | 来自模型的响应正文（最大 100 KB）。较大的主体作为单独的对象存储在 Amazon S3 中。 | 
| output.outputTokenCount | 响应中输出令牌的数量。 | 

**注意**  
大于 100 KB 的二进制数据（例如图像）和 JSON 正文不以内联方式包含在日志条目中。相反，它们作为单独的对象存储在数据前缀下的 Amazon S3 存储桶中，并且日志条目包含对 Amazon S3 位置的引用。