Apacheが出力するログのローテーション設定を説明します。

前提条件

  • 作業は、root権限を持つユーザで実施します。
  • RHEL 7 / RHEL 8 / CentOS 7 /CentOS 8で手順は共通です。
  • OSおよびApacheは、以下のバージョンで検証しています。
# cat /etc/redhat-release 
CentOS Linux release 8.0.1905 (Core) 
# uname -r
4.18.0-80.el8.x86_64
# httpd -v
Server version: Apache/2.4.37 (centos)
Server built:   Oct  7 2019 21:42:02

設定ファイルのバックアップ

以下のコマンドを実行し、変更前の設定ファイルをバックアップします。

# cp /etc/httpd/conf/httpd.conf{,.`date +"%Y%m%d"`}

設定手順

viなどのテキストエディタで、logrotateのApache用設定ファイルを開きます。

# vi /etc/logrotate.d/httpd

ローテーション設定

以下の3つのパラメータを追加します。rotate 30は、要件に応じて数字を変更してください。過去ログを圧縮したくない場合は、compressの設定は不要です。

  • daily ← ローテーション周期をデフォルトの週次から日次に変更
  • rotate 30 ← ローテーション後の過去ログを30世代保持する
  • compress ← ローテーション後のログを圧縮する(delaycompressが既に設定されているので2世代目以降が圧縮対象)

変更箇所は、以下の通りです。

/var/log/httpd/*log {
(略)

↓

/var/log/httpd/*log {
    daily
    rotate 30
    compress
(略)

設定内容の確認

以下のコマンドを実行し、設定ファイルの文法に問題がないか確認します。文法が正しければ、何も表示されません。エラーが表示される場合は、メッセージに従ってファイルを修正します。

# logrotate -d /etc/logrotate.d/httpd 2>&1 | grep 'error:'

設定の反映

Apacheのログをローテーションしているlogrotateは、cronにより定期的に実行されます。その際に設定を都度読み込むため、手動の設定反映は不要です。