Linuxのログファイルのローテーションについてまとめました。
ログファイルのローテーション
ログファイルに保存される記録データが多くなると、ディスク容量を圧迫し、ログの確認時間やCPU負担が大きくなります。
その問題を解決するために、「logrotate」を利用します。
logrotateは、指定したタイミングでログファイルのバックアップを行い、新しいログファイルを作成してログのローテーションを実施します。
logrotateの設定は、「/etc/logrotate.conf」と「/etc/logrotate.d」ディレクトリ内のに設定ファイルで行います。
「logrotate.conf」の設定方法
「logrotate.conf」は以下のように記述されています。の内容は以下のとおりです。
# ファイルの置き換え頻度(dailyなら毎日、weeklyなら毎週、monthlyなら毎月)
monthly
# 3世代分のファイルを保存(monthlyだと3ヶ月分残る)
rotate 3
# ファイルの置き換え後、新しいログファイルを作成
create
# バックアップ時にデータを圧縮するかどうか(デフォルトは圧縮しないため、#でコメントアウトされている。)
#compress
# 各ログの詳細設定ファイルは「/etc/logrotate.d」
include /etc/logrotate.d
# wtmpログファイルは、毎月1世代のみファイルを置き換え、所有者がroot、所有グループがutmpの新しいファイルを0664のパーミッションで作成
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}
「/etc/logrotated.d」の設定方法
各ログファイルの設定は、「/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
# endscriptまでの処理をローテーション終了後に実行
postrotate
# syslogdの動作中にファイルを移動した場合、syslogdは出力先のログファイルがわからなくなるため、syslogdにHUPシグナル送って設定を再読み込みさせる
/bin/kill -HUP 'cat /var/run/syslogd.pid 2> /dev/null ' 2> /dev/null || true
# コマンドの終了
endscript
}
logrotate.conf(グローバル設定)では毎月ローテーションですが、例えばsyslogdのログファイルのみ毎週に変更することもできます。
その場合、括弧内のpostrotateより上に「daily」と記述します。
また、「missingok」と記述すると、保存先のログファイルが存在しなくてもエラーになりません。
「size 10M」と記述すると、ファイルサイズが10Mbytesを超えるローテーションがも可能です。
関連記事

【Linux超入門】システムの基礎とよく使うコマンドなど徹底解説
Linuxシステムの基礎とよく使うコマンドなどについて入門者向けに解説します。

【LinuC】試験対策と例題まとめ
LinuCの試験対策と例題(学習サイト)についてまとめました。

LPICの試験対策と例題まとめ
LPICの試験対策と例題(学習サイト)についてまとめました。
コメント