S3のログファイルは、下記のように1日の中でも細分化されます。
access_log-2011-10-11-00-15-33-7E85B60CC1846A80
access_log-2011-10-11-00-16-02-74E3E7E940850885
access_log-2011-10-11-01-15-16-4F73FF952D5D961D
access_log-2011-10-11-01-15-38-3290ED7965705AC2
access_log-2011-10-11-01-15-51-8C02CBA57C279DE8
上記のままでは利用しづらいので、日ごとにまとめる(デイリー化)下記のようなシェルスクリプトを作成してみました。
#!/bin/sh export LANG=C LOGDIR="/opt/cloudpack/s3/suzuki_suz-lab.com/www.suz-lab.com_s3-log-original" ARCHIVEDIR="/opt/cloudpack/s3/suzuki_suz-lab.com/www.suz-lab.com_s3-log-daily" WORKDIR="/opt/cloudpack/tmp/`mkpasswd -l 8 -s 0 -C 8 -c 0 -d 0`" TARGETDATE=`date -d "$1" "+%Y-%m-%d"` NEXTDATE=`date -d "$1 1 day" "+%Y-%m-%d"` PATTERN="[`date -d "$1" "+%d/%b/%Y"`" mkdir -p $WORKDIR cp $LOGDIR/access_log-$TARGETDATE* $WORKDIR/ cp $LOGDIR/access_log-$NEXTDATE* $WORKDIR/ logresolvemerge.pl $WORKDIR/* | grep "$PATTERN" > $WORKDIR/access_log-$TARGETDATE gzip $WORKDIR/access_log-$TARGETDATE cp $WORKDIR/access_log-$TARGETDATE.gz $ARCHIVEDIR/access_log-$TARGETDATE.gz cp $WORKDIR/access_log-$TARGETDATE.gz $ARCHIVEDIR/access_log.gz rm -rf $WORKDIR
上記のシェルスクリプトは下記のような形で作成しています。
(1) S3のログはs3fsでファイルシステムとしてマウントして取得
(2) 作業ディレクトリは/opt/cloudpack/tmp/XXXXXXXX
(3) デイリー化したいログの日付は引数に20111010のように指定
(4) 指定した日付の元ログ(次の日のログも)を作業ディレクトリにコピー
次の日付けののログ(0:00付近)にも前日のログが残っていることがあります。
(5) 一つのログにマージして該当日付のものだけファイル化
logresolvemerge.plでマージして、該当日付にマッチするものだけgrepしています。
(6) 圧縮して指定ディレクトリに配置
ログ解析用に最新ものがaccess_log.gzになるようにもしています。
(7) 作業ディレクトリを削除
尚、mkpasswdとlogresolvemerge.plは下記のように本ブログで紹介済みです。
▼mkpasswd
▼logresolvemerge.pl