Linux管理・運用の基本
システム管理者のための実践ガイド
システム管理者のための実践ガイド
システムを運用していく中で、ログファイルは日々肥大化していきます。放置するとディスク容量を圧迫し、最悪の場合はシステムダウンを引き起こす原因にもなりかねません。そこで重要となるのが、ログファイルを定期的に整理する「ローテーション」です。logrotateは、Linuxに標準搭載されている「ログファイル自動整理ツール」で、この作業を自動化するために不可欠なツールです。今回は、その使い方と設定方法について解説します。
logrotateの設定ファイルは、主に/etc/logrotate.conf
と、その設定を個別のファイルに分割して配置する/etc/logrotate.d/
ディレクトリ内にあります。
通常、システム全体の共通設定は/etc/logrotate.conf
に記述されます。このファイルには、include /etc/logrotate.d
という記述があり、/etc/logrotate.d/
内の各ファイルが個別の設定として読み込まれます。
例えば、/var/log/myapp/access.log
というログファイルを週に一度ローテーションし、4世代分保持したい場合の設定は以下のようになります。
# /etc/logrotate.d/myapp に設定ファイルを作成
/var/log/myapp/access.log {
weekly
rotate 4
dateext
compress
missingok
notifempty
create 0644 root root
}
weekly
: ローテーションの頻度を「週ごと」に設定します。他にdaily
(日ごと)、monthly
(月ごと)などがあります。rotate 4
: 4世代分のログを保持します。古いファイルは削除されます。dateext
: ローテーションされたファイル名に日付を自動で付与します。compress
: ローテーションされたログファイルをgzip形式で圧縮します。missingok
: ローテーション対象のログファイルが存在しなくてもエラーにしません。notifempty
: ログファイルが空の場合はローテーションを行いません。create 0644 root root
: ローテーション後に新しいログファイルを0644
のパーミッションで、所有者・グループをroot
で作成します。設定ファイルを作成したら、logrotate
コマンドの-d
オプションを使ってドライラン(シミュレーション)を実行し、エラーがないか確認しましょう。
# -dオプションでテスト実行
$ sudo logrotate -d /etc/logrotate.d/myapp
-f
オプションを使えば、強制的にローテーションを実行できます。
# -fオプションで強制実行
$ sudo logrotate -f /etc/logrotate.d/myapp
logrotateは、たいていcronやsystemd timerによって1日1回自動実行されるようになっています(例:/etc/cron.daily/logrotate
)。そのため、通常は個別に定期実行の仕組みを用意する必要はありません。設定変更をテストしたい場合や、すぐにローテーションを適用したい場合のみ、手動でlogrotateコマンドを実行しましょう。
新しいログファイルにアプリが書き込めなくなった
→ create
ディレクティブでパーミッション・所有者を正しく設定しましょう。nginxやApacheなど、root以外のユーザーで動くサービスは、create 0644 nginx nginx
のように、サービスが書き込める所有者に指定する必要があります。
ローテーションされない・古いファイルが残る
→ rotate
やnotifempty
の指定漏れや間違いがないか見直しましょう。ファイルパスのタイポや、設定ファイルの記述ミスも意外と多い原因です。
logrotateの設定と動作確認は、Linuxサーバー運用において「必須の保守作業」です。設定は一度見直しておくと、「あのときやっておいてよかった」となる典型的な運用タスクです。もし設定や動作で困ったら、man logrotate
や/var/log/messages
、/var/log/syslog
などにヒントが記録されていないかもチェックしてみてください。
この記事が、logrotateによるログ管理について理解を深める一助となれば幸いです。ご覧いただきありがとうございました。