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

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側へ保存されます。

 

 

 

アプリケーション開発バナー