查询 Amazon CloudFront 日志 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

查询 Amazon CloudFront 日志

您可以配置 Amazon CloudFront CDN 以将 Web 分配访问日志导出到 Amazon Simple Storage Service。使用这些日志可跨 CloudFront 提供的 Web 属性浏览用户的网上冲浪模式。

在开始查询日志之前,请在您的首选 CloudFront 分配上启用 Web 分配访问登录。有关信息,请参阅《Amazon CloudFront 开发人员指南》中的 访问日志。记录保存这些日志的 Amazon S3 存储桶。

为 CloudFront 标准日志创建表

注意

此过程适用于 CloudFront 中的 Web 分配访问日志。它不适用于 RTMP 分配中的流日志。

为 CloudFront 标准日志文件字段创建表

  1. 将以下示例 DDL 语句复制并粘贴到 Athena 控制台的查询编辑器中。该示例语句使用《Amazon CloudFront 开发人员指南》标准日志文件字段部分中记录的日志文件字段。修改用于存储日志的 Amazon S3 存储桶的 LOCATION。有关使用查询编辑器的信息,请参阅 开始使用

    此查询指定了 ROW FORMAT DELIMITEDFIELDS TERMINATED BY '\t',表示字段由制表符分隔。对于 ROW FORMAT DELIMITED,Athena 默认使用 LazySimpleSerDe。列 date 使用反引号 (`) 转义,因为它是 Athena 中的保留字。有关信息,请参阅保留关键字

    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 Developer Guide》Real-time logs 章节中记录的日志文件字段。修改用于存储日志的 Amazon S3 存储桶的 LOCATION。有关使用查询编辑器的信息,请参阅 开始使用

    此查询指定了 ROW FORMAT DELIMITEDFIELDS TERMINATED BY '\t',表示字段由制表符分隔。对于 ROW FORMAT DELIMITED,Athena 默认使用 LazySimpleSerDe。列 timestamp 使用反引号 (`) 转义,因为它是 Athena 中的保留字。有关信息,请参阅保留关键字

    以下示例包含所有可用字段。若有不需要的字段,可将相应字段注释掉或者删除掉。

    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 日志的详细信息,请参阅 Amazon 大数据博客中的以下文章。

使用 Amazon Athena 轻松查询 Amazon Web Service 日志(2019 年 5 月 29 日)。

大规模分析 Amazon CloudFront 访问日志(2018 年 12 月 21 日)。

使用 Amazon Lambda、Amazon Athena 和适用于 Apache Flink 的亚马逊托管服务构建无服务器架构来分析 Amazon CloudFront 访问日志(2017 年 5 月 26 日)。