AWSパートナー 電話番号 電話番号 お問い合わせ

受付時間 平日10:00~18:00

TOP

資料ダウンロードはこちら >>

ロゴ

AWSやシステム・アプリ開発の最新情報|クロスパワーブログ

AWS EC2 S3

EC2にS3バケットをマウントして古いsyslogを保管(3) ~ローテート設定~

PCイメージ

takaokaです。
前回前々回に続き、今回はログローテーションの設定をしてみたいと思います。
 
■ローテートの例
・/etc/logrotate.d/syslogに記載されている下記のログをローテート対象としてみます。
 /var/log/cron
 /var/log/maillog
 /var/log/messages
 /var/log/secure
 /var/log/spooler
・世代数は「2」としました。
 
■設定について
ローテーション設定で、指定したディレクトリにローテート可能な「olddir」というコマンドがありますが、ローカルデバイスのみにしか対応していません。このため少々シェルコマンドを使いローテートをする設定を入れこみます。
 
■/etc/logrotate.d/syslog を編集します
変更前(デフォルト値)

# cat /etc/logrotate.d/syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
 sharedscripts
 postrotate
  /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
 endscript
}
#

 
変更後

# cat /etc/logrotate.d/syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
 sharedscripts
 postrotate
  /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
  rotate=2
  archive_dir=/var/log/archive/
  for logname in $*
  do
   mv ${logname}-`date +%Y%m%d` ${archive_dir}
   find ${archive_dir} -name “`basename ${logname}`-∗” -mtime +${rotate} -exec rm -f {} \;
  done

 endscript
}
#

 
黄色文字が追加した記述です。
・$rotateに世代数(世代日数)、$archive_dirにS3のマウントポイントを定義しています。
・for文で$∗を回します。$∗には/var/log/cron、/var/log/maillog、・・・が代入されていくので、$lognameに格納します。
・mvコマンドでローテートされた当日ファイル名のファイルを$archive_dirに移動します。
・findコマンドで$archive_dirを起点として$logname-∗のファイルを検索し、$rotate(世代日数)より過去のファイルを削除しています。
 
この設定以降、ローテートのタイミングで2世代は常にS3側へ保存されます。