Amazon CloudFront ログのクエリ - Amazon Athena

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon CloudFront ログのクエリ

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

ログのクエリを開始する前に、希望するディストリビューションのウェブディストリビューションアクセスログを有効にしてください。 CloudFront 詳細については、Amazon CloudFront 開発者ガイドのアクセスログ」を参照してください。これらのログを保存する Amazon S3 バケットを書き留めておきます。

CloudFront標準ログ用のテーブルを作成します。

注記

この手順は Web ディストリビューションのアクセスログインに有効です CloudFront。RTMP ディストリビューションのストリーミングログには該当しません。

CloudFront 標準ログファイルフィールド用のテーブルを作成するには

  1. 次の DDL ステートメントの例をコピーして Athena コンソールのクエリエディタに貼り付けます。サンプルステートメントでは、Amazon CloudFront 開発者ガイドの標準ログファイルフィールド」セクションに記載されているログファイルフィールドを使用しています。LOCATION をログを保存する Simple Storage Service (Amazon S3) バケットに変更します。クエリエディタの使用については、「開始」を参照してください。

    このクエリでは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 開発者ガイドのリアルタイムログ」セクションに記載されているログファイルフィールドを使用しています。LOCATION をログを保存する Simple Storage Service (Amazon S3) バケットに変更します。クエリエディタの使用については、「開始」を参照してください。

    このクエリでは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 日までの間に処理されたバイト数を合計します。date 列名は予約語であるため、二重引用符で囲みます。

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 (2019 年 5 月 29 日) AWS のサービス を使用してログを簡単にクエリできます

Amazon CloudFront アクセスログを大規模に分析してください (2018 年 12 月 21 日)。

Amazon Athena と Apache Flink 用の Amazon マネージドサービス (2017 年 5 月 26 日) を使用して AWS Lambda、Amazon CloudFront アクセスログを分析するサーバーレスアーキテクチャを構築します