LoginSignup
12
8

More than 5 years have passed since last update.

AWS CloudFrontのアクセスログを確認する

Posted at

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』ということなので、ログが大量になったら少し心配ですが、ちょっとログ出して確認したい時とかにはいいのではと思います。

参考

アクセスログの設定および使用
Amazon CloudFront ログのクエリ
料金

12
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
8