

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

# 使用即時存取日誌
<a name="real-time-logs"></a>

使用 CloudFront 即時存取日誌，您可以即時取得對分佈提出之請求的相關資訊 （日誌會在收到請求後的幾秒內交付）。您可以使用即時存取日誌，根據內容交付效能來監控、分析和採取行動。

CloudFront 即時存取日誌是可設定的。您可以選擇：
+ 即時日誌的*取樣率*，也就是您希望接收即時存取日誌記錄的請求百分比。
+ 您想要在日誌中接收的特定欄位。
+ 您想要接收即時日誌的特定快取行為 (路徑模式)。

CloudFront 即時存取日誌會交付至 Amazon Kinesis Data Streams 中您選擇的資料串流。您可以建立自己的 [Kinesis 資料串流取用者](https://docs.aws.amazon.com/streams/latest/dev/amazon-kinesis-consumers.html)，或使用 Amazon Data Firehose 將日誌資料傳送到 Amazon Simple Storage Service (Amazon S3)、Amazon Redshift、Amazon OpenSearch Service (OpenSearch Service) 或第三方日誌處理服務。

除了您使用 Kinesis Data Streams 所產生的費用之外，CloudFront 還會收取即時存取日誌的費用。如需定價的詳細資訊，請參閱 [Amazon CloudFront 定價](https://aws.amazon.com/cloudfront/pricing/) 和 [Amazon Kinesis Data Streams 定價](https://aws.amazon.com/kinesis/data-streams/pricing/)。

**重要**  
我們建議您使用日誌，了解內容請求的性質，而不是像完全考量所有請求。CloudFront 會盡力提供即時存取日誌。在實際處理請求之後，才可能長時間交付特定請求的日誌項目，在極少數的情況下，有可能完全不會交付日誌項目。從即時存取日誌中省略日誌項目時，即時存取日誌中的項目數量將與 AWS 帳單和用量報告中顯示的用量不符。

**Topics**
+ [建立和使用即時存取日誌組態](#create-real-time-log-config)
+ [了解即時存取日誌組態](#understand-real-time-log-config)
+ [建立 Kinesis Data Streams 取用者](#real-time-log-consumer-guidance)
+ [即時存取日誌疑難排解](#real-time-log-troubleshooting)

## 建立和使用即時存取日誌組態
<a name="create-real-time-log-config"></a>

若要即時取得對分佈提出之請求的相關資訊，您可以使用即時存取日誌組態。日誌會在收到請求後的幾秒內交付。您可以使用 AWS Command Line Interface (AWS CLI) 或 CloudFront API，在 CloudFront 主控台中建立即時存取日誌組態。

若要使用即時存取日誌組態，您可以將它連接到 CloudFront 分佈中的一或多個快取行為。

------
#### [ Console ]

**建立即時存取日誌組態**

1. 登入 AWS 管理主控台 ，並在位於 的 CloudFront **CloudFront 主控台中開啟日誌**頁面[https://console.aws.amazon.com/cloudfront/v4/home?#/logs](https://console.aws.amazon.com/cloudfront/v4/home?#/logs)。

1. 選擇**即時組態**索引標籤。

1. 選擇**建立組態**。

1. 請在**名稱**輸入組態名稱。

1. 請在**取樣率**輸入您希望接收日誌記錄的請求百分比。

1. 對於**欄位**，選擇要在即時存取日誌中接收的欄位。
   + 若要包含日誌的所有 [CMCD 欄位](#CMCD-real-time-logging-fields)，請選擇 **CMCD 所有鍵**。

1. 針對**端點**，選擇一或多個 Kinesis 資料串流來接收即時存取日誌。
**注意**  
CloudFront 即時存取日誌會交付至您在 Kinesis Data Streams 中指定的資料串流。若要讀取和分析即時存取日誌，您可以建置自己的 Kinesis 資料串流取用者。您也可以使用 Firehose 將日誌資料傳送至 Amazon S3、Amazon Redshift、Amazon OpenSearch Service 或第三方日誌處理服務。

1. 對於 **IAM 角色**，請選擇**建立新服務角色**或選擇現有角色。您必須具有建立 IAM 角色的許可。

1. （選用） 針對**分佈**，選擇要連接至即時存取日誌組態的 CloudFront 分佈和快取行為。

1. 選擇**建立組態**。

如果成功，主控台會顯示您剛建立之即時存取日誌組態的詳細資訊。

如需詳細資訊，請參閱[了解即時存取日誌組態](#understand-real-time-log-config)。

------
#### [ AWS CLI ]

若要使用 建立即時存取日誌組態 AWS CLI，請使用 **aws cloudfront create-realtime-log-config**命令。您可以使用輸入檔案來提供命令的輸入參數，而不是將每個個別參數指定為命令列輸入。

**建立即時存取日誌組態 （具有輸入檔案的 CLI)**

1. 使用下列命令建立一個名為 `rtl-config.yaml` 的檔案，其中包含 **create-realtime-log-config** 命令的所有輸入參數。

   ```
   aws cloudfront create-realtime-log-config --generate-cli-skeleton yaml-input > rtl-config.yaml
   ```

1. 開啟您剛才建立且命名為 `rtl-config.yaml` 的檔案。編輯 檔案以指定您想要的即時存取日誌組態設定，然後儲存檔案。注意下列事項：
   + 對於 `StreamType`，唯一有效的值為 `Kinesis`。

   如需即時長組態設定的詳細資訊，請參閱[了解即時存取日誌組態](#understand-real-time-log-config)。

1. 使用以下命令，使用 `rtl-config.yaml` 檔案的輸入參數建立即時存取日誌組態。

   ```
   aws cloudfront create-realtime-log-config --cli-input-yaml file://rtl-config.yaml
   ```

如果成功，命令的輸出會顯示您剛建立之即時存取日誌組態的詳細資訊。

**將即時存取日誌組態連接至現有分佈 （具有輸入檔案的 CLI)**

1. 使用下列命令來儲存您想要更新之 CloudFront 分佈的分佈組態。將 *distribution\$1ID* 取代為分佈的 ID。

   ```
   aws cloudfront get-distribution-config --id distribution_ID --output yaml > dist-config.yaml
   ```

1. 開啟您剛才建立且命名為 `dist-config.yaml` 的檔案。編輯 檔案，對您要更新的每個快取行為進行下列變更，以使用即時存取日誌組態。
   + 在快取行為中，新增名為 `RealtimeLogConfigArn` 的欄位。對於欄位的值，請使用您要連接到此快取行為的即時存取日誌組態的 ARN。
   + 將 `ETag` 欄位重新命名為 `IfMatch`，但不要變更欄位的值。

   完成後儲存檔案。

1. 使用下列命令來更新分佈，以使用即時存取日誌組態。將 *distribution\$1ID* 取代為分佈的 ID。

   ```
   aws cloudfront update-distribution --id distribution_ID --cli-input-yaml file://dist-config.yaml
   ```

如果成功，命令的輸出會顯示您剛才更新的分佈詳細資料。

------
#### [ API ]

若要使用 CloudFront API 建立即時存取日誌組態，請使用 [CreateRealtimeLogConfig](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateRealtimeLogConfig.html) API 操作。如需您在此 API 呼叫中指定參數的詳細資訊，請參閱 [了解即時存取日誌組態](#understand-real-time-log-config)和 AWS SDK 或其他 API 用戶端的 API 參考文件。

建立即時存取日誌組態之後，您可以使用下列其中一個 API 操作將其連接至快取行為：
+ 若要將它附加到現有分佈中的快取行為，請使用 [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html)。
+ 若要將它附加到新分佈中的快取行為，請使用 [CreateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistribution.html)。

對於這兩個 API 操作，請在快取行為的 `RealtimeLogConfigArn` 欄位中提供即時存取日誌組態的 ARN。如需您在這些 API 呼叫中指定之其他欄位的詳細資訊，請參閱 [所有分佈設定參考](distribution-web-values-specify.md)和 AWS SDK 或其他 API 用戶端的 API 參考文件。

------

## 了解即時存取日誌組態
<a name="understand-real-time-log-config"></a>

若要使用 CloudFront 即時存取日誌，請先建立即時存取日誌組態。即時存取日誌組態包含您要接收哪些日誌欄位、日誌記錄*取樣率*，以及您要交付日誌之 Kinesis 資料串流的相關資訊。

具體而言，即時存取日誌組態包含下列設定：

**Contents**
+ [名稱](#real-time-logs-name)
+ [抽樣頻率](#real-time-logs-sampling-rate)
+ [欄位](#real-time-logs-fields)
+ [端點 (Kinesis Data Streams)](#real-time-logs-endpoint)
+ [IAM 角色](#real-time-logs-IAM)

### 名稱
<a name="real-time-logs-name"></a>

識別即時存取日誌組態的名稱。

### 抽樣頻率
<a name="real-time-logs-sampling-rate"></a>

取樣率是介於 1 到 100 之間的整數 (含)，可決定以即時日誌形式傳送至 Kinesis Data Streams 的檢視器請求百分比。若要在即時存取日誌中包含每個檢視器請求，請指定 100 的取樣頻率。您可以選擇較低的取樣頻率以降低成本，同時仍然在即時存取日誌中收到代表性的請求資料樣本。

### 欄位
<a name="real-time-logs-fields"></a>

每個即時存取日誌記錄中包含的欄位清單。每個日誌記錄最多包含 40 個欄位，而且您可以選擇接收所有可用欄位，或只接收監視和分析效能所需的欄位。

下列清單包含每個欄位名稱以及該欄位中資訊的描述。這些欄位會依它們交付給 Kinesis Data Streams 日誌中顯示的順序列出。

欄位 46-63 是[常見的媒體用戶端資料 (CMCD)](#CMCD-real-time-logging-fields)，可由媒體播放器用戶端隨每個請求傳送至 CDN。您可以使用此資料來瞭解每個請求，例如媒體類型 (音訊、影片)、播放速率和串流長度。這些欄位只有在傳送到 CloudFront 時，才會出現在您的即時存取日誌中。

1. **`timestamp`**

   邊緣伺服器完成回應請求的日期和時間。

1. **`c-ip`**

   檢視器的 IP 位址，該檢視器已執行請求，例如 `192.0.2.183` 或 `2001:0db8:85a3::8a2e:0370:7334`。如果檢視器使用 HTTP 代理或負載平衡器傳送請求，此欄位值則為代理或負載平衡器的 IP 位址。另請參閱 `x-forwarded-for` 欄位。

1. **`s-ip`**

   提供請求的 CloudFront 伺服器 IP 位址，例如 `192.0.2.183` 或 `2001:0db8:85a3::8a2e:0370:7334`。

1. **`time-to-first-byte`**

   接收請求與寫入回應的第一個位元組之間的秒數 (如伺服器上所測量)。

1. **`sc-status`**

   伺服器回應的 HTTP 狀態碼 (例如 `200`)。

1. **`sc-bytes`**

   回應請求時伺服器提供給檢視器的總位元數，包括標頭。對於 WebSocket 與 gRPC 連線，這是透過連線從伺服器傳送到用戶端的位元組總數。

1. **`cs-method`**

   從檢視器接收到的 HTTP 請求方法。

1. **`cs-protocol`**

   檢視器請求的通訊協定 (`http`、`https`、`grpcs`、`ws` 或 `wss`)。

1. **`cs-host`**

   包含在該請求 `Host` 標頭的檢視器值。如果您在物件 URL 中使用 CloudFront 網域名稱 (例如 d111111abcdef8.cloudfront.net)，則此欄位會包含該網域名稱。如果您使用物件 URL 中的備用網域名稱 (CNAME)，例如 www.example.com，則此欄位包含此備用網域名稱。

1. **`cs-uri-stem`**

   整個請求 URL，包括查詢字串 (如果存在)，但不包括網域名稱。例如 `/images/cat.jpg?mobile=true`。
**注意**  
在[標準日誌](AccessLogs.md)中，該 `cs-uri-stem` 值不包括查詢字串。

1. **`cs-bytes`**

   檢視器包含在請求中的資料位元組總數，包括標頭。對於 WebSocket 與 gRPC 連線，這是連線時從用戶端傳送到伺服器的位元組總數。

1. **`x-edge-location`**

   提供請求的節點。一個三字母代碼和任意指派的數字會辨識每個節點，例如 DFW3。三字母代碼通常會對應節點所在地理位置附近機場的國際航空運輸協會 (IATA) 機場代碼。(未來這些縮寫可能會改變。)

1. **`x-edge-request-id`**

   可獨特識別請求的不透明字串。CloudFront 也會在 `x-amz-cf-id` 回應標頭中傳送此字串。

1. **`x-host-header`**

   CloudFront 分發的網域名稱(例如，d111111abcdef8.cloudfront.net)。

1. **`time-taken`**

   從伺服器收到檢視者請求，到伺服器將回應的最後一個位元組寫入輸出佇列的秒數 (以千分之一秒為單位，例如 0.082)，這會在伺服器上測量。從檢視器來看，取得完整回應的總時間會比該值來的長，因為網路延遲和 TCP 緩衝。

1. **`cs-protocol-version`**

   檢視器在請求中指定的 HTTP 版本。可能的值包括 `HTTP/0.9`、`HTTP/1.0`、`HTTP/1.1`、`HTTP/2.0` 及 `HTTP/3.0`。

1. **`c-ip-version`**

   請求的 IP 版本 (IPv4 或 IPv6)。

1. **`cs-user-agent`**

   請求中的 `User-Agent` 標頭值。識別請求來源的 `User-Agent` 標頭，例如提交請求的裝置與瀏覽器類型，或如果請求來自搜尋引擎，則識別是哪一個搜尋引擎。

1. **`cs-referer`**

   請求中的 `Referer` 標頭值。發出請求的網域名稱。常見推薦網站，包含搜尋引擎、其他直接連結到您物件的網站，以及您自己的網站。

1. **`cs-cookie`**

   請求中的 `Cookie` 標頭，包括名稱值對和關聯的屬性。
**注意**  
此欄位會截斷為 800 位元組。

1. **`cs-uri-query`**

   請求 URI 的查詢字串部分 (如果有)。

1. **`x-edge-response-result-type`**

   在將回應傳回至檢視器之前，伺服器如何將回應分類。另請參閱 `x-edge-result-type` 欄位。可能的值包括：
   + `Hit` – 該伺服器從快取提供物件給檢視器。
   + `RefreshHit` – 該伺服器在邊緣快取中找到物件，但物件已過期，因此伺服器會聯絡原始伺服器，以確認快取具有該物件的最新版本。
   + `Miss` – 快取中的物件無法滿足請求，因此伺服器會將請求轉送至原始伺服器，並將結果傳回至檢視器。
   + `LimitExceeded` – 請求遭拒，因為超過 CloudFront 配額 (先前稱為限制)。
   + `CapacityExceeded` – 該伺服器會傳回 503 錯誤，因為在請求提供物件時沒有足夠的容量。
   + `Error` – 通常，這表示請求導致客戶端錯誤 (`sc-status` 欄位的值在 `4xx` 範圍內) 或伺服器錯誤 (`sc-status` 欄位的值在 `5xx` 範圍內)。

     如果 `x-edge-result-type` 欄位的值為 `Error` 且此欄位的值不為 `Error`，則用戶端在完成下載之前中斷連線。
   + `Redirect` – 伺服器會根據分佈設定，將檢視器從 HTTP 重新引導至 HTTPS。
   + `LambdaExecutionError` – 與分佈相關聯的 Lambda@Edge 函數由於格式不正確的關聯、函數逾時、 AWS 相依性問題或其他一般可用性問題而未完成。

1. **`x-forwarded-for`**

   如果檢視器使用 HTTP 代理或負載平衡器傳送請求，`c-ip` 欄位值則為代理或負載平衡器的 IP 位址。在這種情況下，此欄位是產生請求的檢視器 IP 位址。此欄位可以包含多個逗號分隔的 IP 位址。每個 IP 位址可以是 IPv4 位址 (例如 `192.0.2.183`) 或 IPv6 位址 (例如 `2001:0db8:85a3::8a2e:0370:7334`)。

1. **`ssl-protocol`**

   當請求使用 HTTPS 時，此欄位會包含檢視器和伺服器為傳輸請求和回應而交涉的 SSL/TLS 通訊協定。如需可能值的清單，請參閱 [檢視器和 CloudFront 之間支援的通訊協定和密碼](secure-connections-supported-viewer-protocols-ciphers.md) 中支援的 SSL/TLS 通訊協定。

1. **`ssl-cipher`**

   當請求使用 HTTPS 時，此欄位會包含檢視器和伺服器為加密請求和回應而交涉的 SSL/TLS 密碼。如需可能值的清單，請參閱 [檢視器和 CloudFront 之間支援的通訊協定和密碼](secure-connections-supported-viewer-protocols-ciphers.md) 中支援的 SSL/TLS 密碼。

1. **`x-edge-result-type`**

   在最後一個位元組離開伺服器之後，伺服器如何將回應分類。在某些情況下，結果類型會在伺服器準備好傳送回應的時間，以及完成傳送回應的時間中發生改變。另請參閱 `x-edge-response-result-type` 欄位。

   例如，在 HTTP 串流中，假設伺服器在快取中找到串流的區段。在這種情況下，這個欄位的值通常是 `Hit`。不過，如果在伺服器已交付整個區段之前，檢視器關閉檢視器，則最終結果類型 (此欄位的值) 為 `Error`。

   WebSocket 與 gRPC 連線會有的此欄位值為 `Miss`，因為內容無法快取，且會透過代理直接傳至原始伺服器。

   可能的值包括：
   + `Hit` – 該伺服器從快取提供物件給檢視器。
   + `RefreshHit` – 該伺服器在邊緣快取中找到物件，但物件已過期，因此伺服器會聯絡原始伺服器，以確認快取具有該物件的最新版本。
   + `Miss` – 快取中的物件無法滿足請求，因此會將請求轉送至原始伺服器，並將結果傳回至檢視器。
   + `LimitExceeded` – 請求遭拒，因為超過 CloudFront 配額 (先前稱為限制)。
   + `CapacityExceeded` – 伺服器會傳回 HTTP 503 狀態碼，因為在請求提供物件時沒有足夠的容量。
   + `Error` – 通常，這表示請求導致客戶端錯誤 (`sc-status` 欄位的值在 `4xx` 範圍內) 或伺服器錯誤 (`sc-status` 欄位的值在 `5xx` 範圍內)。如果 `sc-status` 欄位的值是 `200`，或者如果該欄位的值是 `Error` 並且 `x-edge-response-result-type` 欄位的值不是 `Error`，這代表 HTTP 請求成功，但用戶端在接收所有位元組之前中斷連線。
   + `Redirect` – 伺服器會根據分佈設定，將檢視器從 HTTP 重新引導至 HTTPS。
   + `LambdaExecutionError` – 與分佈相關聯的 Lambda@Edge 函數由於格式不正確的關聯、函數逾時、 AWS 相依性問題或其他一般可用性問題而未完成。

1. **`fle-encrypted-fields`**

   邊緣伺服器加密並轉送至原始伺服器的[欄位層級加密](field-level-encryption.md)欄位數目。CloudFront 伺服器會在加密資料時將已處理的請求串流至原始伺服器，因此即使 `fle-status` 的值為錯誤，此欄位也可以具有值。

1. **`fle-status`**

   為分發配置[欄位層級加密](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/field-level-encryption.html)時，此欄位包含可指出請求本文是否已成功處理的代碼。當伺服器成功處理要求主體時，會加密指定欄位中的值，並將請求轉送至原始伺服器，此欄位的值為 `Processed`。在這種情況下，`x-edge-result-type` 的值仍然可以表示用戶端或伺服器端的錯誤。

   此欄位可能的值包含：
   + `ForwardedByContentType` – 伺服器無須剖析與加密便將請求轉送到原始伺服器，因為沒有配置任何內容類型。
   + `ForwardedByQueryArgs` – 伺服器無需剖析或加密便將請求轉送到原始伺服器，因為請求包含查詢參數，此參數不在欄位層級加密的組態裡。
   + `ForwardedDueToNoProfile` – 伺服器無需剖析或加密便將請求轉送到原始伺服器，因為在欄位層級加密的組態裡沒有指定設定檔。
   + `MalformedContentTypeClientError` – 因為 `Content-Type` 標頭的值不是有效格式，因此伺服器拒絕請求並將 HTTP 400 狀態碼傳回至檢視器。
   + `MalformedInputClientError` – 伺服器拒絕請求且將 HTTP 400 狀態碼傳回給檢視器，因為要求主體不是有效格式。
   + `MalformedQueryArgsClientError` – 伺服器拒絕請求且將 HTTP 400 狀態碼傳回給檢視器，因為查詢參數空白或不是有效格式。
   + `RejectedByContentType` – 伺服器拒絕請求且將 HTTP 400 狀態碼傳回給檢視器，因為在欄位層級加密的組態中沒有指定內容類型。
   + `RejectedByQueryArgs` – 伺服器拒絕請求且將 HTTP 400 狀態碼傳回給檢視器，因為在欄位層級加密的組態中沒有指定查詢參數。
   + `ServerError` – 原始伺服器傳回錯誤。

   如果請求超過欄位層級的加密配額 (先前稱為限制)，此欄位會包含下列其中一個錯誤碼，而伺服器會將 HTTP 狀態碼傳回給檢視器 400。如需目前欄位層級加密的配額的詳細資訊，請參閱[欄位層級加密的配額](cloudfront-limits.md#limits-field-level-encryption)。
   + `FieldLengthLimitClientError` – 配置為加密的欄位已超過允許的長度上限。
   + `FieldNumberLimitClientError` – 將分佈配置為加密的請求所包含的欄位數超過了允許的欄位數。
   + `RequestLengthLimitClientError` – 當配置了欄位層級加密時，請求本文的長度超過允許的長度上限。

1. **`sc-content-type`**

   回應的 HTTP `Content-Type` 標頭值。

1. **`sc-content-len`**

   回應的 HTTP `Content-Length` 標頭值。

1. **`sc-range-start`**

   當回應包含 HTTP `Content-Range` 標頭時，此欄位包含範圍起始值。

1. **`sc-range-end`**

   當回應包含 HTTP `Content-Range` 標頭時，此欄位包含範圍結束值。

1. **`c-port`**

   來自檢視器之請求的連接埠號碼。

1. **`x-edge-detailed-result-type`**

   此欄位包含與 `x-edge-result-type` 欄位相同的值，但下列情況除外：
   + 該物件已從 [Origin Shield](origin-shield.md) 層提供給檢視器時，此欄位包含 `OriginShieldHit`。
   + 當物件不在 CloudFront 快取中，且回應是由[原始伺服器請求 Lambda @Edge 函數](lambda-at-the-edge.md)產生時，此欄位會包含 `MissGeneratedResponse`。
   + 當 `x-edge-result-type` 欄位的值為 `Error` 時，此欄位會包含下列其中一個值，以及有關該錯誤的詳細資訊：
     + `AbortedOrigin` – 該伺服器發生原始伺服器問題。
     + `ClientCommError` – 檢視器的回應因伺服器與檢視器之間發生通訊問題而遭到中斷。
     + `ClientGeoBlocked` – 分佈設定為拒絕來自檢視者地理位置的請求。
     + `ClientHungUpRequest` – 檢視器在傳送請求的同時提早停止。
     + `Error` – 發生錯誤，其錯誤類型不符合任何其他類別。當此伺服器提供來自快取的錯誤回應時，可能會發生此錯誤類型。
     + `InvalidRequest` – 該伺服器收到來自檢視器的無效請求。
     + `InvalidRequestBlocked` – 對請求的資源的存取遭到封鎖。
     + `InvalidRequestCertificate` – 分佈不符合建立 HTTPS 連線的 SSL/TLS 憑證。
     + `InvalidRequestHeader` — 請求包含無效的標頭。
     + `InvalidRequestMethod` – 分佈未設定為處理使用的 HTTP 請求方法。當分佈只支援可快取的請求時會發生此情況。
     + `OriginCommError` – 在連接到原始伺服器或從原始伺服器讀取資料時，請求逾時。
     + `OriginConnectError` – 該伺服器無法連線到原始伺服器。
     + `OriginContentRangeLengthError` – 原始伺服器回應中的 `Content-Length` 標頭不符合 `Content-Range` 標頭中的長度。
     + `OriginDnsError` – 該伺服器無法解析原始伺服器的網域名稱。
     + `OriginError` – 原始伺服器傳回不正確的回應。
     + `OriginHeaderTooBigError` – 原始伺服器傳回的標頭對邊緣伺服器太大，因而無法處理。
     + `OriginInvalidResponseError` – 原始伺服器傳回無效的回應。
     + `OriginReadError` – 該伺服器無法從原始伺服器讀取。
     + `OriginWriteError` – 該伺服器無法寫入原始伺服器。
     + `OriginZeroSizeObjectError` – 從原始伺服器傳送大小為零的物件，因而導致錯誤。
     + `SlowReaderOriginError` – 檢視器讀取訊息過慢，因而導致原始伺服器錯誤。

1. **`c-country`**

   國家/地區代碼代表檢視者的地理位置，由檢視器的 IP 位址決定。如需國家/地區代碼的清單，請參閱 [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)。

1. **`cs-accept-encoding`**

    檢視器請求中的 `Accept-Encoding` 標頭值。

1. **`cs-accept`**

   檢視器請求中的 `Accept` 標頭值。

1. **`cache-behavior-path-pattern`**

   識別符合檢視器請求之快取行為的路徑模式。

1. **`cs-headers`**

   檢視器請求中的 HTTP 標頭 (名稱和值)。
**注意**  
此欄位會截斷為 800 位元組。

1. **`cs-header-names`**

   檢視器請求中 HTTP 標頭 (非值) 的名稱。
**注意**  
此欄位會截斷為 800 位元組。

1. **`cs-headers-count`**

    檢視器請求中的 HTTP 標頭數目。

1. **`primary-distribution-id`**

   啟用連續部署時，此 ID 會識別哪個分佈是目前分佈中的主要分佈。

1. **`primary-distribution-dns-name`**

   啟用連續部署時，此值會顯示與目前 CloudFront 分佈相關的主要網域名稱 (例如 d111111abcdef8.cloudfront.net)。

1. **`origin-fbl`**

   CloudFront 與您的原始伺服器之間第一個位元組延遲的秒數。

1. **`origin-lbl`**

   CloudFront 與您的原始伺服器之間最後一個位元組延遲的秒數。

1. **`asn`**

   檢視器的自治系統編號 (ASN)。

1. <a name="CMCD-real-time-logging-fields"></a>
**即時存取日誌中的 CMCD 欄位**  
如需這些欄位的詳細資訊，請參閱《[CTA 規格 Web 應用程式影片生態系統 - 常見媒體用戶端資料 CTA-5004](https://cdn.cta.tech/cta/media/media/resources/standards/pdfs/cta-5004-final.pdf)》文件。

1. **`cmcd-encoded-bitrate`**

   所請求音訊或視訊物件的編碼位元率。

1. **`cmcd-buffer-length`**

   所請求媒體物件的緩衝區長度。

1. **`cmcd-buffer-starvation`**

   緩衝區是否在先前請求與物件請求之間的某個時間點出現缺乏情況。這可能會導致播放器處於重新緩衝狀態，可能會使視訊或音訊播放停滯。

1. **`cmcd-content-id`**

   識別目前內容的唯一字串。

1. **`cmcd-object-duration`**

   請求物件的播放持續時間 (以毫秒為單位)。

1. **`cmcd-deadline`**

   此物件第一個範例必須可用的請求時間期限，以避免緩衝區執行不足狀態或其他播放問題。

1. **`cmcd-measured-throughput`**

   用戶端與伺服器之間的輸送量，由用戶端測量。

1. **`cmcd-next-object-request`**

   下一個請求物件的相對路徑。

1. **`cmcd-next-range-request`**

   如果下一個請求是部分物件請求，此字串表示要請求的位元組範圍。

1. **`cmcd-object-type`**

   正在請求的目前物件媒體類型。

1. **`cmcd-playback-rate`**

   1 表示即時、2 表示雙倍速、0 表示未播放。

1. **`cmcd-requested-maximum-throughput`**

   用戶端認為足以交付資產的請求最大輸送量。

1. **`cmcd-streaming-format`**

   定義目前請求的串流格式。

1. **`cmcd-session-id`**

   識別目前播放工作階段的 GUID。

1. **`cmcd-stream-type`**

   識別客群可用性的記號。`v` = 所有客群都可用。`l` = 客群會隨著時間而可用。

1. **`cmcd-startup`**

   如果在緩衝區清空事件之後啟動、尋找或復原期間緊急需要物件，則會包含沒有值的鍵。

1. **`cmcd-top-bitrate`**

   用戶端可播放的最高位元率轉譯。

1. **`cmcd-version`**

   此版本規格用於解譯定義的鍵名稱和值。如果省略此鍵，用戶端和伺服器*必須*解譯版本 1 定義的值。

1. **`r-host`**

   此欄位會針對原始請求傳送，顯示用於提供物件的原始伺服器網域。如果發生錯誤，您可以使用此欄位來尋找上次嘗試的原始伺服器，例如：`cd8jhdejh6a.mediapackagev2.us-east-1.amazonaws.com`。

1. **`sr-reason`**

   此欄位提供選取原始伺服器的原因。對主要原始伺服器的請求成功時，此欄位為空白。

   如果發生原始伺服器容錯移轉，欄位將包含導致容錯移轉的 HTTP 錯誤代碼，例如 `Failover:403` 或 `Failover:502`。在原始伺服器容錯移轉的情況下，如果重試的請求也失敗，且您尚未設定自訂錯誤頁面，則 `r-status` 會指出第二個原始伺服器的回應。不過如果您已設定自訂錯誤頁面與原始伺服器容錯移轉，則如果請求失敗且改為傳回自訂錯誤頁面，這將包含第二個原始伺服器的回應。

   如果沒有發生原始伺服器容錯移轉，但發生媒體品質感知彈性 (MQAR) 原始伺服器選擇，則會將此記錄為 `MediaQuality`。如需詳細資訊，請參閱[媒體品質感知彈性](media-quality-score.md)。

1. **`x-edge-mqcs`**

   此欄位指出 CloudFront 從 MediaPackage v2 的 CMSD 回應標頭中檢索媒體區段的媒體品質可信度分數 (MQCS) (範圍：0 – 100)。此欄位適用於符合具有啟用 MQAR 原始伺服器群組之快取行為的請求。除了原始請求之外，CloudFront 還會對也從其快取提供的媒體區段記錄此欄位。如需詳細資訊，請參閱[媒體品質感知彈性](media-quality-score.md)。

1. **`distribution-tenant-id`**

   分佈租用戶的 ID。

1. **`connection-id`**

   TLS 連線的唯一識別符。

   您必須為分發啟用 mTLS，才能取得此欄位的資訊。如需詳細資訊，請參閱[使用 CloudFront 進行相互 TLS 身分驗證 （檢視器 mTLS)原始伺服器與 CloudFront 的交互 TLS](mtls-authentication.md)。

### 端點 (Kinesis Data Streams)
<a name="real-time-logs-endpoint"></a>

端點包含您要傳送即時日誌的 Kinesis Data Streams 相關資訊。您提供資料串流的 Amazon Resource Name (ARN)。

如需建立 Kinesis Data Streams 的詳細資訊，請參閱《*Amazon Kinesis Data Streams 開發人員指南*》中的下列主題。
+ [建立和管理串流](https://docs.aws.amazon.com/streams/latest/dev/working-with-streams.html)
+ [使用 執行基本 Kinesis Data Streams 操作 AWS CLI](https://docs.aws.amazon.com/streams/latest/dev/fundamental-stream.html)
+ [建立串流 ](https://docs.aws.amazon.com/streams/latest/dev/kinesis-using-sdk-java-create-stream.html)（使用 適用於 Java 的 AWS SDK)

當您建立資料串流時，您需要指定分片的數目。使用下列資訊來協助您估計需要的碎片數量。

**估計 Kinesis 資料串流的碎片數量**

1. 計算 (或估計) 您的 CloudFront 分發每秒收到的請求數。

   您可以使用 [CloudFront 使用量報告](https://console.aws.amazon.com/cloudfront/v4/home#/usage) (在 CloudFront 主控台中) 和 [CloudFront 指標](viewing-cloudfront-metrics.md#monitoring-console.distributions) (在 CloudFront 和 Amazon CloudWatch 主控台中) 來協助您計算每秒的請求數。

1. 決定單一即時存取日誌記錄的典型大小。

   一般而言，單一日誌記錄大約是 500 個位元組。包含所有可用欄位的大型記錄一般約為 1 KB。

   如果不確定日誌記錄的大小，您可以啟用取樣率較低 (例如 1%) 的即時日誌，然後使用 Kinesis Data Streams 中的監控資料，來計算平均記錄大小 (總傳入位元組數除以記錄總數)。

1. 在 [Amazon Kinesis Data Streams 定價頁面上](https://aws.amazon.com/kinesis/data-streams/pricing/)， AWS 定價計算工具選擇**立即建立您的自訂預估**。
   + 在計算器中輸入每秒請求 (記錄) 的數量。
   + 輸入單一日誌記錄的平均記錄大小。
   + 選擇**顯示計算**。

   定價計算器會顯示您需要的碎片數量並預估成本。

### IAM 角色
<a name="real-time-logs-IAM"></a>

 AWS Identity and Access Management (IAM) 角色，提供 CloudFront 許可，以將即時存取日誌交付至 Kinesis 資料串流。

當您使用 CloudFront 主控台建立即時存取日誌組態時，您可以選擇**建立新的服務角色**，讓主控台為您建立 IAM 角色。

當您使用 AWS CloudFormation 或 CloudFront API (AWS CLI 或 SDK) 建立即時存取日誌組態時，您必須自行建立 IAM 角色並提供角色 ARN。若要自行建立 IAM 角色，請使用下列政策。

**IAM 角色信任原則**

若要使用以下 IAM 角色信任政策，請將 *111122223333* 取代為您的 AWS 帳戶 號碼。此政策中的 `Condition`元素有助於防止[混淆代理人問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)，因為 CloudFront 只能代表 中的分佈擔任此角色 AWS 帳戶。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudfront.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "111122223333"
                }
            }
        }
    ]
}
```

------

**未加密資料串流的 IAM 角色許可原則**

若要使用下列政策，請將 *arn:aws:kinesis:us-east-2:123456789012:stream/StreamName* 取代為 Kinesis 資料串流的 ARN。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kinesis:DescribeStreamSummary",
                "kinesis:DescribeStream",
                "kinesis:PutRecord",
                "kinesis:PutRecords"
            ],
            "Resource": [
                "arn:aws:kinesis:us-east-2:123456789012:stream/StreamName"
            ]
        }
    ]
}
```

------

**已加密資料串流的 IAM 角色許可原則**

若要使用以下政策，請將 *arn:aws:kinesis:us-east-2:123456789012:stream/StreamName* 取代為 Kinesis 資料串流的 ARN，將 *arn:aws:kms:us-east-2:123456789012:key/e58a3d0b-fe4f-4047-a495-ae03cc73d486* 取代為 AWS KMS key的 ARN。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kinesis:DescribeStreamSummary",
                "kinesis:DescribeStream",
                "kinesis:PutRecord",
                "kinesis:PutRecords"
            ],
            "Resource": [
                "arn:aws:kinesis:us-east-2:123456789012:stream/StreamName"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey"
            ],
            "Resource": [
                "arn:aws:kms:us-east-2:123456789012:key/e58a3d0b-fe4f-4047-a495-ae03cc73d486"
            ]
        }
    ]
}
```

------

****  

## 建立 Kinesis Data Streams 取用者
<a name="real-time-log-consumer-guidance"></a>

若要讀取和分析即時存取日誌，您可以建置或使用 Kinesis Data Streams *取用*者。當您為 CloudFront 即時日誌建置取用者時，請務必了解每個即時存取日誌記錄中的欄位一律以相同順序交付，如 [欄位](#real-time-logs-fields)一節所列。請確定建立您的取用程式來適應此固定訂單。

例如，請考慮僅包含以下三個欄位的即時存取日誌組態：`time-to-first-byte`、 `sc-status`和 `c-country`。在這個案例中，最後一個欄位 `c-country`，永遠是每個日誌中的欄位編號 3。不過，如果您稍後將欄位新增至即時存取日誌組態，則記錄中每個欄位的位置可能會變更。

例如，如果您將欄位 `sc-bytes`和 `time-taken` 新增至即時存取日誌組態，這些欄位會根據 [欄位](#real-time-logs-fields)區段中顯示的順序插入每個日誌記錄中。所有五個欄位的產生順序為 `time-to-first-byte`、`sc-status`、`sc-bytes`、`time-taken` 和 `c-country`。該 `c-country` 欄位原本是欄位編號 3，但現在是欄位編號 5。請確定您的取用者應用程式可以處理日誌記錄中變更位置的欄位，以防您將欄位新增至即時存取日誌組態。

## 即時存取日誌疑難排解
<a name="real-time-log-troubleshooting"></a>

建立即時存取日誌組態後，您可能會發現沒有記錄 （或並非所有記錄） 交付至 Kinesis Data Streams。在此情況下，您應該先確認您的 CloudFront 分發是否正在收到檢視器請求。如果是，您可以檢查下列設定來繼續故障排除。

**IAM 角色許可**  
為了將即時存取日誌記錄交付至 Kinesis 資料串流，CloudFront 會在即時存取日誌組態中使用 IAM 角色。請確定角色信任原則和角色許可原則符合 [IAM 角色](#real-time-logs-IAM) 中顯示的原則。

**Kinesis Data Streams 調節**  
如果 CloudFront 以比串流更快的速度將即時存取日誌記錄寫入 Kinesis 資料串流，Kinesis Data Streams 可能會調節來自 CloudFront 的請求。在此情況下，您可以增加 Kinesis 資料串流中的碎片數量。每個碎片可支援最高每秒 1,000 筆記錄的寫入數目，最高每秒 1 MB 的資料寫入上限。