CentOS 8 Apacheログのローテーション

クラウドに移設したサーバーでログのローテーションを忘れていたみたいで、最近確認すると4G近くになってました

# ls -lh /var/www/vhosts/www.example.com/log/
合計 3.9G
-rw-r--r-- 1 apache apache 3.9G  9月  8 00:15 ssl-access.log
-rw-r--r-- 1 apache apache 360K  9月  3 20:17 ssl-error.log

ログのローテーションは、以下のような流れで行なわれます

1.crondで、logrotate コマンドが実行され、夜間にログローテーションが実行されます。
呼び出されるファイルは「/etc/cron.daily/logrotate」 にありますので確認します

$ cat /etc/cron.daily/logrotate 
#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit $EXITVALUE

2.「/etc/logrotate.conf」の設定ファイルでは、「/etc/logrotate.d」にあるファイルがインクルードされているので、そこにある「/etc/logrotate.d/httpd」がApacheのログローテーションするファイルとなります

$ grep "include" /etc/logrotate.conf
include /etc/logrotate.d

3.「/etc/logrotate.d/httpd」のファイルを編集して、ログがあるファイル等を設定していきます

$ cat /etc/logrotate.d/httpd 
/var/log/httpd/*log
/var/www/vhosts/www.example.com/log/*.log
/var/www/vhosts/blog.example.com/log/*.log
{
  daily
  rotate 90
  missingok
  notifempty
  dateext
  sharedscripts
  postrotate
    /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
  endscript
}

設定内容は以下のようになります

daily ログの取得期間は、毎日に設定。週間で取る場合は「weekly」となります
rotate 90 ログの取得回数を設定します。90日間ログを取得するようにします
missingok ログファイルが無い場合エラーとして扱わないように設定します。エラーとして扱い場合は「nomissingok」とします
notifempty 空のファイルをローテーションしないようにします。からの場合でもローテーションする場合は「ifempty」とします
dateext 古いログファイルにリネームするときは、日付8桁(-YYYYMMDD) とします
sharedscripts 複数指定したログファイルに対して、postrotateまたはprerotateで記述したコマンドを実行します
postrotate~endscript postrotateとendscriptの間に記述されたコマンドをログローテーション後に実行します

4.設定が完了すると、ローテーションができるかデバックします

$ sudo logrotate -d /etc/logrotate.d/httpd

5.デバックで問題がなければ、設定内容を反映します

$ sudo logrotate -v /etc/logrotate.conf

 

LinuxCentOS 8

Posted by admin