

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

# 使用 CloudWatch 日志监控知识库
<a name="knowledge-bases-logging"></a>

Amazon Bedrock 支持使用监控系统来帮助您了解知识库中任意数据摄取作业的执行情况。以下各节介绍如何使用和 CloudWatch API 为 Amazon Bedrock 知识库启用 AWS 管理控制台 和配置日志系统。您可以利用此日志记录系统了解知识库资源的数据摄取情况。

## 使用控制台进行知识库日志记录
<a name="knowledge-bases-logging-console"></a>

使用 AWS 管理控制台为 Amazon Bedrock 知识库启用日志记录：

1. **创建知识库**：使用 For Amazon Bedrock [创建新的知识库](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-create.html)。 AWS 管理控制台 

1. **添加日志传输选项**：创建知识库后，编辑或更新您的知识库以添加日志传输选项。
**注意**  
创建带结构化数据存储的知识库或为 Kendra GenAI 索引创建知识库时，不支持日志传输。

   **配置日志传输详细信息**：输入日志传输的详细信息，包括：
   + 日志目的地（ CloudWatch 日志、亚马逊 S3、亚马逊 Data Firehose）
   + （如果使用 CloudWatch Logs 作为记录目标）日志组名称
   + （如果使用 Amazon S3 作为日志记录目标）存储桶名称
   + （如果使用 Amazon Data Firehose 作为日志记录目标）Firehose 流

1. **包含访问权限**：登录控制台的用户必须具有将收集的日志写入所选目标的必要权限。

   以下示例 IAM 策略可以附加到登录控制台的用户，以便在使用 CloudWatch 日志时授予必要的权限

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "logs:CreateDelivery",
               "Resource": [
                   "arn:aws:logs:{{us-east-1}}:{{123456789012}}:delivery-source:*",
                   "arn:aws:logs:{{us-east-1}}:{{123456789012}}:delivery:*",
                   "arn:aws:logs:{{us-east-1}}:{{123456789012}}:delivery-destination:*"
               ]
           }
       ]
   }
   ```

------

1. **确认传输状态**：在控制台中验证日志传输状态是否为“正在传输中”。

## 知识库使用 CloudWatch API 进行日志记录
<a name="knowledge-bases-logging-cloudwatch-api"></a>

要使用 CloudWatch API 启用 Amazon Bedrock 知识库的日志记录，请执行以下操作：

1. **获取知识库的 ARN**：使用 Amazon Bedrock API 或 Amazon Bedrock 控制台[创建知识库](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-create.html)后，获取知识库的 Amazon 资源名称。您可以通过调用 [GetKnowledgeBase](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_GetKnowledgeBase.html)API 获取 Amazon 资源名称。知识库 Amazon 资源名称采用以下格式：{{arn:aws:bedrock:your-region:your-account-id:knowledge-base/knowledge-base-id}}

1. **致电 `PutDeliverySource`**：使用 Amazon CloudWatch 提供的 [PutDeliverySource](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliverySource.html)API 为知识库创建交付来源。将知识库 Amazon 资源名称作为 `resourceArn` 进行传递。`logType` 将指定 `APPLICATION_LOGS` 作为所收集日志的类型。`APPLICATION_LOGS` 将在执行摄取作业期间跟踪文件的当前状态。

   ```
   {
       "logType": "APPLICATION_LOGS",
       "name": "my-knowledge-base-delivery-source",
       "resourceArn": "arn:aws:bedrock:your-region:your-account-id:knowledge-base/knowledge_base_id"
   }
   ```

1. **调**用`PutDeliveryDestination`：使用 Amazon CloudWatch 提供的 [PutDeliveryDestination](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliveryDestination.html)API 配置日志的存储位置。您可以选择 CloudWatch 日志、Amazon S3 或 Amazon Data Firehose 作为存储日志的目标。您必须为用来存储日志的其中一个目标选项指定 Amazon 资源名称。您可以将日志的 `outputFormat` 选为以下项之一：`json`、`plain`、`w3c`、`raw`、`parquet`。下面举例说明了如何将日志配置为以 JSON 格式存储在 Amazon S3 存储桶中。

   ```
   {
      "deliveryDestinationConfiguration": { 
         "destinationResourceArn": "arn:aws:s3:::bucket-name"
      },
      "name": "string",
      "outputFormat": "json",
      "tags": { 
         "key" : "value" 
      }
   }
   ```

   请注意，如果您要跨账户传送日志，则必须使用 `PutDeliveryDestinationPolicy` API 为目标账户分配 AWS Identity and Access Management (IAM) 策略。IAM 策略支持将日志从一个账户传输到另一个账户。

1. **调**用`CreateDelivery`：使用 [CreateDelivery](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateDelivery.html)API 调用将交付源链接到您在之前的步骤中创建的目的地。此 API 操作会将传输源与最终目标关联起来。

   ```
   {
      "deliveryDestinationArn": "string",
      "deliverySourceName": "string",
      "tags": { 
         "string" : "string" 
      }
   }
   ```

**注意**  
如果你想使用 CloudFormation，你可以使用以下内容：  
[Delivery](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-delivery.html)
[DeliveryDestination](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-deliverydestination.html)
[DeliverySource](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-deliverysource.html)
`ResourceArn` 是 `KnowledgeBaseARN`，`LogType` 必须是作为支持的日志类型的 `APPLICATION_LOGS`。

## 支持的日志类型
<a name="knowledge-bases-logging-log-types"></a>

Amazon Bedrock 知识库支持以下日志类型：
+ `APPLICATION_LOGS`：用于在执行数据摄取作业期间跟踪特定文件当前状态的日志。

## 用户权限和限制
<a name="knowledge-bases-logging-permissions-other-requirements"></a>

要为 Amazon Bedrock 知识库启用日志记录，登录控制台的用户账户需要具有以下权限：

1. `bedrock:AllowVendedLogDeliveryForResource` – 允许为知识库资源传输日志需要此权限。

   您可以查看包含特定日志记录目标所需的所有权限的 IAM role/permissions 策略示例。请参阅[不同传送目的地的销售日志权限](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-vended-logs-permissions-V2)，并按照您的日志目标的 IAM role/permission 策略示例进行操作，包括允许更新您的特定日志目标资源（无论是 CloudWatch 日志、Amazon S3 还是 Amazon Data Firehose）。

您还可以在日志[服务配额文档中查看进行与 CloudWatch 日志传送相关的 API 调用是否有任何配额](https://docs.aws.amazon.com/general/latest/gr/cwl_region.html)限制。CloudWatch 配额限制设置了您可以调用 API 或创建资源的最大次数。如果超出限制，则会导致 `ServiceQuotaExceededException` 错误。

## 知识库日志示例
<a name="knowledge-bases-logging-example-logs"></a>

Amazon Bedrock 知识库有数据摄取级别日志和资源级别日志。

下面是数据摄取作业日志的一个示例。

```
{
    "event_timestamp": 1718683433639,
    "event": {
        "ingestion_job_id": "<IngestionJobId>",
        "data_source_id": "<IngestionJobId>",
        "ingestion_job_status": "INGESTION_JOB_STARTED" | "STOPPED" | "COMPLETE" | "FAILED" | "CRAWLING_COMPLETED"
        "knowledge_base_arn": "arn:aws:bedrock:<region>:<accountId>:knowledge-base/<KnowledgeBaseId>",
        "resource_statistics": {
            "number_of_resources_updated": int,
            "number_of_resources_ingested": int,
            "number_of_resources_scheduled_for_update": int,
            "number_of_resources_scheduled_for_ingestion": int,
            "number_of_resources_scheduled_for_metadata_update": int,
            "number_of_resources_deleted": int,
            "number_of_resources_with_metadata_updated": int,
            "number_of_resources_failed": int,
            "number_of_resources_scheduled_for_deletion": int
        }
    },
    "event_version": "1.0",
    "event_type": "StartIngestionJob.StatusChanged",
    "level": "INFO"
}
```

下面是资源级别日志的一个示例。

```
{
    "event_timestamp": 1718677342332,
    "event": {
        "ingestion_job_id": "<IngestionJobId>",
        "data_source_id": "<IngestionJobId>",
        "knowledge_base_arn": "arn:aws:bedrock:<region>:<accountId>:knowledge-base/<KnowledgeBaseId>",
        "document_location": {
            "type": "S3",
            "s3_location": {
                "uri": "s3:/<BucketName>/<ObjectKey>"
            }
        },
        "status": "<ResourceStatus>"
        "status_reasons": String[],
        "chunk_statistics": {
            "ignored": int,
            "created": int,
            "deleted": int,
            "metadata_updated": int,
            "failed_to_create": int,
            "failed_to_delete": int,
            "failed_to_update_metadata": int  
        },
    },
    "event_version": "1.0",
    "event_type": "StartIngestionJob.ResourceStatusChanged",
    "level": "INFO" | "WARN" | "ERROR"
}
```

资源的 `status` 可以是以下项之一：
+ `SCHEDULED_FOR_INGESTION`、`SCHEDULED_FOR_DELETION`、`SCHEDULED_FOR_UPDATE`、`SCHEDULED_FOR_METADATA_UPDATE`：这些状态值表示，在计算知识库的当前状态与数据来源中所做的更改的差异之后，会安排处理该资源。
+ `RESOURCE_IGNORED`：此状态值表示在处理过程中忽略了该资源，原因在 `status_reasons` 属性内有详细说明。
+ `EMBEDDING_STARTED` 和 `EMBEDDING_COMPLETED`：这些状态值表示资源的向量嵌入何时开始和完成。
+ `INDEXING_STARTED` 和 `INDEXING_COMPLETED`：这些状态值表示资源的索引何时开始和完成。
+ `DELETION_STARTED` 和 `DELETION_COMPLETED`：这些状态值表示资源的删除何时开始和完成。
+ `METADATA_UPDATE_STARTED` 和 `METADATA_UPDATE_COMPLETED`：这些状态值表示资源的元数据更新何时开始和完成。
+ `EMBEDDING_FAILED`、`INDEXING_FAILED`、`DELETION_FAILED` 和 `METADATA_UPDATE_FAILED`：这些状态值表示资源处理失败，原因在 `status_reasons` 属性内有详细说明。
+ `INDEXED`、`DELETED`、`PARTIALLY_INDEXED`、`METADATA_PARTIALLY_INDEXED`、`FAILED`：文档处理完后，系统会发布一个日志，其中包含文件的最终状态以及 `chunk_statistics` 属性内的处理情况的摘要。

## 用于调试知识库日志的常见查询示例
<a name="knowledge-bases-logging-example-queries"></a>

您可以使用查询与日志进行交互。例如，您可以在摄取文档或数据时查询事件状态为 `RESOURCE_IGNORED` 的所有文档。

以下是一些可用于调试使用 Logs Insights 生成的 CloudWatch 日志的常见查询：
+ 查询为特定 S3 文档生成的所有日志。

  `filter event.document_location.s3_location.uri = "s3://<bucketName>/<objectKey>"`
+ 查询在数据摄取作业期间忽略的所有文档。

  `filter event.status = "RESOURCE_IGNORED"`
+ 查询向量嵌入文档时出现的所有异常。

  `filter event.status = "EMBEDDING_FAILED"`
+ 查询将文档索引到向量数据库时出现的所有异常。

  `filter event.status = "INDEXING_FAILED"`
+ 查询从向量数据库中删除文档索引时出现的所有异常。

  `filter event.status = "DELETION_FAILED"`
+ 查询在向量数据库中更新文档元数据时出现的所有异常。

  `filter event.status = "DELETION_FAILED"`
+ 查询在执行数据摄取作业期间出现的所有异常。

  `filter level = "ERROR" or level = "WARN"`