Linuxシステムを運用していると、日々生成されるログファイルの肥大化に頭を悩ませることがあります。ログが溜まりすぎると、ディスク容量を圧迫したり、障害発生時の調査がしづらくなったりと、さまざまな問題を引き起こしかねません。
こうしたログ管理の課題を解決するのが「logrotate(ログローテート)」という便利なコマンドです。
この記事では、logrotateの基本的な仕組みから、設定ファイルの書き方、ログの保存期間や圧縮の設定方法まで、わかりやすく解説していきます。これからLinuxサーバーの運用を始める方や、ログ管理に課題を感じている方にとって、きっと役立つ内容となるはずです。
logrotate(ログローテート)は、Linuxで動作するログファイルの管理ツールです。
システムの動作記録を保存するログファイルは、ApacheやNginx、cron、syslogなど、さまざまなサービスによって出力されます。これらのログは放っておくと肥大化してしまい、ディスクを圧迫します。
logrotateは、一定の条件(サイズや日数など)に応じてログを自動的にローテーション(世代交代)させることができます。古いログを圧縮保存することもでき、定期的に不要なログを削除する設定も可能です。
つまり、logrotateを使うことで、ログファイルの肥大化を防ぎ、サーバーの健全な運用を維持することができるのです。
logrotateは通常、cron
などの定期実行タスクによって1日1回自動的に実行されます。
その際、以下のような動作を行います。
/etc/logrotate.conf
および /etc/logrotate.d/
配下)logrotateを手動で実行するには以下のコマンドを使います。
sudo logrotate /etc/logrotate.conf
デバッグ目的で動作確認する場合は、-d
オプションを使いましょう。
sudo logrotate -d /etc/logrotate.conf
logrotateの動作は設定ファイルで決まります。主なファイルは以下の2つです。
/etc/logrotate.conf
(メイン設定)/etc/logrotate.d/
(個別設定)/etc/logrotate.conf
は全体的な基本ルールを定義し、include
ディレクティブで /etc/logrotate.d/
配下の個別設定を読み込むようになっています。
たとえば /etc/logrotate.conf
の中身は次のようになっています。
weekly
rotate 4
create
include /etc/logrotate.d
この例では以下のような設定になっています:
weekly
:週に一度ログローテーションを行うrotate 4
:4世代分ログを保存create
:ローテーション後に新しい空のログファイルを自動作成include /etc/logrotate.d
:個別設定ファイルを読み込む個別のサービスに対しては、/etc/logrotate.d/
ディレクトリ内に設定ファイルを作成します。たとえば、Apacheのログファイルを対象にするには以下のように記述します。
/var/log/httpd/access_log /var/log/httpd/error_log {
daily
rotate 14
compress
missingok
notifempty
create 0640 apache apache
postrotate
/bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
endscript
}
この設定の意味は以下の通りです:
daily
:毎日ローテーションrotate 14
:14世代分ログを保存compress
:古いログはgzipで圧縮(.gz
ファイルになる)missingok
:ログが存在しない場合でもエラーを出さないnotifempty
:ログが空ならローテーションしないcreate 0640 apache apache
:新しいログファイルを指定したパーミッションと所有者で作成postrotate ... endscript
:ログローテーション後にApacheの再起動(または設定の再読み込み)logrotateでは様々なオプションが用意されています。代表的なものを以下に紹介します。
オプション | 内容 |
---|---|
daily | 毎日ローテーション |
weekly | 毎週ローテーション |
monthly | 毎月ローテーション |
size 100M | ファイルサイズが100MB以上ならローテーション |
rotate 5 | 5世代分のログを保存 |
compress | ローテートされたログをgzipで圧縮 |
delaycompress | 1世代目は圧縮せず、次のローテーション時に圧縮 |
missingok | ファイルが存在しなくてもエラーにしない |
notifempty | 空のログファイルはローテートしない |
create | ローテーション後に新しいログファイルを作成 |
postrotate 〜endscript | ローテーション後に実行するコマンド(主にデーモン再起動) |
設定を反映する前に、手動で動作確認をしておくことが大切です。以下のように -f
(強制実行)や -d
(デバッグ)オプションを活用しましょう。
sudo logrotate -d /etc/logrotate.d/httpd
sudo logrotate -f /etc/logrotate.d/httpd
よくあるトラブルと対処法:
logrotate -d
でエラー内容を確認。notifempty
や missingok
の有無をチェック。rotate
の世代数設定が適切か確認。logrotateは多くのLinuxディストリビューションで cron.daily
に登録されています。
/etc/cron.daily/logrotate
そのため、特に設定をいじらなくても、毎日1回自動実行されるようになっています。もし特定のタイミングでの実行をカスタマイズしたい場合は、cron
やsystemd timer
などで設定を変更可能です。
logrotateは、Linuxにおけるログ管理の必須ツールと言える存在です。放置しておくと肥大化してしまうログを、自動でローテーション・圧縮・削除できるため、運用面の負担を大きく軽減してくれます。
ログの量が多くなってきたな、と感じたら、ぜひlogrotateの設定を見直してみてください。
正しく活用することで、システムの安定性や可視性を保ちながら、効率的なログ管理が実現できます。