How to build Internet Server with Linux

last update: 29 Sep 2004

home |index |previous |next |contents

logrotateの運用


ログファイルの管理



7.1 logrotateについて
ログファイルは、時間とともにサイズが大きくなっていきますので、適当な頻度でログファイルをローテーションさせる必要があります。
ここでローテーションとは、例えばmessagesというログファイルをmessages.1、messages.1をmessages.2、...というようにログファイル名を順送りに変更し、新たな(サイズゼロの)messagesログファイルを生成することです。

RedHatをはじめ多くのディストリビューションでは、 logrotateプログラムを使ってログファイルのローテーションを行っています。
7.2 設定
ローテーションの細かな設定は"/etc/logrotate.conf"ファイル、およびRedHatディストリビューションの場合"/etc/logrotate.d/"ディレクトリ以下の設定ファイル群、で行います。

はじめに、logrotate設定ファイルで設定できるコマンドについて、表に示します。

コマンド 説明
rotate [N] 指定したログファイルのローテーション回数を指定する。この場合N回。
Missingok ログファイルが無くとも、処理を正常終了する。
compress 古いログファイルをgipで圧縮する。
nocompres 圧縮しない。
size [size M/K] ログファイルが指定したサイズまで大きくなったらローテーションを開始する。サイズはメガ[M]かキロ[K]で指定する。
create [permition] [owner] [group] ログファイルのローテーション開始時に、新たにファイルを生成する。パーミッション、所有者、グループを指定できる。
ncreate 新たにファイルを生成しない。
ifempty ログファイルが空でもローテーションを行う。
noifempty ログファイルが空ならローテーションを行わない。
daily ログファイルを毎日、ローテーションする。
weekly ログファイルを毎週、ローテーションする。
monthly ログファイルを毎月、ローテーションする。
postrotate このコマンドの後に、ログファイルのローテーション後に実行するUNIXコマンドを記述する。
endscript postrotateの終端を示す。
sharedscripts 複数指定されたログファイルに対し、postrotate以降設定されたUNIXコマンドを実行する。
include [dir] dirディレクトリ以下の各種設定ファイルを読み込む。

具体的な例として、 以下にRedHat7.2のlogrotate.confファイル、および各種サービスのlogrotate用設定ファイルについて解説します。

  1. /etc/logrotate.conf
    以下に/etc/logrotate.confファイルを示します。このファイルにはlogrotateの全般的な設定が書かれています。

    3行目で、ローテーションの頻度が指定されています。デフォルトの設定ではweekly(毎週)ローテーションを行うよう設定されています。もしも頻度を変えたければ、daily(毎日)、monthly(毎月) を指定することが出来ます。

    18行目の"include"コマンドで"/etc/logrotate.d"ディレクトリ以下の各種設定ファイルが読み込まれます。
    各ログファイルの具体的なローテーション設定ファイルは、"/etc/logrotate.d"ディレクトリ以下に置かれています。

    21行目以降は、/var/log/wtmpファイルのローテーション設定です。

    1	# see "man logrotate" for details
    2	# rotate log files weekly
    3	weekly
    	4
    5	# keep 4 weeks worth of backlogs
    6	rotate 4
    	7
    8	# send errors to root
    9	errors root
    	10
    11	# create new (empty) log files after rotating old ones
    12	create
    	13
    14	# uncomment this if you want your log files compressed
    15	#compress
    	16
    17	# RPM packages drop log rotation information into this directory
    18	include /etc/logrotate.d
    	19
    20	# no packages own lastlog or wtmp -- we'll rotate them here
    21	/var/log/wtmp {
    22	    monthly
    23	    create 0664 root utmp
    24	    rotate 1
    25	}
    	26
    27	# system-specific logs may be configured here
    

    /etc/logrotate.conf


  2. /etc/logrotate.d/ディレクトリ以下の設定ファイル群
    /etc/logrotate.d/ディレクトリにどのような設定ファイルがあるか、みてみましょう。
    # ls /etc/logrotate.d/
    apache	cron	ftpd	syslog
    

    /etc/logrotate.d以下のファイル


    ここでは、代表例としてapacheのlogrotate設定ファイルを解説します。
    まず、特徴的なのは、複数のログファイルが同時に指定されていることです(1行目)。これに応じて3行目に"sharedscripts"コマンドが設定されています。

    4行目にpostrotateコマンドが設定され、ログファイルのローテーション後、apacheサーバにハングアップシグナル(HUP)が送られ、再起動します。これは、apacheサーバがローテーション済みのログファイルを手放し、新たなログファイルにログを出力するようにするためです。

    ローテーションの頻度は、/etc/logrotate.confファイルで設定された"weekly"が継承されています。ローテーションの頻度を変えたい場合には、2行目〜3行目の間に"daily"か"monthly"を挿入します。

    1	/var/log/httpd/access_log /var/log/httpd/agent_log /var/log/httpd/error_log /var/log/httpd/referer_log {
    2		missingok
    3		sharedscripts
    4		postrotate
    5			/bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || true
    6		endscript
    7	}
    
    

    /etc/logrotate.d/apache



home |index |previous |next |contents


since 04/Oct/2004