S3にログファイルを保存し、Athenaで検索します。
S3にログ用bucketを用意する
ログファイルを保存するbucketを作成します。
ここではtest-logs
とします。
さらにこのbucketの中に、test1
というフォルダを作って、ここに保存することにします。
CloudFrontの設定でログ出力をOnにする
ログを出したいCloudFrontのGeneralタブでEditボタンを押し、以下のように設定します。
項目 | 値 |
---|---|
Logging | On |
Bucket for Logs | test-logs.s3.amazonaws.com(選択肢に出るはず) |
Log Prefix | test1/ |
SaveするとS3の該当フォルダにログファイルが保存され始めます。
Athenaで見る
ログファイルは複数ファイルに分かれ、gzで圧縮されているので、ダウンロードして見るのはなかなかめんどうなので、Athenaでテーブルを作って見てみます。
クエリエディタでクエリを書くところに以下を書き、実行します。
(下から2行目のLOCATION
にログが保存されている場所を書きます。)
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://test-logs/test1/'
TBLPROPERTIES ( 'skip.header.line.count'='2' )
これでdefaultデータベースにcloudfront_logsというテーブルができたので、あとはSQLで好きなようにSELECTできます。
例えば
SELECT requestip, COUNT(*) AS num FROM cloudfront_logs WHERE uri LIKE '/contents/hoge/%' GROUP BY requestip ORDER BY requestip
などなど。
Athenaの料金は実行するクエリに対して発生し、『スキャンされたデータ 1 TB あたり 5 USD』ということなので、ログが大量になったら少し心配ですが、ちょっとログ出して確認したい時とかにはいいのではと思います。