Apache logrotateによるログローテーションの設定について

Apacheのlogrotateによるログローテーションの設定についてです。

確認環境
・CentOS 6.8
・apache 2.2

目次

logrotateとは

logrotateとは、ログファイルのローテーションを行うプログラムです。
ログファイルを別名でバックアップし、古くなったログファイルを順次削除します。
CentOSの必須パッケージのため基本インストールされています。

apacheのログローテーションの設定

apacheをパッケージからインストールした場合はlogrotateによるログローテーションの設定は自動でされます。

ソースからインストールした場合は、logrotateの設定を自分で行う必要があります。(/etc/logrotate.d/httpdを作成してログの場所と設定を指定する)

logrotateがインストールされているかの確認 

logrotateのインストールの確認方法は、下記のコマンドを実行し、パッケージ名が表示されればインストールされています。ない場合はインストールが必要です。

rpm -qa|grep logrotate

表示例:logrotate-3.7.8-17.el6.x86_64

ログローテーション関連で使用するファイル

以下は、ログローテーション関連で使用するファイルの一覧です。

ファイル 説明
/var/log/httpd/access_log apacheのアクセスログ(デフォルトの出力場所)
/var/log/httpd/error_log apacheのエラーログ(デフォルトの出力場所)
/etc/cron.daily/logrotate logrotateはcronによって実行されます
/var/lib/logrotate.status ファイルをローテーションした最後の日時が記録されます。
例 /var/log/httpd/access_log" 2016-10-25
この情報をもとに例えばdailyの設定がされていれば1日後に実行されます。
/etc/logrotate.conf logrotateの全体の設定ファイル。
/etc/logrotate.d/httpd /etc/logrotate.d/配下は、サービスごとのlogrotateの設定ファイルが置かれます。/etc/logrotate.d/httpdにはApacheのローテーションの設定が記述されます。

ログローテションの設定

例としてhttpdの2日分のログを保存し保存期間が過ぎたログは削除するという設定です。
/etc/logrotate.d/httpdファイルを修正します。

/var/log/httpd/*log {
daily
rotate 2
missingok
ifempty
dateext
sharedscripts
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript
}
設定 説明
/var/log/httpd/*_log ローテートするファイルを指定
daily ローテションを行う間隔を指定する
daily・・・ローテションを毎日行う
weekly・・・ローテションを毎週行う
monthly・・・ローテションを毎月行う
rotate 2 保存されるアーカイブファイルの数 ここでは2つ残している
missingok missingok・・・ログファイルがなくてもエラーにならない nomissingok・・・ログファイルがない場合エラーにする
ifempty ifempty・・・ログファイルが空でもローテーションする noifempty・・・ログファイルが空の場合はローテーションしない
dateext アーカイブされたファイルの末尾に年月日が付与される dateextがない場合は.数が付与される
sharedscripts /var/log/httpd/*logに該当するファイルが複数ある場合でも postrotateからendscriptまでの実行は1回のみという設定
postrotate endscripまでのコマンドをログローテーション後に実行
/sbin/service httpd reload > /dev/null 2>/dev/null || true httpdの再起動を行う処理。httpdが新たに作成したログファイルに記録し始める。

ログローテションの設定の確認

1./var/lib/logrotate.status の日付を1日前(任意の日数)にします。
2.logrotate -dv  /etc/logrotate.d/httpdを実行します。

(補足)/etc/logrotate.conf

以下は、logrotateのデフォルトの/etc/logrotate.confです。

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
        minsize 1M
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

(補足)/etc/logrotate.d/httpd

以下は、logrotateのデフォルトの/etc/logrotate.d/httpdです。

/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
}

△上に戻る