いろんなところから切貼。主に以下の本p181。
gihyo.jp
■AmazonLinux(EC2)で、サーバにS3アクセス可能ロールが付与されている場合
※以下はS3への十分なアクセス権ロールが付与されていることが前提。FullAccessとか・・・
/etc/logrotate.d/nginx を以下の様に。
/var/log/nginx/*.log { daily rotate 24 compress missingok notifempty sharedscrits postrotate [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid` endscript lastaction HOSTNAME=`hostname` filename=$1 today=`date +"%Y%m%d"` echo "uploading ${filename}" > /var/log/logrotate.nginx for f in `ls -l ${filename}`; do upload_file="${f}-${today}.gz" aws s3 cp ${upload_file} s3://hogehoge-logs/${HOSTNAME}/`basename ${upload_file}` >> /var/log/logrotate.nginx 2>&1 done endscript }
■AmazonLinuxじゃない(EC2じゃない)CentOSでもやってみた
s3アクセスを許可したIAMアカウントを作成し、アクセスキー等を取得しておく
(手順省略)
定義ファイル(credentials)の作成
aws configure AWS Access Key ID [None]: <アクセスキー> AWS Secret Access Key [None]: <シークレットアクセスキー> Default region name [None]:<リージョン> Default output format [None]:
→~/.aws/credentialsに上記内容が保存される。
# s3コマンド叩いてみる
aws s3 ls
# nginx のログローテーションに追記
事前にS3バケット:hogehoge-logs を作成しておく
vi /etc/logrotate.d/nginx
/var/log/nginx/*.log { daily rotate 24 compress missingok notifempty sharedscrits postrotate [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid` endscript lastaction export AWS_SHARED_CREDENTIALS_FILE=/root/.aws/credentials HOSTNAME=`hostname` filename=$1 today=`date +"%Y%m%d"` echo "uploading ${filename}" > /var/log/logrotate.nginx for f in `ls -l ${filename}`; do upload_file="${f}-${today}.gz" aws s3 cp ${upload_file} s3://hogehoge-logs/${HOSTNAME}/`basename ${upload_file}` >> /var/log/logrotate.nginx 2>&1 done endscript }
S3からログ取得メモ
上記の様にしてS3に保存したログをまとめて取得したい
# 一覧確認
aws s3 ls s3://hogehoge-logs/server01/2017/
server01_log.20170201.tar.gz server01_log.20170202.tar.gz … server01_log.20170228.tar.gz
# ログをまとめて取得
aws s3 cp s3://hogehoge-logs/server01/2017/ . --recursive --exclude "*" --include "*_log.201702*"
# ワイルドカードはそのまま使えない。このようにしてexcludeでいったん全部対象外とした後、includeで対象を指定する
# 参照:http://dev.classmethod.jp/cloud/aws/s3-logfile-copy-by-awscli/
以上。