使用即時日誌 - Amazon CloudFront

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

使用即時日誌

使用 CloudFront 即時日誌,您可以即時取得對分佈提出請求的相關資訊 (日誌會在收到請求後的幾秒內交付)。您可以使用即時日誌來監控、分析並根據內容交付效能採取動作。

CloudFront 即時日誌是可設定的。您可以選擇:

  • 您可以為即時日誌選擇抽樣率,即要接收即時日誌的請求百分比。

  • 您想要在日誌中接收的特定欄位。

  • 您想要接收即時日誌的特定快取行為 (路徑模式)。

CloudFront 即時日誌會在 Amazon Kinesis Data Streams 中交付至您選擇的資料串流。您可以建置自己的 Kinesis 資料串流取用者 ,或使用 Amazon Data Firehose 將日誌資料傳送至 Amazon Simple Storage Service (Amazon S3)、Amazon Redshift、Amazon OpenSearch Service (OpenSearch Service) 或第三方日誌處理服務。

CloudFront 即時日誌的費用,以及使用 Kinesis Data Streams 所產生的費用。如需定價的詳細資訊,請參閱 Amazon CloudFront PricingAmazon Kinesis Data Streams 定價。

重要

我們建議您使用日誌來了解內容請求的性質,而不是作為所有請求的完整會計。 會盡最大努力 CloudFront 交付即時日誌。在實際處理請求之後,才可能長時間交付特定請求的日誌項目,在極少數的情況下,有可能完全不會交付日誌項目。當從即時日誌中省略日誌項目時,即時日誌中的項目數量將與 AWS 帳單和用量報告中顯示的用量不符。

建立和使用即時日誌組態

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

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

Console
若要建立即時日誌組態
  1. 登入 AWS Management Console 並在 CloudFront 主控台中開啟日誌頁面https://console.aws.amazon.com/cloudfront/v4/home?#/logs

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

  3. 選擇建立組態

  4. 針對名稱 ,輸入組態的名稱。

  5. 針對取樣率 ,輸入您要接收日誌記錄的請求百分比。

  6. 對於欄位 ,選擇要在即時日誌中接收的欄位。

    • 若要包含日誌的所有CMCD欄位,請選擇CMCD所有金鑰

  7. 針對端點 ,選擇一或多個 Kinesis 資料串流來接收即時日誌。

    注意

    CloudFront 即時日誌會傳送至您在 Kinesis Data Streams 中指定的資料串流。若要讀取和分析即時日誌,您可以建置自己的 Kinesis 資料串流取用者。您也可以使用 Firehose 將日誌資料傳送至 Amazon S3、Amazon Redshift、Amazon OpenSearch Service 或第三方日誌處理服務。

  8. 針對IAM角色 ,選擇建立新服務角色或選擇現有角色。您必須具有建立IAM角色的許可。

  9. (選用) 針對分佈 ,選擇要 CloudFront連接至即時日誌組態的分佈和快取行為。

  10. 選擇建立組態

如果成功,主控台會顯示您剛才建立的即時日誌組態詳細資料。

如需詳細資訊,請參閱了解即時日誌組態

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
  2. 開啟您剛才建立且命名為 rtl-config.yaml 的檔案。編輯檔案以指定所需的即時日誌組態設定,然後儲存檔案。注意下列事項:

    • 對於 StreamType,唯一有效的值為 Kinesis

    如需即時長組態設定的詳細資訊,請參閱了解即時日誌組態

  3. 使用下列命令,使用 rtl-config.yaml 檔案中的輸入參數建立即時日誌組態。

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

如果成功,命令的輸出會顯示您剛才建立的即時日誌組態的詳細資料。

將即時日誌組態連接至現有分佈 (CLI 具有輸入檔案)
  1. 使用下列命令來儲存要更新的分佈的 CloudFront 分佈組態。Replace (取代) distribution_ID 分佈的 ID。

    aws cloudfront get-distribution-config --id distribution_ID --output yaml > dist-config.yaml
  2. 開啟您剛才建立且命名為 dist-config.yaml 的檔案。編輯檔案,對您要更新的每個快取行為進行下列變更,以使用即時日誌組態。

    • 在快取行為中,新增名為 RealtimeLogConfigArn 的欄位。對於欄位的值,請使用您要附加至此快取行為ARN的即時日誌組態的 。

    • ETag 欄位重新命名為 IfMatch,但不要變更欄位的值。

    完成後儲存檔案。

  3. 使用下列命令來更新分佈,以使用即時日誌組態。Replace (取代) distribution_ID 分佈的 ID。

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

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

API

若要使用 建立即時日誌組態 CloudFront API,請使用 CreateRealtimeLogConfigAPI操作。如需有關您在此API呼叫中指定參數的詳細資訊,請參閱 了解即時日誌組態和您 AWS SDK或其他API用戶端的API參考文件。

建立即時日誌組態之後,您可以使用下列其中一個API操作,將其連接至快取行為:

對於這兩個API操作,請在快取行為內提供 RealtimeLogConfigArn 欄位中即時日誌組態ARN的 。如需您在這些API呼叫中指定之其他欄位的詳細資訊,請參閱 分佈設定參考和您 AWS SDK或其他API用戶端的API參考文件。

了解即時日誌組態

若要使用 CloudFront 即時日誌,請先建立即時日誌組態。即時日誌組態包含您要接收哪些日誌欄位、日誌的抽樣頻率,以及您要傳送日誌的 Kinesis 資料串流的相關資訊。

具體來說,即時日誌組態包含下列組態:

名稱

用來識別即時日誌組態的名稱。

抽樣頻率

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

欄位

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

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

欄位 46-63 是常見的媒體用戶端資料 (CMCD),媒體播放器用戶端可以CDNs隨每個請求傳送至該資料。您可以使用此資料來了解每個請求,例如媒體類型 (音訊、影片)、播放速率和串流長度。這些欄位只有在傳送至 時,才會出現在即時日誌中 CloudFront。

  1. timestamp

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

  2. c-ip

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

  3. s-ip

    提供請求之 CloudFront 伺服器的 IP 地址,例如 192.0.2.1832001:0db8:85a3::8a2e:0370:7334

  4. time-to-first-byte

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

  5. sc-status

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

  6. sc-bytes

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

  7. cs-method

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

  8. cs-protocol

    檢視器請求的通訊協定 (httphttpswswss)。

  9. cs-host

    包含在該請求 Host 標頭的檢視器值。如果您在物件中使用 CloudFront 網域名稱 URLs(例如 d111111abcdef8.cloudfront.net),此欄位會包含該網域名稱。如果您在物件 (例如 www.example.comCNAMEs) 中使用替代網域名稱 URLs(),此欄位會包含替代網域名稱。

  10. cs-uri-stem

    整個請求 URL,包括查詢字串 (如果存在),但沒有網域名稱。例如:/images/cat.jpg?mobile=true

    注意

    標準日誌中,該 cs-uri-stem 值不包括查詢字串。

  11. cs-bytes

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

  12. x-edge-location

    提供請求的節點。每個邊緣位置都以三個字母的代碼和任意指派的號碼來識別 (例如 DFW3)。三個字母的代碼通常與鄰近邊緣位置地理位置的機場的國際航空運輸協會 (IATA) 機場代碼相對應。(未來這些縮寫可能會改變。)

  13. x-edge-request-id

    唯一識別 request 的不透明字串。 CloudFront 也會在x-amz-cf-id回應標頭中傳送此字串。

  14. x-host-header

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

  15. time-taken

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

  16. cs-protocol-version

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

  17. c-ip-version

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

  18. cs-user-agent

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

  19. cs-referer

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

  20. cs-cookie

    請求中的 Cookie 標頭,包括名稱值對和關聯的屬性。

    注意

    此欄位會截斷為 800 位元組。

  21. cs-uri-query

    請求 的查詢字串部分URL,如果有的話。

  22. 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 – 伺服器HTTPS會根據分佈設定將檢視器從 重新導向HTTP至 。

  23. x-forwarded-for

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

  24. ssl-protocol

    當請求使用 時HTTPS,此欄位包含 中的SSL/TLS protocol that the viewer and server negotiated for transmitting the request and response. For a list of possible values, see the supported SSL/TLS通訊協定檢視器與之間支援的通訊協定和密碼 CloudFront

  25. ssl-cipher

    當請求使用 時HTTPS,此欄位包含 SSL/TLS cipher that the viewer and server negotiated for encrypting the request and response. For a list of possible values, see the supported SSL/TLS 中的密碼檢視器與之間支援的通訊協定和密碼 CloudFront

  26. x-edge-result-type

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

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

    WebSocket 由於內容無法快取,且直接代理到原始伺服器,因此此欄位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 – 伺服器HTTPS會根據分佈設定將檢視器從 重新導向HTTP至 。

  27. fle-encrypted-fields

    伺服器加密並轉送至 origin 的欄位層級加密欄位數目。 CloudFront 伺服器會在加密資料時將處理後的請求串流至原始伺服器,因此即使 的值fle-status為錯誤,此欄位也可以具有 值。

  28. fle-status

    為分佈配置欄位層級加密時,此欄位包含可指出要求主體是否已成功處理的代碼。當伺服器成功處理要求主體時,會加密指定欄位中的值,並將請求轉送至原始伺服器,此欄位的值為 Processed。在這種情況下,x-edge-result-type 的值仍然可以表示用戶端或伺服器端的錯誤。

    此欄位可能的值包含:

    • ForwardedByContentType – 伺服器無須剖析與加密便將請求轉送到原始伺服器,因為沒有配置任何內容類型。

    • ForwardedByQueryArgs – 伺服器無需剖析或加密便將請求轉送到原始伺服器,因為請求包含查詢參數,此參數不在欄位層級加密的組態裡。

    • ForwardedDueToNoProfile – 伺服器無需剖析或加密便將請求轉送到原始伺服器,因為在欄位層級加密的組態裡沒有指定設定檔。

    • MalformedContentTypeClientError – 伺服器拒絕請求,並將 HTTP 400 狀態碼傳回給檢視器,因為Content-Type標頭的值格式無效。

    • MalformedInputClientError – 伺服器拒絕請求,並傳回 HTTP 400 狀態碼給檢視器,因為請求內文格式無效。

    • MalformedQueryArgsClientError – 伺服器拒絕請求,並傳回 HTTP 400 狀態碼給檢視器,因為查詢引數為空或格式無效。

    • RejectedByContentType – 伺服器拒絕請求,並傳回 HTTP 400 狀態碼給檢視器,因為欄位層級加密的組態中未指定內容類型。

    • RejectedByQueryArgs – 伺服器拒絕請求,並傳回 HTTP 400 狀態碼給檢視器,因為在欄位層級加密的組態中未指定查詢引數。

    • ServerError – 原始伺服器傳回錯誤。

    如果請求超過欄位層級加密配額 (先前稱為限制),此欄位包含下列其中一個錯誤碼,伺服器會將HTTP狀態碼 400 傳回給檢視器。如需目前欄位層級加密的配額的詳細資訊,請參閱欄位層級加密的配額

    • FieldLengthLimitClientError – 配置為加密的欄位已超過允許的長度上限。

    • FieldNumberLimitClientError – 將分佈配置為加密的請求所包含的欄位數超過了允許的欄位數。

    • RequestLengthLimitClientError – 當配置了欄位層級加密時,要求主體的長度超過允許的長度上限。

  29. sc-content-type

    回應HTTPContent-Type標頭的值。

  30. sc-content-len

    回應HTTPContent-Length標頭的值。

  31. sc-range-start

    當回應包含HTTPContent-Range標頭時,此欄位會包含範圍開始值。

  32. sc-range-end

    當回應包含HTTPContent-Range標頭時,此欄位會包含範圍結束值。

  33. c-port

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

  34. x-edge-detailed-result-type

    此欄位包含與 x-edge-result-type 欄位相同的值,但下列情況除外:

    • 該物件已從 Origin Shield 層提供給檢視器時,此欄位包含 OriginShieldHit

    • 當物件不在 CloudFront 快取中,且回應是由原始伺服器請求 Lambda@Edge 函數產生時,此欄位包含 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 – 檢視器讀取訊息過慢,因而導致原始伺服器錯誤。

  35. c-country

    國家/地區代碼代表檢視者的地理位置,由檢視器的 IP 地址決定。如需國家/地區代碼清單,請參閱 ISO 3166-1 alpha-2

  36. cs-accept-encoding

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

  37. cs-accept

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

  38. cache-behavior-path-pattern

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

  39. cs-headers

    檢視器請求中的HTTP標頭 (名稱和值)。

    注意

    此欄位會截斷為 800 位元組。

  40. cs-header-names

    檢視器請求中HTTP標頭的名稱 (非值)。

    注意

    此欄位會截斷為 800 位元組。

  41. cs-headers-count

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

  42. origin-fbl

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

  43. origin-lbl

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

  44. asn

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

  45. primary-distribution-id

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

  46. primary-distribution-dns-name

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

    CMCD 即時日誌中的欄位

    如需這些欄位的詳細資訊,請參閱CTA規格 Web Application Video Ecosystem - Common Media Client Data CTA-5004 文件。

  47. cmcd-encoded-bitrate

    請求音訊或影片物件的編碼位元速率。

  48. cmcd-buffer-length

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

  49. cmcd-buffer-starvation

    緩衝區是否在先前請求與物件請求之間的某個時間點觸發。這可能會導致播放器處於重新緩衝統計資料中,這會停止影片或音訊播放。

  50. cmcd-content-id

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

  51. cmcd-object-duration

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

  52. cmcd-deadline

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

  53. cmcd-measured-throughput

    用戶端和伺服器之間的輸送量,由用戶端測量。

  54. cmcd-next-object-request

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

  55. cmcd-next-range-request

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

  56. cmcd-object-type

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

  57. cmcd-playback-rate

    如果為即時,則為 1;如果為雙速,則為 2;如果不播放,則為 0。

  58. cmcd-requested-maximum-throughput

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

  59. cmcd-streaming-format

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

  60. cmcd-session-id

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

  61. cmcd-stream-type

    識別客群可用性的權杖。 v = 所有客群都可用。 l = 客群會隨著時間的推移而變得可用。

  62. cmcd-startup

    如果在啟動、尋找或復原緩衝區清空事件後急需物件,則金鑰會包含在不含值。

  63. cmcd-top-bitrate

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

  64. cmcd-version

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

端點 (Kinesis Data Streams)

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

如需建立 Kinesis Data Streams 的詳細資訊,請參閱 Amazon Kinesis Data Streams 開發人員指南 中的下列主題。

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

估計 Kinesis 資料串流的碎片數量
  1. 計算 (或估算) 您的 CloudFront分佈每秒收到的請求數。

    您可以使用CloudFront用量報告 (在 CloudFront 主控台中) 和CloudFront 指標 (在 CloudFront 和 Amazon CloudWatch 主控台中) 來協助您計算每秒的請求。

  2. 確定單一即時日誌記錄的典型大小。

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

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

  3. Amazon Kinesis Data Streams 定價頁面上,於 下 AWS Pricing Calculator,選擇立即建立您的自訂預估

    • 在計算器中,輸入每秒的請求 (記錄) 數目。

    • 輸入單一日誌記錄的平均記錄大小。

    • 選擇顯示計算

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

IAM 角色

( 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元素有助於防止混淆代理問題,因為 CloudFront 只能代表 中的分佈擔任此角色 AWS 帳戶。

{ "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的 。

{ "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 使用您 ARN的 AWS KMS key。

{ "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 取用者

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

例如,假設只包含下列三個欄位的即時日誌組態: time-to-first-bytesc-statusc-country。在這個案例中,最後一個欄位 c-country,永遠是每個日誌中的欄位編號 3。不過,如果您稍後將欄位新增至即時日誌組態,則日誌中每個欄位的位置可能會變更。

例如,如果您新增欄位 sc-bytestime-taken 即時日誌組態,這些欄位會根據 欄位 區段中顯示的順序插入到每個日誌中。所有五個欄位的產生順序為 time-to-first-bytesc-statussc-bytestime-takenc-country。該 c-country 欄位原本是欄位編號 3,但現在是欄位編號 5。請確定您的取用者應用程式可以處理變更日誌中位置的欄位,以防您將欄位新增至即時日誌組態。

即時日誌疑難排解

建立即時日誌組態之後,您可能會發現沒有任何日誌 (或不是所有日誌) 會交付至 Kinesis Data Streams。在此情況下,您應該先驗證 CloudFront 分佈是否收到檢視器請求。如果是,您可以檢查下列設定來繼續故障排除。

IAM 角色許可

若要將即時日誌記錄交付至 Kinesis 資料串流, CloudFront 會在即時日誌組態中使用 IAM角色。請確定角色信任原則和角色許可原則符合 IAM 角色 中顯示的原則。

Kinesis Data Streams 調節

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