View a markdown version of this page

使用 CloudWatch Logs 監控知識庫 - Amazon Bedrock

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 CloudWatch Logs 監控知識庫

Amazon Bedrock 支援監控系統,協助您了解針對知識庫執行的任何資料擷取任務。下列各節說明如何使用 和 CloudWatch API 啟用 AWS 管理主控台 和設定 Amazon Bedrock 知識庫的記錄系統。您可以使用此記錄系統,深入了解知識庫資源的資料擷取。

先決條件

啟用 Amazon Bedrock 知識庫的記錄之前,請確認下列事項:

  • 登入主控台的使用者帳戶具有 bedrock:AllowVendedLogDeliveryForResource許可。此許可允許交付知識庫資源的日誌。如需具有所有必要許可的範例 IAM 政策,請參閱不同交付目的地的已終止日誌許可。遵循記錄目的地的 IAM 角色/許可政策範例,包括允許更新特定記錄目的地資源 (無論是 CloudWatch Logs、Amazon S3 或 Amazon Data Firehose)。

  • 檢查 CloudWatch Logs 交付相關 API 呼叫是否有配額限制。如需詳細資訊,請參閱 CloudWatch Logs 服務配額文件。如果您超過限制,則會導致ServiceQuotaExceededException錯誤。

支援的日誌類型

Amazon Bedrock 知識庫支援下列日誌類型:

  • APPLICATION_LOGS:在資料擷取任務期間追蹤特定檔案目前狀態的日誌。

啟用 Amazon Bedrock 知識庫的記錄 (主控台)

使用主控台啟用記錄
  1. 建立知識庫。如需說明,請參閱建立知識庫

  2. 編輯您的知識庫以新增日誌交付選項。

    注意

    使用結構化資料存放區或 Kendra GenAI 指數建立知識庫時,不支援日誌交付。

  3. 設定日誌交付詳細資訊,包括:

    • 記錄目的地 (CloudWatch Logs、Amazon S3 或 Amazon Data Firehose)

    • (如果使用 CloudWatch Logs) 日誌群組名稱

    • (如果使用 Amazon S3) 儲存貯體名稱

    • (如果使用 Amazon Data Firehose) Firehose 串流

  4. 將 IAM 政策連接至您的帳戶,以授予將日誌寫入目的地的許可。

    下列範例 IAM 政策會在使用 CloudWatch Logs 時授予必要的許可:

    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. 確認日誌交付狀態在主控台中顯示交付作用中

啟用 Amazon Bedrock 知識庫的記錄 (CloudWatch API)

使用 CloudWatch API 啟用記錄
  1. 使用 Amazon Bedrock API 或 Amazon Bedrock 主控台建立知識庫。如需說明,請參閱建立知識庫

  2. 取得知識庫的 ARN。呼叫 GetKnowledgeBase API 以擷取 ARN。知識庫 ARN 遵循以下格式:arn:aws:bedrock:your-region:your-account-id:knowledge-base/knowledge-base-id

  3. 呼叫 PutDeliverySource API 來建立知識庫的交付來源。將知識庫 ARN 做為 傳遞resourceArnlogType 設定為 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" }
  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,您可以使用下列項目:

ResourceArnKnowledgeBaseARN,且 LogType 必須是 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 的所有文件。

以下是一些常見的查詢,可用於偵錯使用 CloudWatch Logs Insights 產生的日誌:

  • 查詢針對特定 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"