查詢 Amazon CloudFront 日誌 - Amazon Athena

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

查詢 Amazon CloudFront 日誌

您可以設定 Amazon CloudFront CDN,將網路分發存取日誌匯出至 Amazon 簡單儲存服務。您可以使用這些記錄來探索使用者所提供服務的 Web 屬性中的瀏覽模式 CloudFront。

在您開始查詢記錄檔之前,請在您偏好的分發上啟用 Web CloudFront 發行版存取記錄檔。如需詳細資訊,請參Amazon CloudFront 開發人員指南中的存取日誌。記下您儲存這些日誌的 Amazon S3 儲存貯體。

建立 CloudFront標準記錄的資料表

注意

此程序適用於中的 Web 分發存取記錄檔 CloudFront。不適用於來自 RTMP 分佈的串流日誌。

為 CloudFront 標準記錄檔欄位建立表格的步驟

  1. 複製下列範例 DDL 陳述式,並將其貼到 Athena 主控台查詢編輯器。範例陳述式使用 Amazon CloudFront 開發人員指南標準記錄檔欄位」區段中所述的記錄檔欄位。為存放日誌的 Amazon S3 儲存貯體修改 LOCATION。如需有關使用查詢編輯器的資訊,請參閱開始使用

    此查詢會指FIELDS TERMINATED BY '\t'ROW FORMAT DELIMITED並指出欄位由定位字元分隔。對於ROW FORMAT DELIMITED,Athena 預設LazySimpleSerDe會使用。因為在 Athena 中它是保留字,所以使用反引號 (') 逸出 date 資料欄。如需相關資訊,請參閱保留的關鍵字

    CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_standard_logs ( `date` DATE, time STRING, x_edge_location STRING, sc_bytes BIGINT, c_ip STRING, cs_method STRING, cs_host STRING, cs_uri_stem STRING, sc_status INT, cs_referrer STRING, cs_user_agent STRING, cs_uri_query STRING, cs_cookie STRING, x_edge_result_type STRING, x_edge_request_id STRING, x_host_header STRING, cs_protocol STRING, cs_bytes BIGINT, time_taken FLOAT, x_forwarded_for STRING, ssl_protocol STRING, ssl_cipher STRING, x_edge_response_result_type STRING, cs_protocol_version STRING, fle_status STRING, fle_encrypted_fields INT, c_port INT, time_to_first_byte FLOAT, x_edge_detailed_result_type STRING, sc_content_type STRING, sc_content_len BIGINT, sc_range_start BIGINT, sc_range_end BIGINT ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION 's3://DOC-EXAMPLE-BUCKET/' TBLPROPERTIES ( 'skip.header.line.count'='2' )
  2. 在 Athena 主控台中執行查詢。查詢完成之後,Athena 會註冊 cloudfront_standard_logs 資料表,讓其中的資料可供您發出查詢。

建立即 CloudFront時記錄的資料表

建立 CloudFront 即時記錄檔欄位的表格

  1. 複製下列範例 DDL 陳述式,並將其貼到 Athena 主控台查詢編輯器。範例陳述式使用 Amazon CloudFront 開發人員指南中「即時日誌」一節中所記錄的日誌檔欄位。為存放日誌的 Amazon S3 儲存貯體修改 LOCATION。如需有關使用查詢編輯器的資訊,請參閱開始使用

    此查詢會指FIELDS TERMINATED BY '\t'ROW FORMAT DELIMITED並指出欄位由定位字元分隔。對於ROW FORMAT DELIMITED,Athena 預設LazySimpleSerDe會使用。因為在 Athena 中它是保留字,所以使用反引號 (') 逸出 timestamp 資料欄。如需相關資訊,請參閱保留的關鍵字

    下列範例包含所有可用欄位。您可以註解掉或移除不需要的欄位。

    CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_real_time_logs ( `timestamp` STRING, c-ip STRING, time-to-first-byte BIGINT, sc-status BIGINT, sc-bytes BIGINT, cs-method STRING, cs-protocol STRING, cs-host STRING, cs-uri-stem STRING, cs-bytes BIGINT, x-edge-location STRING, x-edge-request-id STRING, x-host-header STRING, time-taken BIGINT, cs-protocol-version STRING, c-ip-version STRING, cs-user-agent STRING, cs-referer STRING, cs-cookie STRING, cs-uri-query STRING, x-edge-response-result-type STRING, x-forwarded-for STRING, ssl-protocol STRING, ssl-cipher STRING, x-edge-result-type STRING, fle-encrypted-fields STRING, fle-status STRING, sc-content-type STRING, sc-content-len BIGINT, sc-range-start STRING, sc-range-end STRING, c-port BIGINT, x-edge-detailed-result-type STRING, c-country STRING, cs-accept-encoding STRING, cs-accept STRING, cache-behavior-path-pattern STRING, cs-headers STRING, cs-header-names STRING, cs-headers-count BIGINT, primary-distribution-id STRING, primary-distribution-dns-name STRING, origin-fbl STRING, origin-lbl STRING, asn STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION 's3://DOC-EXAMPLE-BUCKET/' TBLPROPERTIES ( 'skip.header.line.count'='2' )
  2. 在 Athena 主控台中執行查詢。查詢完成之後,Athena 會註冊 cloudfront_real_time_logs 資料表,讓其中的資料可供您發出查詢。

標準 CloudFront記錄檔的查詢範例

下列查詢會加總 2018 年 6 月 9 日至 6 月 11 日 CloudFront 之間所服務的位元組數目。以雙引號圍住日期欄名稱,因為它是保留字。

SELECT SUM(bytes) AS total_bytes FROM cloudfront_standard_logs WHERE "date" BETWEEN DATE '2018-06-09' AND DATE '2018-06-11' LIMIT 100;

若要從查詢結果中除去重複的資料列 (例如,重複的空白資料列),您可以使用 SELECT DISTINCT 陳述式,如下列範例所示。

SELECT DISTINCT * FROM cloudfront_standard_logs LIMIT 10;

其他資源

如需有關使用 Athena 查詢 CloudFront 記錄檔的詳細資訊,請參閱AWS 大數據部落格中的下列文章。

使用 Amazon Athena 輕鬆查詢 AWS 服務 日誌 (2019 年 5 月 29 日)。

大規模分析您的 Amazon CloudFront 存取日誌 (2018 年 12 月 21 日)。

建置無伺服器架構 AWS Lambda,使用 Amazon 雅典娜和 Amazon 管理服務 Apache Flink 分析亞馬遜 CloudFront 存取日誌 (2017 年 5 月 26 日)。