Amazon CloudFrontの強化されたアクセス分析機能を整理してみた

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ども、大瀧です。
先日、CloudFrontのアクセス分析機能の大幅拡張がありました。分析機能全般がグッと底上げされているのですが、元々何ができて、新たに何ができるようになったのかちょっとわかりにくかったので、この記事でまとめておきます。

CloudFrontのアクセス分析機能

CloudFrontのアクセス分析機能は、大きく分けて以下3つに分類できます。それぞれ概要と今回のアップデート内容をまとめます。

  1. レポート画面
  2. CloudWatchメトリクス
  3. アクセスログ

レポート画面

AWS Management ConsoleのCloudFront管理画面、[Reports & Analytics]メニューにあるWebブラウザ上に表示されるレポート画面です。[Usage Reports](使用量レポート)は従来からあり、今回のアップデートで[Cache Statistics](キャッシュ統計)と[Popular Objects](アクセス数ランキング)が追加されました。

cf-analitics01

Cache Statistics(キャッシュ統計)

CloudFrontはWeb Distributionの場合、オリジン(コンテンツ供給元)にあるHTMLや画像ファイルなどのコンテンツを分散してキャッシュすることで、負荷に耐えかつ高速なコンテンツ配信を実現します。クライアントからのリクエストに対してどれくらいの割合でキャッシュで応答(ヒット)できたのか、オリジンにコンテンツを取りに行った(ミスした)のかは、CloudFrontの運用で最も重要な統計情報になります。キャッシュ統計では、1時間ないし1日間単位のキャッシュの統計を折れ線グラフで確認することができます。

グラフは、表示する開始日/終了日のほか、[Granularity]として上述の1日/1時間の単位切り替えや[View Location](地域の絞り込み)、[Distribution](ディストリビューションの絞り込み)が設定できます。[Update]ボタンをクリックしないと設定が適用されないことに注意してください。

cf-analitics02

以下5つのグラフが表示されます。

  • Total Requests(リクエスト総数)
  • Percentage of Viewer Requests by Result Type(結果タイプごとのリクエストの割合)
  • Bytes Transferred to Viewers(クライアントへの転送バイト数)
  • HTTP Status Codes(HTTPステータスコード数)
  • Percentage of GET Requests that Didn't Finish Downloading(ダウンロード未完了だったGETリクエスト数)

キャッシュのヒット率を見るのは、Percentage of Viewer Requests by Result Typeです。Hitsでヒットした率、Missはキャッシュが無いのでオリジンに取りにいった率です。

cf-analytics03

このグラフのメトリクスの合計値は100%にはならないことに注意してください。ここで言うResult Typeには、グラフに載る項目以外にもRefreshHit(キャッシュはあるが有効期限が切れていたので再取得)など、いくつかのタイプがあるためです。合計値を見るのではなく、個別の値の高い/低いで評価するべきです。また、グラフはUTC(世界標準時)で表示されるので、日本時間とのズレも意識する必要があります。CloudWatchのグラフと異なり、タイムゾーンを変更することはできないようです。

Popular Objects(アクセス数ランキング)

直近60日間のアクセス数ランキングです。ランキング表示期間を日付単位で絞ることもできますが、こちらもUTC基準になることに注意が必要です。

cf-analytics04

ちなみに、今回の例だとランキング1位のキャッシュヒット率が0%になっていますが、これは動的コンテンツをEC2で提供しているためで、それ以外のコンテンツをS3から提供するよう、ビヘイビアでマルチオリジンを構成しています。

Usage Reports(使用量レポート)

従来からある、アクセス概要のレポートです。以下6つのグラフを表示します。

  • Number of HTTP Requests(HTTPリクエスト数)
  • Number of HTTPS Requests(HTTPリクエスト数)
  • Data Transferred over HTTP(HTTPデータ転送量)
  • Data Transferred over HTTPS(HTTPSデータ転送量)
  • Data Transferred from CloudFront Edge Locations to Your Users(CloudFrontエッジロケーションからユーザーへのデータ転送量)
  • Data Transferred from CloudFront to Your Origin(オリジンからCloudFrontエッジロケーションへのデータ転送量)

HTTP/HTTPSや、ユーザー → CloudFront → オリジンを区別して表示できるのが良いですね。以下の例のように、キャッシュが効くとオリジンからの転送量が極端に少なくなる様子が見て取れます。

cf-analytics05

CloudWatchメトリクス

先行して10/9にリリースされた機能です。AWSの標準監視サービスであるCloudWatchに、CloudFrontのメトリクス(統計値)が1分間隔で自動で記録されています。保存期間は14日で、それより古いデータは消去されます。メトリクスはCloudWatchの管理画面でグラフ表示できるほか、しきい値を設定してアラームを発報することも可能です。CloudWatchでの操作については、こちらのブログ記事を参照ください。

CloudWatchにはメトリクスを取得するAPIもあるので、独自の監視ツールやログアグリゲーションサービスなどの外部ツールと連携する際に利用するのも良いでしょう。

アクセスログ

CloudFrontディストリビューションで事前に設定することで、1時間ごとのアクセスログを指定したS3バケットにアップロードすることができます。いわゆる生ログなので他の分析方法よりも圧倒的に情報量が多く、より詳細な分析に向いていると言えます。

これも従来からある機能ですがログ集約ロジックが改善されたとのことで、アップロードのタイムラグが2〜3時間から1時間に短縮され(ただしベストエフォート)、ファイルアップロード頻度(≒ファイル数)も少なくなりました。

cf-analytics06

S3バケットに、"ディストリビューションID.YYYY-MM-DD-HH.ユニークなID.gzというファイル名で、Gzip圧縮形式で保存されます。フォーマットは下記のドキュメントを参照してください。

cf-analytics07

従来、1時間あたり多いと50個以上作成されていたファイルが概ね10個未満になったのが非常に嬉しいです。ドキュメントにある24時間以内に遅延して追加されることがあるベストエフォートで全てのログが保存される保証はないという点に注意しつつ集計、分析に活用できると思います。EMRと連携させる手法を弊社都元が解説した下記ブログエントリーも参考にしてください。

まとめ

それぞれの特徴を表にまとめてみました。

項目名 即時性 視覚性 情報量
レポート画面 × 数時間遅れる 少ない
CloudWatchメトリクス ◯ 分単位で取得できる 少ない
アクセスログ △ 1〜2時間遅れる × 多い

手軽さや粒度などを理解いただき、うまく使い分けできれば良いと思います。CloudFrontを使いこなして大規模/グローバルWebサイトの構築に活用しましょう!