

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

# 使用 CloudWatch Logs 監控知識庫
<a name="knowledge-bases-logging"></a>

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

## 使用主控台記錄知識庫
<a name="knowledge-bases-logging-console"></a>

若要使用 AWS 管理主控台啟用 Amazon Bedrock 知識庫的記錄：

1. **建立知識庫**：使用 AWS 管理主控台 適用於 Amazon Bedrock 的 [建立新的知識庫](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-create.html)。

1. **新增日誌交付選項**：建立知識庫之後，編輯或更新知識庫以新增日誌交付選項。
**注意**  
使用結構化資料存放區或 Kendra GenAI 指數建立知識庫時，不支援日誌交付。

   **設定日誌交付詳細資訊**：輸入日誌交付的詳細資訊，包括：
   + 記錄目的地 (CloudWatch Logs、Amazon S3、Amazon Data Firehose)
   + (如果使用 CloudWatch Logs 作為記錄目的地) 日誌群組名稱
   + (如果使用 Amazon S3 作為記錄目的地) 儲存貯體名稱
   + (如果使用 Amazon Data Firehose 作為記錄目的地) Firehose 串流

1. **包含存取許可**：登入主控台的使用者必須擁有必要的許可，才能將收集到的日誌寫入所選的目的地。

   下列範例 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:*"
               ]
           }
       ]
   }
   ```

------

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 Resource Name。您可以呼叫 [GetKnowledgeBase](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_GetKnowledgeBase.html) API 來取得 Amazon Resource Name。知識庫 Amazon Resource Name 遵循以下格式：{{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 Resource Name 作為 `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 Logs、Amazon S3 或 Amazon Data Firehose 作為儲存日誌的目的地。您必須指定日誌存放位置其中一個目的地選項的 Amazon Resource Name。您可以選擇日誌的 `outputFormat` 作為下列其中一項：`json`、`plain`、`w3c`、`raw`、`parquet`。以下是將日誌設定為以 Amazon S3 儲存貯體和 JSON 格式存放的範例。

   ```
   {
      "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 角色/許可政策，其中包含特定記錄目的地的所有必要許可。請參閱[不同交付目的地的付費日誌許可](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-vended-logs-permissions-V2)，並遵循記錄目的地的 IAM 角色/許可政策範例，包括允許更新特定記錄目的地資源 (無論 CloudWatch Logs、Amazon S3 或 Amazon Data Firehose)。

您也可以在 [CloudWatch Logs 服務配額文件](https://docs.aws.amazon.com/general/latest/gr/cwl_region.html)中檢查 CloudWatch Logs 交付相關 API 呼叫是否有任何配額限制。配額限制會設定您可以呼叫 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` 的所有文件。

以下是一些常見的查詢，可用於偵錯使用 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"`