ログファイルのローテーションUNIX処方箋

現場ですぐに役立つ知識を欲するあなたに贈る珠玉のTips集。今回は、ログファイルの肥大化を防ぐ「ログのローテート」について解説する。

» 2008年04月16日 00時00分 公開
[ITmedia]

現在、Solaris 9を使用してApache HTTP ServerやSambaなどのアプリケーションを運用しています。しかし、運用上でログファイルのファイルサイズが巨大になってしまい、重要な情報を見つけるのに苦労するだけでなく、限りあるディスクの空き容量を圧迫してしまいます。これに対して、何かよい対策はないでしょうか?


ディスクの空き容量を圧迫しないようにするには、不要なファイルを消去するなどの方法がまず考えられます。しかし、ログファイルのファイルサイズの肥大化を防がなければ、どのような対策を取ってもあまり効果は期待できません。

 そこで、ログのローテートを行うことで、ファイルサイズの肥大化を防ぐことにしましょう。「ログのローテート」とは、定期的に新しいログファイルを用意して切り替え、その肥大化を防ぐという方法です。

 そのログのローテート方法として最も簡単なのは、手動でログファイルを入れ替えるというものです。しかし、これは手間が掛かる上に面倒なため、手動ローテートで使用するコマンドをまとめたスクリプトを用意し、cronによって定期的に実行という方法を利用することになります。

logadmコマンド

 Solaris 9以降であれば、logadmコマンドを使用する方法があります。このコマンドは次に挙げるような特徴があります。

ログのローテーション手段を一本化できる

 運用中の複数アプリケーションがそれぞれ独自のローテート機能を持っていたとしても、ローテート処理を一括してlogadmに任せられるため、手法がバラバラにならずログファイルの管理を一本化できます。ただし、logadmによる処理は、アプリケーション側が意図しないローテートとなるため、不具合が起こらないように十分に設定内容を確認する必要があります。

ログのローテートの設定内容に対するエラーチェック

logadmコマンドは、cronコマンドを用いてログファイルを処理する方法と似ています。cronコマンドとの違いは、logadmコマンドを用いて設定ファイル/etc/logadm.confを記述すると、内容に誤りがないか自動的にエラーチェックが行われることです。

logadmコマンドの利用方法

 logadmコマンドは、設定ファイルである/etc/logadm.confの情報を基に動作します。またログファイルは、デフォルトでは「<ログファイル名>.0」、「<ログファイル名>.1」、「<ログファイル名>.2」……とファイル名の末尾の数値をカウントアップする形で定期的に新しいものに切り替わり、最高で10世代が保持されます。

 ローテートを追加する場合には、以下のように「-w」オプションを使い、/etc/logadm.confにエントリを追加します。

# logadm -w mylog -C 8 -a 'kill -HUP `cat /var/run/syslog.pid`' /var/log/mylog


 上記の実行例では、mylogエントリとして、/var/log/mylogというファイルをローテートすること、「-C」オプションで過去8世代分のログを残すこと、「-a」オプションで「kill -HUP `cat /var/run/syslog.pid`」というコマンドを、ローテート後実行することを指定しています。

 ローテートのタイミングを設定していない場合には、デフォルトでは「-s」オプションでファイルサイズが1バイト以上(-s 1b)、「-p」オプションで前回更新時から1週間以上経過(-p 1w)という2つの条件が設定されている状態となります。

 ローテートの間隔を指定するには、「-p」オプションを使います。また、日時を明示的に指定してローテートを行いたいときは、「-P」オプションを使用します。以下の例はそれぞれ8時間おき、3日ごと、3月2日の午前9時10分にローテートを行う場合の実行例です。

  • 8時間おきにローテートを行う

# logadm -w /var/log/syslog -C 8 -a 'kill -HUP `cat /var/run/ syslog.pid`' -p 8h

  • 3日ごとにローテートを行う

# logadm -w /var/log/syslog -C 8 -a 'kill -HUP `cat /var/run/ syslog.pid`' -p 3d

  • ローテートを3月2日の午前9時10分に行う

# logadm -w /var/log/syslog -C 8 -P 'Wed Mar 2 09:10:00 2005' -a 'kill -HUP `cat /var/run/syslog.pid`'


 ローテート設定を削除する場合には、「-r」オプションを使います。

# logadm -r /var/log/mylog


 logadmコマンドのオプションについてさらに詳細を知りたい場合には、「man pages section 1M:System Administration Commands」を参照するとよいでしょう。PDFファイルとしても配布されています。

関連キーワード

運用管理 | Solaris | 自動生成 | UNIX | UNIX処方箋


Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ