Amazon S3のアクセスログを手早く集計する

Amazon S3アクセスログを集計する必要が有ったので、方法を調べてみた。(Amazon S3側のアクセスログ出力は設定済みという前提)

ログは意外にややこしいフォーマットで下記の解析をすれば良いとは分かるのだけど、今回はそこまでの時間がなかったので、ツールの導入をメインに調べてみた。

AmazonS3のサーバーアクセスログをパースして変換するために使った方法をご紹介します。

[AWS][Java] AmazonS3のサーバーアクセスログを解析する [正規表現] | DevelopersIO

必要な要件は下記の通り。

  • 簡単に道入出来ること
    • サーバの運用管理者が使うような高機能なものでは無くて良く、機能は限られていても良いので簡単に導入出来て直ぐに使えるツールが望ましい。
  • 必要な情報は限定的
    • Amazon S3アクセスログなのだから、処理時間などは不要。単純にリソースへのアクセス件数や時刻などが分かれば良い。

いろいろ試したところ、下記の"request-log-analyzer"が最も使い勝手が良く、出力結果も期待に沿ったものだった。(出力例はこちら

A command line tool that parses your log files to create reports.

request-log-analyzer

導入方法は下記の通り。

$ gem install request-log-analyzer

あとはAmazon S3からダウンロードしたログフォルダを指定すれば、結果がHTMLに出力された。

$ request-log-analyzer -f amazon_s3 --output html --file report.html ./logs/

使い勝手が良好だったので、s3cmdを使ってAmazon S3からのログのダウンロード(同期)も自動化させたスクリプトを用意した。これなら、「ローカルに無い差分のログファイルのみをダウンロードしてから、全てのログファイルを対象にアクセスログを集計する」ことが可能になる。

#!/bin/sh
s3cmd sync --skip-existing --delete-removed s3://foo/bar/logs/ ./logs/
request-log-analyzer -f amazon_s3 --output html --file report.html ./logs/

スクリプトはJenkinsのジョブに放り込んで、定期的に実行させるように設定しておいた。優れたツールを使って公開してくれている方に感謝!


関連