🔥
AthenaでCloudfrontのログを分析できるようにする
今日は、みてねコールドクターでエンジニアマネージャーをしている遠藤です。
昨年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を書き直せば、日別、月別、年別のアクセスログを出力できます。
参考
Discussion