View a markdown version of this page

使用 CloudWatch 日志监控知识库 - Amazon Bedrock

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

使用 CloudWatch 日志监控知识库

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

先决条件

在启用 Amazon Bedrock 知识库的日志记录之前,请确认以下内容:

  • 登录控制台的用户账户具有bedrock:AllowVendedLogDeliveryForResource权限。此权限允许为知识库资源传送日志。有关包含所有必需权限的 IAM 策略示例,请参阅不同交付目的地供应商日志权限。遵循您的日志目标的 IAM role/permission 策略示例,包括允许更新您的特定日志目标资源(无论是 CloudWatch 日志、Amazon S3 还是 Amazon Data Firehose)。

  • 检查与 CloudWatch 日志传送相关的 API 调用是否存在配额限制。有关更多信息,请参阅CloudWatch 日志服务配额文档。如果超过限制,则会导致ServiceQuotaExceededException错误。

支持的日志类型

Amazon Bedrock 知识库支持以下日志类型:

  • APPLICATION_LOGS:用于在执行数据摄取作业期间跟踪特定文件当前状态的日志。

启用 Amazon Bedrock 知识库(控制台)的日志记录

使用控制台启用日志记录
  1. 创建知识库。有关说明,请参阅创建知识库

  2. 编辑您的知识库以添加日志传送选项。

    注意

    创建带结构化数据存储的知识库或为 Kendra GenAI 索引创建知识库时,不支持日志传输。

  3. 配置日志传输详细信息,包括:

    • 日志目的地(CloudWatch 日志、亚马逊 S3 或 Amazon Data Firehose)

    • (如果使用 CloudWatch 日志)日志组名称

    • (如果使用 Amazon S3)存储桶名称

    • (如果使用亚马逊 Data Firehose)Firehos e 直播

  4. 将 IAM 策略附加到您的账户,以授予向目标写入日志的权限。

    以下示例 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:*" ] } ] }
  5. 验证日志传输状态是否显示控制台中的交付处于活动状态。

启用亚马逊 Bedrock 知识库 (CloudWatch API) 的日志记录

使用 CloudWatch API 启用日志记录
  1. 使用亚马逊 Bedrock API 或亚马逊基岩控制台创建知识库。有关说明,请参阅创建知识库

  2. 获取知识库的 ARN。调用 GetKnowledgeBase API 来检索 ARN。知识库 ARN 遵循以下格式:arn:aws:bedrock:your-region:your-account-id:knowledge-base/knowledge-base-id

  3. 调用 PutDeliverySource API 为知识库创建交付源。将知识库 ARN 作为传递。resourceArn设置logTypeAPPLICATION_LOGS,用于跟踪摄取任务期间文件的状态。

    { "logType": "APPLICATION_LOGS", "name": "my-knowledge-base-delivery-source", "resourceArn": "arn:aws:bedrock:your-region:your-account-id:knowledge-base/knowledge_base_id" }
  4. 调用 PutDeliveryDestination API 来配置日志的存储位置。

    1. 选择 CloudWatch Logs、Amazon S3 或 Amazon Data Firehose 作为目标。

    2. 指定所选目的地的 ARN。

    3. 设置outputFormat为以下其中一项:jsonplainw3crawparquet

    以下示例以 JSON 格式将日志存储在 Amazon S3 存储桶中:

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

    要跨账户传输日志,请使用 PutDeliveryDestinationPolicy API 为目标账户分配 IAM 策略。该政策允许从一个账户向另一个账户汇款。

  5. 调用 CreateDelivery API 将传送源链接到目的地。这会将传送源与最终目的地相关联。

    { "deliveryDestinationArn": "string", "deliverySourceName": "string", "tags": { "string" : "string" } }
注意

如果你想使用 CloudFormation,你可以使用以下内容:

ResourceArnKnowledgeBaseARNLogType 必须是作为支持的日志类型的 APPLICATION_LOGS

知识库日志示例

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_INGESTIONSCHEDULED_FOR_DELETIONSCHEDULED_FOR_UPDATESCHEDULED_FOR_METADATA_UPDATE:这些状态值表示,在计算知识库的当前状态与数据来源中所做的更改的差异之后,会安排处理该资源。

  • RESOURCE_IGNORED:此状态值表示在处理过程中忽略了该资源,原因在 status_reasons 属性内有详细说明。

  • EMBEDDING_STARTEDEMBEDDING_COMPLETED:这些状态值表示资源的向量嵌入何时开始和完成。

  • INDEXING_STARTEDINDEXING_COMPLETED:这些状态值表示资源的索引何时开始和完成。

  • DELETION_STARTEDDELETION_COMPLETED:这些状态值表示资源的删除何时开始和完成。

  • METADATA_UPDATE_STARTEDMETADATA_UPDATE_COMPLETED:这些状态值表示资源的元数据更新何时开始和完成。

  • EMBEDDING_FAILEDINDEXING_FAILEDDELETION_FAILEDMETADATA_UPDATE_FAILED:这些状态值表示资源处理失败,原因在 status_reasons 属性内有详细说明。

  • INDEXEDDELETEDPARTIALLY_INDEXEDMETADATA_PARTIALLY_INDEXEDFAILED:文档处理完后,系统会发布一个日志,其中包含文件的最终状态以及 chunk_statistics 属性内的处理情况的摘要。

  • CRAWLEDRESOURCE_CRAWLEDRESOURCE_FETCHEDCRAWLING_COMPLETEDCONNECTOR_CRAWLING_COMPLETED:这些状态值表示资源是从数据源连接器抓取或提取的。

  • PENDINGSTARTINGIN_PROGRESS:这些状态值表示资源正在排队或正在处理中。

  • DELETE_IN_PROGRESSDELETING:这些状态值表示资源正在删除中。

  • INGESTION_JOB_STARTEDINGESTION_JOB_FAILED:这些状态值表示资源整体摄取任务的开始或失败。

  • GRAPH_ENTITY_EXTRACTION_STARTEDGRAPH_ENTITY_EXTRACTION_COMPLETEDGRAPH_ENTITY_EXTRACTION_FAILED:这些状态值表示使用图形数据存储的知识库的图形实体提取进度。

用于调试知识库日志的常见查询示例

您可以使用查询与日志进行交互。例如,您可以在摄取文档或数据时查询事件状态为 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"