logrotateによるログローテーション

logrotateとは?

ログファイルを放置するとどんどんファイルは肥大化し、いつかはハードディスクの空き容量を使いきってしまいます。
これを防ぐためにLinuxではlogrotateと呼ばれるログローテーション機構を利用しています。

ディストリビュータで配布されているバイナリパッケージから導入したアプリケーションは、既にこのlogrotateの設定がなされている場合がほとんどですが、
ローテーション間隔を変更する場合や、自分でソースなどから導入したアプリケーションを利用する場合は設定が必要です。

 

 

logrotateの設定ファイルと動き

まずは、logrotateの動作結果を見てみましょう。
/var/log/の中を覗いて見るとこんなファイルが存在します。
messages
messages.1
messages.2
messages.3
messages.4


この内messagesが現在利用されているファイルで、messages.1が一世代前のファイルです。
以降数字が増える毎に世代が古くなります。
この世代交代をしているのがlogrotateです。

 

世代交代(ローテーション)の実行タイミング

世代交替(ローテーション)を起動しているのは、cronです。
おそらく多くのディストリビューションでは、/etc/cron.dailylogrotateファイルがあり、以下の設定がなされていると思います。

#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf

logrotateは、cronにより定期的に実行され、実行時に/etc/logrotate.confを読み込みます。

 

/etc/logrotate.confの設定内容

/etc/logrotate.confには、統一的な設定がされており、「ローテーション間隔」、「世代数」、
「圧縮の可否」、「各ログファイルごとの設定ファイルの場所」などが設定されています。

# see "man logrotate" for details
# rotate log files weekly
daily  *ローテーションを行う間隔(daily,weekly,monthlyで指定)

# keep 4 weeks worth of backlogs
rotate 6  *ローテーションの世代数を指定

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

# 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 -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
    rotate 1
}

 

各ログファイルごとの設定ファイル

各ログファイルに対する設定は、/etc/logrotate.d/内に設定ファイルがあります。

ここで、各ログファイルごとの細かい制御を設定しています。

Apacheの例

/var/log/httpd/*log {
	missingok
	notifempty
	sharedscripts
	postrotate
		/bin/kill -HUP `cat /var/run/httpd.pid 2 > /dev/null` 2>/dev/null || true
	endscript
}

この例は、Apacheのログファイルローテーション用の例です。

デーモンとして動くプロセスの多くは、ログローテーションでファイルが切り替わった時プロセスをリセットしないと、新しいファイルへの書き込みができません。

 

ここでは設定していないですが、この他にローテーション間隔を指定することもできます(daily,weekly,monthlyで指定)。
その場合は、logrotate.confで設定されているローテーション間隔の設定よりこちらの設定を優先します。

 

また、syslogのように複数のログファイルを管理している場合は、下記のようにまとめて記述することが可能です。

syslogの例

/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
	sharedscripts
	postrotate
		/bin/kill -HUP `cat /var/run/syslogd.pid 2 > /dev/null` 2> /dev/null || true
	endscript
}

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <img localsrc="" alt="">