syslogdの設定を行いましたが、そのまま特定のログファイルに永遠にログを書き込んでいくわけにはいきません。なぜなら、ログファイルのデータが多くなればディスク容量を圧迫しますし、ログを確認しようとすると時間やCPUへの負担が大きくなるからです。これを回避するために、「logrotate」というプログラムを利用します。logrotateは指定されたタイミングでログファイルのバックアップを取り、新しいログファイルを作成してログのローテーションを行います。
logrotateの設定は、/etc/logrotate.confと/etc/logrotate.dディレクトリにある各設定ファイルで行います。
logrotate.confの内容(注)は以下のとおりです。
weekly 1.
rotate 4 2.
create 3.
#compress 4.
include /etc/logrotate.d 5.
/var/log/wtmp { 6.
monthly
create 0664 root utmp
rotate 1
}
1.毎週ファイルの置き換えを行う(monthly、dailyも指定可)
2.4世代分のファイルを保存
3.ファイルの置き換え後、新しいログファイルを作成
4.圧縮する(デフォルトは圧縮しない)
5.各ログの詳細設定ファイルは/etc/logrotate.d
6.wtmpログファイルは、毎月1世代のみファイルを置き換え、所有者がroot、所有グ・・ループがutmpの新しいファイルを0664のパーミッションで作成する
logrotate.confファイルは、logrotateのグローバルな設定を行います。例えば、1日のログのデータ量が非常に多い場合はweeklyではなくdailyに変更をすることで、1つのファイルのサイズを小さくできます。その場合、「rotate 4」では4日分しかログが残らないため、必要に応じて数字を大きくするなどの設定変更が必要です。
各ログファイルの設定は、/etc/logrotated.dディレクトリの設定ファイルで行います。syslogdで設定されたログの設定ファイルは、/etc/logrotated.d/syslog(注)になります。
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler
/var/log/boot.log /var/log/cron { 1.
sharedscripts 2.
postrotate 3.
/bin/kill -HUP 'cat /var/run/syslogd.pid 2> /dev/null ' 2> /dev/null || true 4.
endscript 5.
}
1.最初の行にどのログファイルに関する設定かの記述
2.複数のログファイルのローテーション後に、下の行の処理を1度だけ実行
3.endscriptまでの処理をローテーション終了後に実行
4.syslogdの動作中にファイルを移動すると、syslogdは出力すべきログファイルを見失ってしまうため、syslogdにHUPシグナルを送って設定を再読み込みさせている
5.コマンドの終了
「グローバルの設定では毎週ローテーションだがsyslogdのログファイルのみ毎日」に変更したければ、この中括弧のpostrotateより上に「daily」と記述します。「missingok」と記述すると、対象のファイルが存在しなくてもエラーを出しません。「size 10M」と記述すると、ファイルサイズが10Mbytesを超えるローテーションを行うことも可能です。指定可能なオプションが多いため、詳細は
$ man logrotate
で確認してください。
logrotateはデーモンではなく、ここで設定した内容はcronによってlogrotateが起動されたときに読み込まれます。cronは/etc/crontabの内容に従い、/etc/cron.dailyディレクトリのsyslogを実行します。syslogファイルはlogrotateを起動するスクリプトになっており、設定ファイルに従って処理を行います。
以上でsyslogdとlogrotationの基本説明を終了します。次回は、ログに関連するツールについて説明します。
Copyright © ITmedia, Inc. All Rights Reserved.