Apache ログのローテートしてS3に保管する メモ

# vi /etc/crontab

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

01 * * * * root run-parts /etc/cron.hourly
25 23 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
# vi /etc/cron.daily/logrotate
/var/log/httpd/*log {
    missingok
    notifempty
    daily
    rotate 30
    sharedscripts
    postrotate
        /etc/init.d/httpd restart
        /home/ec2-user/bin/CopyTodayLog2S3.bash /var/log/httpd
        /home/ec2-user/bin/CopyTodayLog2S3.bash /var/log/httpd/timeless
    endscript
}

sharedscripts は複数指定したログファイルに対してpostrotateまたはprerotateで記述されたコマンドを1回だけ実行する場合に指定する。逆はnosharedscripts
Web上には sharedscripts の説明を間違って書いてあるページが結構あるので注意↓↓
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/747logrotatecmd.html
http://memorva.jp/memo/linux/apache_logrotate.php

# vi /home/ec2-user/bin/CopyTodayLog2S3.bash
#!/bin/bash

AWS_ACCESS_KEY='AWS_ACCESS_KEY '
AWS_SECRET_KEY='AWS_SECRET_KEY '
BUCKET='hoge-bucket01.domain.info'
BUCKET_FOLDER=`hostname`
TODAY=`date +"%Y%m%d"`
LOG_DIR=$1

if [ -z  $LOG_DIR ]
then
 echo "CopyTodayLog2S3.bash LOG_DIR [/var/log/httpd]"
 exit 1
fi

if [ -d $LOG_DIR ]
then
 s3put -a $AWS_ACCESS_KEY -s $AWS_SECRET_KEY -b $BUCKET \
  -p $LOG_DIR -k /$BUCKET_FOLDER $LOG_DIR/*$TODAY
else
 echo $LOG_DIR" Not found"
fi