【ログローテート】
logrotate とは?
最終更新:
💡 ログを新旧の世代に分けて整理する管理係
ログファイルの切り替え、古いログの圧縮や削除を設定に従って行うツール。cronやsystemdタイマーなどから定期実行し、ログの世代を管理する。
📌 このページのポイント
- 実行時に期間やサイズなどの条件を確認し、必要なログを切り替える
- rotateで保持する世代数、compressで古いログの圧縮を設定できる
- サービス別の設定は、メイン設定からincludeで読み込む構成にできる
- 実行頻度やログ量も確認する。設定だけでディスク容量を保証するものではない
ログファイルがどんどん大きくなるよ。整理する方法は?
logrotateで世代管理できるよ。書き込み先を新しいログへ切り替え、古いログを設定に従って圧縮したり削除したりするんだ。
どんな設定ができるの?
例えばdailyは日単位の切り替え条件、rotate 7は古いログを7世代保持、compressは圧縮を指定するよ。圧縮には通常gzipを使うんだ。
設定を書けば、ずっと監視してくれるの?
サービスがログを書いている途中でも切り替えられる?
サービスが新しいログを開き直す仕組みに合わせて設定するんだ。copytruncateはコピー後に元のファイルを空にする方法だけど、その間の書き込みが失われる可能性があるよ。
図の古いログが全部圧縮されていないのはなぜ?
compressにdelaycompressを加えた例だからだよ。直前のログの圧縮を次の切り替えまで遅らせる。rotate 3なら古いログを3世代残し、それより古いものは削除するんだ。
もっと詳しく知りたい人へ
dailyとsizeを一緒に書けば、毎日または指定サイズで切り替わる?
その組み合わせにはなりません。sizeと期間指定は排他的で、後に指定した方が優先されます。期間に加えてサイズ超過でも切り替えたい場合はmaxsizeを使います。ただし、条件が調べられるのはlogrotateを実行したときです。
設定を変更せずに動作を調べるには?
-dはデバッグ用で、ログや状態ファイルを変更せず、処理内容を表示します。実際に運用で使う設定ファイルを指定して確認してください。サービス別のファイルだけを指定すると、メイン設定の共通設定は読み込まれません。
まとめ:ざっくりこれだけ覚えればOK!
「logrotate」って出てきたら「ログファイルの自動ローテーション・管理ツール」と思えればだいたいOK!
📖 おまけ:英語の意味
「log rotate」 = ログ回転
💬 ログを「ローテーション(回転)」させて古いものを順繰りに管理する仕組みだよ