Categories: linux

Linuxでのログ管理をスマートに!logrotateの設定方法と活用術

Linuxシステムを運用していると、日々生成されるログファイルの肥大化に頭を悩ませることがあります。ログが溜まりすぎると、ディスク容量を圧迫したり、障害発生時の調査がしづらくなったりと、さまざまな問題を引き起こしかねません。
こうしたログ管理の課題を解決するのが「logrotate(ログローテート)」という便利なコマンドです。

この記事では、logrotateの基本的な仕組みから、設定ファイルの書き方、ログの保存期間や圧縮の設定方法まで、わかりやすく解説していきます。これからLinuxサーバーの運用を始める方や、ログ管理に課題を感じている方にとって、きっと役立つ内容となるはずです。


logrotateとは何か?

logrotate(ログローテート)は、Linuxで動作するログファイルの管理ツールです。
システムの動作記録を保存するログファイルは、ApacheやNginx、cron、syslogなど、さまざまなサービスによって出力されます。これらのログは放っておくと肥大化してしまい、ディスクを圧迫します。

logrotateは、一定の条件(サイズや日数など)に応じてログを自動的にローテーション(世代交代)させることができます。古いログを圧縮保存することもでき、定期的に不要なログを削除する設定も可能です。

つまり、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の設定ファイル構造

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 55世代分のログを保存
compressローテートされたログをgzipで圧縮
delaycompress1世代目は圧縮せず、次のローテーション時に圧縮
missingokファイルが存在しなくてもエラーにしない
notifempty空のログファイルはローテートしない
createローテーション後に新しいログファイルを作成
postrotateendscriptローテーション後に実行するコマンド(主にデーモン再起動)

logrotateのテストとトラブルシューティング

設定を反映する前に、手動で動作確認をしておくことが大切です。以下のように -f(強制実行)や -d(デバッグ)オプションを活用しましょう。

sudo logrotate -d /etc/logrotate.d/httpd
sudo logrotate -f /etc/logrotate.d/httpd

よくあるトラブルと対処法:

  • 設定ファイルの文法ミスlogrotate -dでエラー内容を確認。
  • ローテートされないnotifemptymissingok の有無をチェック。
  • 古いログが削除されないrotateの世代数設定が適切か確認。

cronによるlogrotateの定期実行について

logrotateは多くのLinuxディストリビューションで cron.daily に登録されています。

/etc/cron.daily/logrotate

そのため、特に設定をいじらなくても、毎日1回自動実行されるようになっています。もし特定のタイミングでの実行をカスタマイズしたい場合は、cronsystemd timerなどで設定を変更可能です。


まとめ

logrotateは、Linuxにおけるログ管理の必須ツールと言える存在です。放置しておくと肥大化してしまうログを、自動でローテーション・圧縮・削除できるため、運用面の負担を大きく軽減してくれます。

ログの量が多くなってきたな、と感じたら、ぜひlogrotateの設定を見直してみてください。
正しく活用することで、システムの安定性や可視性を保ちながら、効率的なログ管理が実現できます。

upandup

Web制作の記事を中心に、暮らし、ビジネスに役立つ情報を発信します。 アフィリエイトにも参加しています。よろしくお願いいたします。