查询 Amazon CloudFront 日志
您可以配置 Amazon CloudFront CDN 以将 Web 分配访问日志导出到 Amazon Simple Storage Service。使用这些日志可跨 CloudFront 提供的 Web 属性浏览用户的网上冲浪模式。
在开始查询日志之前,请在您的首选 CloudFront 分配上启用 Web 分配访问登录。有关信息,请参阅《Amazon CloudFront 开发人员指南》中的 访问日志。记录保存这些日志的 Amazon S3 存储桶。
为 CloudFront 标准日志创建表
注意
此过程适用于 CloudFront 中的 Web 分配访问日志。它不适用于 RTMP 分配中的流日志。
为 CloudFront 标准日志文件字段创建表
-
将以下示例 DDL 语句复制并粘贴到 Athena 控制台的查询编辑器中。该示例语句使用《Amazon CloudFront 开发人员指南》的标准日志文件字段部分中记录的日志文件字段。修改用于存储日志的 Amazon S3 存储桶的
LOCATION
。有关使用查询编辑器的信息,请参阅 开始使用。此查询指定了
ROW FORMAT DELIMITED
和FIELDS 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' )
-
在 Athena 控制台中运行查询。查询完成后,Athena 将注册
cloudfront_standard_logs
表,使其中的数据可以供您发出查询。
为 CloudFront 实时日志创建表
为 CloudFront 实时日志文件字段创建表
-
将以下示例 DDL 语句复制并粘贴到 Athena 控制台的查询编辑器中。该示例语句使用了《Amazon CloudFront Developer Guide》的 Real-time logs 章节中记录的日志文件字段。修改用于存储日志的 Amazon S3 存储桶的
LOCATION
。有关使用查询编辑器的信息,请参阅 开始使用。此查询指定了
ROW FORMAT DELIMITED
和FIELDS 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' )
-
在 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 日志
大规模分析 Amazon CloudFront 访问日志
使用 Amazon Lambda、Amazon Athena 和适用于 Apache Flink 的亚马逊托管服务构建无服务器架构来分析 Amazon CloudFront 访问日志