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
ディスカッション
コメント一覧
まだ、コメントがありません