Amazon CloudFront ログのクエリ - Amazon Athena

Amazon CloudFront ログのクエリ

Amazon CloudFront CDN を設定して、ウェブディストリビューションのアクセスログを Amazon Simple Storage Service にエクスポートできます。これらのログを使用して、CloudFront によって提供されるウェブプロパティ全体でのユーザーのサーフィンパターンを調べます。

ログのクエリを開始する前に、使用する CloudFront ディストリビューションでウェブディストリビューションのアクセスログを有効にします。詳細については、Amazon CloudFront 開発者ガイドの「アクセスログ」を参照してください。

ログを保存する Amazon S3 バケットをメモしておきます。

注記

この手順は、CloudFront にあるウェブディストリビューションのアクセスログで機能します。RTMP ディストリビューションのストリーミングログには該当しません。

CloudFront ログのテーブルの作成

CloudFront テーブルを作成する

  1. 以下の DDL ステートメントをコピーして Athena コンソールのクエリエディタに貼り付けます。LOCATION をログを保存する Amazon S3 バケットに変更します。クエリエディタの使用については、「ご利用開始にあたって」を参照してください。

    このクエリは、デフォルトの SerDe である LazySimpleSerDe を使用します。列 date は Athena の予約語であるため、バックティック (`) を使用してエスケープされています。詳細については、「予約キーワード」を参照してください。

    CREATE EXTERNAL TABLE IF NOT EXISTS default.cloudfront_logs ( `date` DATE, time STRING, location STRING, bytes BIGINT, request_ip STRING, method STRING, host STRING, uri STRING, status INT, referrer STRING, user_agent STRING, query_string STRING, cookie STRING, result_type STRING, request_id STRING, host_header STRING, request_protocol STRING, request_bytes BIGINT, time_taken FLOAT, xforwarded_for STRING, ssl_protocol STRING, ssl_cipher STRING, response_result_type STRING, http_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://CloudFront_bucket_name/CloudFront/' TBLPROPERTIES ( 'skip.header.line.count'='2' )
  2. Athena コンソールでクエリを実行します。クエリが完了すると、Athena が cloudfront_logs テーブルを登録し、そのデータに対してクエリを発行できるように準備します。

CloudFront ログのクエリ例

以下のクエリは、2018 年 6 月 9 日から 6 月 11 日の間に CloudFront によって提供されたバイト数をCに で処理されたバイト数を集計します。date 列名は予約語であるため、二重引用符で囲みます。

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

クエリ結果から重複する行 (重複する空の行など) を削除するには、次の例のように SELECT DISTINCT ステートメントを使用します。

SELECT DISTINCT * FROM cloudfront_logs LIMIT 10;

その他のリソース

Athena を使用した CloudFront ログのクエリについての詳細は、AWS ビッグデータブログの以下の記事を参照してください。

Amazon Athena を使用して AWS のサービスログを簡単にクエリする (2019 年 5 月 29 日)。

Amazon CloudFront のアクセスログを大規模に分析する (December 21, 2018 年 12 月 21 日)。

AWS Lambda、Amazon Athena、Amazon Kinesis Data Analytics を使用して Amazon CloudFront アクセスログを分析するためのサーバーレスアーキテクチャを構築する (2017 年 5 月 26 日)。