🔥

AthenaでCloudfrontのログを分析できるようにする

2023/01/23に公開

今日は、みてねコールドクターでエンジニアマネージャーをしている遠藤です。
昨年9月に入社して、いろいろ施策を進めてきました。
知見が溜まってきたので、メモがわりにテックブログを始めようと思います。
今回はCloudfrontのログを、Amazon Athenaで分析できるようにした話です。

背景

静的サイトのCDNとしてCloudfrontを利用しています。
Cloudfrontのログを分析するために、S3にログを出力していました。
ログはgzipで圧縮されているので、そのままでは扱いにくいのですが、
Amazon Athenaを使うとデータはそのまま、SQLで分析できるので設定しました。

設定方法

CloudfrontのログをS3に出力する設定は、省略します。
Athenaで分析するためには、テーブルを作成する必要があります。

テーブル作成

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/'
TBLPROPERTIES ( 'skip.header.line.count'='2' )

LOCATIONは、Cloudfrontのログを出力しているS3のパスを指定します。
default.cloudfront_logs は、テーブル名です。

データの確認

データが入っているか確認します。

SELECT DISTINCT *
FROM cloudfront_logs
LIMIT 10;

データの分析

今回は、2022年12月分のアクセスログを出力したかったので、以下のクエリを実行しました。

SELECT DISTINCT *
FROM cloudfront_logs
WHERE "date" BETWEEN DATE '2022-12-01' AND DATE '2022-12-31'

まとめ

CloudfrontのログをAthenaで分析できるようにしました。
SQLを書き直せば、日別、月別、年別のアクセスログを出力できます。

参考

https://docs.aws.amazon.com/ja_jp/athena/latest/ug/cloudfront-logs.html

みてねコールドクターテックブログ

Discussion