AWS
SQL
S3
CloudFront
Athena

CloudFront から S3 へ出力されたログを、Athena で解析してみる


0.はじめに

先日、こちらの記事の対応を行ったんですが、

S3 へ出力されたログを解析するのにいい方法が無いかと調べたところ、Athena で解析するのがいいみたいなので試してみました。

基本的には、以下のページの手順に従って進めました。

他にこちらの記事なども参考にさせて頂きました。

こういった方々がノウハウをシェアして頂けることは、本当にありがたいですね♪

感謝!! 🙇‍♂️


1.S3 のログファイルのデータを Athena でテーブルを作成して入れ込む


  1. Athena のコンソールを開きます。



  2. 以下のクエリを実行して、テーブルを作成し、S3 のログファイルのデータを入れ込みます。


    • ※参考にしたサイトに記載されているクエリそのままです。S3 バケットを変えただけ。

    • FireShot Capture 004 - Athena - ap-northeast-1.console.aws.amazon.com.png



CREATE EXTERNAL TABLE IF NOT EXISTS default.cloudfront_logs (

`date` DATE,
time STRING,
location STRING,
bytes BIGINT,
requestip STRING,
method STRING,
host STRING,
uri STRING,
status INT,
referrer STRING,
useragent STRING,
querystring STRING,
cookie STRING,
resulttype STRING,
requestid STRING,
hostheader STRING,
requestprotocol STRING,
requestbytes BIGINT,
timetaken FLOAT,
xforwardedfor STRING,
sslprotocol STRING,
sslcipher STRING,
responseresulttype STRING,
httpversion STRING,
filestatus STRING,
encryptedfields INT
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION 's3://[S3 のバケット名]/[CloudFront の Log Prefix]/' TBLPROPERTIES ( 'skip.header.line.count'='2' )


2.作成した Athena のテーブルへ、クエリを実行して必要なデータを抽出する


  1. 以下の様なクエリを実行して、テーブルから必要なデータを抽出します。


    • 以下のクエリは、


      • [日付(YYYY-MM-DD)] より後の、 ※画像では、2019-03-03

      • [URL パス] へのアクセスで、 ※画像では、/portal/index.html

      • [IP アドレス] からのアクセス



    • となっています。

    • FireShot Capture 005 - Athena - ap-northeast-1.console.aws.amazon.com.png



SELECT * FROM default.cloudfront_logs

WHERE date > date '[日付(YYYY-MM-DD)]'
AND uri = '[URL パス]'
AND requestip = '[IP アドレス]'


99.ハマりポイント


  • そこまでハマりはしませんでいたが…、




  • クエリの WHERE 句の、DATE 条件がわからなくてちょっと困りました…。


XX.まとめ

CloudFront の導入で、運用や管理のやり方も変わってくるので、正直不安もありますが、こういったサービスがしっかりと用意されているのが、AWS の強みかと思います。

本当は、CloudWatch Logs に出力されると嬉しい気もしますが…、データ量が多すぎるとコスト量むし、このやり方がいい落としどころなのかもしれないですね。

何かご参考になれば嬉しいです!!

では♪