logrotateによるログローテーションの設定です。Apacheに対して行います。
(確認環境:CentOS 6.8,apache 2.2)
目次
説明 | logrotateとは |
logrotateがインストールされているかの確認 | |
apacheのログローテーションの設定 | |
一覧 | ログローテーション関連で使用するファイル |
サンプル | ログローテションの設定 |
ログローテションの設定の確認 | |
補足 | /etc/logrotate.conf |
/etc/logrotate.d/httpd |
logrotateとは
logrotateとは、ログファイルのローテーションを行うプログラムです。
ログファイルを別名でバックアップし、古くなったログファイルを順次削除します。
log + rotateで、rotateは回転させるという意味です。
CentOSでは、必須パッケージのため基本インストールされています。
logrotateがインストールされているかの確認
以下のコマンドを実行し、パッケージ名が表示されればインストールされています。
ない場合はインストールが必要です。
rpm -qa|grep logrotate
表示例:logrotate-3.7.8-17.el6.x86_64
apacheのログローテーションの設定
apacheをパッケージからインストールした場合はlogrotateによるログローテーションの設定は自動でされます。
ソースからインストールした場合は、logrotateの設定を自分で行う必要があります。(/etc/logrotate.d/httpdを作成してログの場所と設定を指定する)
ログローテーション関連で使用するファイル
以下は、ログローテーション関連で使用するファイルの一覧です。
ファイル | 説明 |
---|---|
/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日後の2016/10/26に実行される) |
/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
}
関連の記事