syslogを押さえよう!
ログファイルのローテーション
ここまでの説明で、特定のログファイルが雑多な情報で埋もれてしまう、という事態は避けられるでしょう。
これでログ管理の問題はすべて解決、と言いたいところですが、実際にはそうはいきません。syslogでは、ログの保存期間に関しては一切関知しないため、そのままでは、ログファイルが肥大化し、ディスクを圧迫してしまう恐れがあります。また、肥大化したログファイルは、ファイルを参照するだけでシステムに負荷がかかり、必要な情報を即座にたどりつくことも困難になるといった問題もはらんでいます。
このログファイルの肥大化に対する解決策が、「ログファイルのローテーション」です。ログファイルのローテーションとは、古いログファイルを定期的にアーカイブし、ログファイルを新しいものに置きかえる手法です。ログファイルのローテーションを行うことで、新しいメッセージは、常に比較的小さいサイズのファイルに記録されることになります。
CentOSでは、ログファイルのローテーションを行うツールとして、logrotateというコマンドが付属しています。logrotateによるログファイルのローテーションでは、アーカイブされたファイルの名前には、「/var/log/messages.1」のように、元のログファイル名の末尾に「ドット(.)+数字」が付与されます。この数字はログファイルのローテートが行われる度に増加し、最も大きな数字を持つファイルが最も古いファイルになります。そして、末尾の数字が一定の値を超えたファイルは削除されます。
logrotateコマンドの設定方法
logrotateの設定ファイルは、/etc/logrotate.confと/etc/logrotate.d以下のファイル群です。/etc/logrotate.confには、logrotateが行うログローテーション全体に対する設定を記述し、ログファイル個別の設定は/etc/logrotate.d以下に配置された個々の設定ファイルにて行います。なお、logrotate は設定項目が多いので、ここではそのすべての説明は行わず、実際の設定ファイルの内容をもとに説明します。
まず、/etc/logrotate.confの内容を見てみましょう。/etc/logrotate.confのデフォルトの設定は、図3-1に示す内容になっています(コメントと空行は削除してあります)。
1~5行目はグローバルの設定です。1行目の「weekly」でローテーション間隔を1週間に、2行目の「rotate 4」で、ログファイルが削除されるまでのローテーション回数を4回に、3行目の「create」で、ローテーション直後に新しいログファイルを作成するよう設定しています。4行目の「compress」は、ローテートしたファイルを圧縮するための設定ですが、デフォルトではコメントアウトされ無効になっています。5行目の「include/etc/logrotate.d」は、/etc/logrotate.dディレクトリ配下の設定ファイルを読み込むための設定です。
6行目の「/var/log/wtmp {」から11行目の「}」までは/var/log/wtmp個別の設定で、ここでグローバルな設定を上書きすることができます。ここでは、ローテーション間隔がweeklyからmonthlyに、ログファイル削除までのローテーション回数が4回から1回に変更されています。また、「minsize 1M」の設定により/var/log/wtmpは、前回ローテート時から1ヶ月以上経過し、かつファイルサイズが1メガバイトの場合にローテートされるようになっています。
続いて、/etc/logrotate.dディレクトリの説明です。/etc/logrotate.dディレクトリは、ログのローテーションを必要とするPMパッケージが、ローテーションの設定ファイルを配置するディレクトリで、Apacheやsquidなど、さまざまなアプリケーション用の設定ファイルがインストールされています。syslog用の設定ファイルも/etc/logrotate.d/syslogとしてインストールされていますので、ここでは、syslog用の設定ファイルの内容を確認してみましょう。
図3-2は、デフォルトの/etc/logrotate.d/syslogの内容です。1行目は対象のログファイル、2行目の「sharedscripts」で、postrotate の内容(3行目の「postrotate」から6行目の「endscript」までの内容)を、1行目に指定してあるログファイルすべてのローテーションが完了したあとで一度だけ実行するよう設定しています。syslogd の設定を変更してログファイルを増やした場合には、新しいログファイルを 1行目に追加しておきましょう。
logrotateには、上で述べたとおり、ここで説明した以外にもたくさんの設定項目があります。より細かなログローテートの設定を行いたい方は、logrotate(8)を参照してください。