ブログ

AWS Amazon CloudFront でアクセスログを簡単に確認・分析してみる

AWS で Amazon CloudFront を使用されているケースは多いかと思います。
CloudFront のオリジンサーバーとして EC2 を使用している場合、 EC2 内の Apache 等でログを確認することも可能ですが、前段である CloudFront でもログの確認は可能です。しかも簡単かつ効率的に。

今回は CloudFront でログを設定する手順から確認・分析する手順について紹介します。

なぜ AWS Amazon CloudFront でログを取得するのか

Amazon CloudFront でオリジンサーバーを EC2 としているケースで考えてみます。
EC2 でもログの確認は可能ですが以下の場合に不都合が生じます。

・ALB を経由して複数台の EC2 を配置している場合、オートスケーリング等で増減が発生する場合

・そもそもオリジンサーバーの EC2 に到達できず CloudFront 側でエラーとなる場合

・EC2 側のログではアクセス元が CloudFront の IP アドレスになり、クライアントの IP アドレスではない(ただし設定で変更は一応可能)

・EC2 側のログ管理のメンテナンスを考慮しなければならない

もし CloudFront 側でログを取得しておけば、これらの問題を解決できます。
EC2 の OS 上で Apache のログ設定をするのとは異なり、全て AWS マネジメントコンソールから簡単に設定・確認ができます。現在 CloudFront を使用しログが未設定のものがある場合は、これを機に設定を検討してみるとよいでしょう。

AWS Amazon CloudFront でログを取得する手順

全て AWS マネジメントコンソールにて行なえます。

CloudFront のディストリビューションを新規で作成する場合、設定画面最後の方に「標準ログ記録」の項目がありますので、オンにした上で S3 バケットを選択、必要に応じてログプレフィックスを入力します。
S3 バケットは既存のものではなく、CloudFront のログ保存専用のバケットを新規で作成するとよいです。
事前に S3 バケットを作成した上で CloudFront にて標準ログ記録の設定を行ってください。

S3 の画面へ移動し、CloudFront のログ保存先として指定した S3 バケットに .gz のファイルが生成されていれば CloudFront のログ出力に成功です。

なおログの肥大化防止の為に、一定期間経過後に削除する等の S3 ライフサイクルポリシーの設定は必要に応じて行ってください。

AWS Amazon CloudFront のログを S3 Selectで確認

S3 バケット内に保存された Amazon CloudFront のログは .gz 形式のファイルで保存されます。
これを直接ダウンロードしてファイルの中身を開くとログの内容を確認できます。

ただ、ここから目的のものを探したり分析したりするのは大変ですよね・・・。なので現実的な方法ではありません。

そこで手っ取り早く CloudFront のログを確認する方法として、Amazon S3 Select 機能があります。

Amazon S3 Select では SQL 使用して S3 オブジェクトのコンテンツをフィルタリングし、必要なデータを取得することができます。詳細は公式サイトをご覧ください。

 公式サイト:Amazon S3 Select を使用したデータのフィルタリングと取得

では実際に S3 Select を試してみます。
S3 バケット内の .gz ファイルの画面からオブジェクトアクション→「 S3 Select を使用したクエリ」をクリックします。

例として以下のようにチェックを入れます。

形式: CSV 

CSV区切り記号:タブ

圧縮: GZIP 

SQL クエリの画面で必要な SQL を入力し、実行します。

クエリ結果の画面で SQL の結果を確認できます。ダウンロードも可能です。

SQL クエリの画面にて「テンプレートから SQL を追加する」を選択すると、よく使う SQL を選択できるのも嬉しい機能です。SQL に詳しくなくても大丈夫です。

もちろん SQL に詳しい場合は以下のリファレンスを参考にカスタマイズしてデータを抽出するのもよしです。

 公式サイト:Amazon S3 Select の SQL リファレンス

AWS Amazon CloudFront のログを Amazon Athena で確認、分析

S3 Select で Amazon CloudFront のログを確認することは出来ますが、以下の欠点があります。

・ログファイル単位( .gz 形式)でしか確認できない

・利用できる select コマンド形式に限りがある( RDB ではないため)

そこでもう1つの Amazon CloudFront のログを確認する方法として Amazon Athena があります。
Athena を使用すると S3 内のデータを標準 SQL を使用してデータ抽出・確認・分析が可能です。
標準 SQL を使用できるので RDB と似たような使い方ができます。

 公式サイト:Amazon Athena とは

それでは設定していきます。

  1. Amazon Athena のエディタ画面へ移動し、クエリ結果を保存する S3 のバケットを指定します。
  1. CloudFront テーブルをエディタ画面に入力して実行します。

テーブル作成クエリは以下ドキュメントのクエリをそのままコピーで問題ありません。

 公式サイト:Amazon CloudFront ログのクエリ

※ S3 バケット名は CloudFront ログの保存先を指定します。

  1. 以下のように表示されればテーブル作成は完了です。

続けてデータを抽出します。
直接 SQL を実行してもよいですが、今回は対象テーブルから「テーブルをプレビュー」にて確認してみます。

結果が抽出されました。

S3 Selectとの大きな違いとして、指定した S3 バケット内の全てのログファイル( .gz 形式)を対象としている点です。これにより膨大なファイルの中からも必要なデータを簡単に確認・抽出し、標準 SQL を使用して分析することが出来ます。

AWS Amazon CloudFront でログを簡単に確認・分析してみる(まとめ)

いかかがでしたでしょうか。Amazon CloudFront のログは S3 Select や Amazon Athena を使うことで確認が容易であることをお分かりいただけたかと思います。

S3 Select と Amazon Athena のどちらがよいかはケースバイケースです。

大規模なデータを対象に分析したり複雑な SQL クエリが必要な場合は Amazon Athena 、特定のデータのみを抽出したりシンプルにフィルタリングをしたい場合は S3 Select 等、要件に応じて上手に使い分けするのもよいですね。

なお今回は省略しましたが、ALB のログも同様にして S3 Select と Amazon Athena を使用することが出来ます。

CloudFront も ALB もぜひログ機能を有効化し活用してみてください。

元記事発行日: 2024年01月15日、最終更新日: 2024年02月28日