Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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 ログのクエリ
料金

ran
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away