查询 Amazon CloudFront 日志 - Amazon Athena

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

查询 Amazon CloudFront 日志

您可以将 Amazon CloudFront CDN 配置为将网络分发访问日志导出到亚马逊简单存储服务。使用这些日志来探索用户在所服务的网络资产中的浏览模式 CloudFront。

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

为 CloudFront标准日志创建表

注意

此过程适用于 Web 分发访问登录 CloudFront。它不适用于 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 开发者指南》的 “实时日志” 部分中记录的日志文件字段。修改用于存储日志的 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 查询日志的更多信息,请参阅大数据博客中的以下文章。AWS

使用亚马逊 Athena 轻松查询 AWS 服务 日志(2019 年 5 月 29 日)。

大规模分析您的亚马逊 CloudFront 访问日志(2018 年 12 月 21 日)。

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