【ログローテート】

logrotate とは?

最終更新:
💡 ログを新旧の世代に分けて整理する管理係

ログファイルの切り替え、古いログの圧縮や削除を設定に従って行うツール。cronやsystemdタイマーなどから定期実行し、ログの世代を管理する。

📌 このページのポイント
切り替え後のログの例 rotate 3・compress・delaycompress app.log 書込先 app.log.1 直前 app.log.2.gz 2世代前 app.log.3.gz 3世代前 以前の最古ログは削除 直前のログの圧縮は次回へ延期
番号で名前を付けて古いログを3世代保持する例。delaycompressにより直前の世代は未圧縮。期間やサイズの条件は実行時に確認する。
ひよこ ひよこ
ログファイルがどんどん大きくなるよ。整理する方法は?
ペンギン先生 ペンギン先生
logrotateで世代管理できるよ。書き込み先を新しいログへ切り替え、古いログを設定に従って圧縮したり削除したりするんだ。
ひよこ ひよこ
どんな設定ができるの?
ペンギン先生 ペンギン先生
例えばdailyは日単位の切り替え条件、rotate 7は古いログを7世代保持、compressは圧縮を指定するよ。圧縮には通常gzipを使うんだ。
ひよこ ひよこ
設定を書けば、ずっと監視してくれるの?
ペンギン先生 ペンギン先生
常駐して監視する仕組みではないよ。cronやsystemdタイマーなどから実行する。サイズ条件も実行時に調べるので、実行頻度とログ量を合わせて考えよう。
ひよこ ひよこ
サービスがログを書いている途中でも切り替えられる?
ペンギン先生 ペンギン先生
サービスが新しいログを開き直す仕組みに合わせて設定するんだ。copytruncateはコピー後に元のファイルを空にする方法だけど、その間の書き込みが失われる可能性があるよ。
ひよこ ひよこ
図の古いログが全部圧縮されていないのはなぜ?
ペンギン先生 ペンギン先生
compressにdelaycompressを加えた例だからだよ。直前のログの圧縮を次の切り替えまで遅らせる。rotate 3なら古いログを3世代残し、それより古いものは削除するんだ。
もっと詳しく知りたい人へ

dailyとsizeを一緒に書けば、毎日または指定サイズで切り替わる?

その組み合わせにはなりません。sizeと期間指定は排他的で、後に指定した方が優先されます。期間に加えてサイズ超過でも切り替えたい場合はmaxsizeを使います。ただし、条件が調べられるのはlogrotateを実行したときです。

設定を変更せずに動作を調べるには?

-dはデバッグ用で、ログや状態ファイルを変更せず、処理内容を表示します。実際に運用で使う設定ファイルを指定して確認してください。サービス別のファイルだけを指定すると、メイン設定の共通設定は読み込まれません。

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

参考資料

← 用語集にもどる