【ログローテート】

logrotate とは?

💡 ログファイルが際限なく太るのを防ぐダイエットマネージャー
📌 このページのポイント
logrotate — ログファイルの自動ローテーション app.log 500 MB 肥大化! rotate app.log app.log.1 app.log.2.gz .3.gz 削除 設定例(/etc/logrotate.d/app) daily 毎日ローテーション rotate 3 3世代まで保持 compress 古いログを gzip 圧縮 size 100M サイズ超過時も実行 missingok ファイルなくてもOK postrotate 後処理スクリプト ディスク枯渇を防ぎ、ログ管理を自動化する定番ツール cron / systemd timer で定期実行される
logrotate のログローテーションのイメージ
ひよこ ひよこ

サーバーのディスクが満杯になっちゃった!原因は何?

ペンギン先生 ペンギン先生

ログファイルの肥大化が原因であることが多いよ。放っておくとアクセスログだけで何十GBにもなることがある。logrotateを正しく設定しておけば防げるんだ。

ひよこ ひよこ

logrotateはどんなことをしてくれるの?

ペンギン先生 ペンギン先生

たとえば「毎日ログを新しいファイルに切り替えて、古いログは圧縮して7世代まで保管、それ以上古いものは自動削除」みたいなことを設定一つでやってくれるよ。

ひよこ ひよこ

設定はどこに書くの?

ペンギン先生 ペンギン先生

/etc/logrotate.d/ ディレクトリにサービスごとの設定ファイルを置くよ。dailyで毎日ローテーション、rotate 7 で7世代保管、compressで古いログをgzip圧縮。copytruncateを使えば、ログを書き込み中のサービスを止めずにローテーションできるんだ。

ひよこ ひよこ

設定が正しく動くか確認する方法はある?

ペンギン先生 ペンギン先生

logrotate -d /etc/logrotate.d/nginx のように-dオプションでドライランできるよ。実際にはローテーションせず、何が起きるかだけ表示してくれる。あと、意外と知られていないけどlogrotateはcronから毎日実行されているだけで、デーモンとして常駐しているわけじゃないんだ。cronが止まっていたらlogrotateも動かないから要注意だよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「logrotate」って出てきたら「ログファイルの自動ローテーション・管理ツール」と思えればだいたいOK!
📖 おまけ:英語の意味
「log rotate」 = ログ回転
💬 ログを「ローテーション(回転)」させて古いものを順繰りに管理する仕組みだよ
← 用語集にもどる