少し前に新規でインストールしたサーバのログを、あまり考えずに「残す世代多め」「圧縮はしない」という設定で使い始めていました。
運用し始めてから /var/log の容量が気になり始めたので、世代を短くして、圧縮をかける設定にしました。
設定変更したあとに rotate されるタイミングで、自動的に「世代を短くしたぶんの過去ログは消えるのか」「圧縮されていなかった過去ログは圧縮されるのか」が気になったので検証してみました。
試した環境
# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
# rpm -q logrotate
logrotate-3.8.6-19.el7.x86_64
元の設定
「過去ログは15世代」「圧縮しない」という設定になっています。
/etc/logrotate.d/httpd
rotate 15
その結果、このようなログになっています。
access_log
access_log-20210905
access_log-20210912
access_log-20210919
access_log-20210926
access_log-20211003
access_log-20211010
access_log-20211017
access_log-20211024
access_log-20211031
access_log-20211107
access_log-20211114
access_log-20211121
access_log-20211128
access_log-20211205
access_log-20211212
新しい設定
「過去ログは10世代」「圧縮する」「けど、一番新しい過去ログは圧縮しない」という設定に変更しました。
/etc/logrotate.d/httpd
rotate 10
compress
delaycompress
つまり、こうなってほしいです。
access_log
access_log-20211017.gz
access_log-20211024.gz
access_log-20211031.gz
access_log-20211107.gz
access_log-20211114.gz
access_log-20211121.gz
access_log-20211128.gz
access_log-20211205.gz
access_log-20211212.gz
access_log-20211219
rotate された結果
access_log
access_log-20211017.gz
access_log-20211024.gz
access_log-20211031.gz
access_log-20211107.gz
access_log-20211114.gz
access_log-20211121.gz
access_log-20211128.gz
access_log-20211205.gz
access_log-20211212.gz
access_log-20211219
はい、理想どおりです。
- 圧縮されていなかった過去ログはすべて圧縮される(今回 gz になる access_log-20211212 以外も圧縮される)
- 残す世代数より古い過去ログはすべて削除される(今回押し出される 20211010 だけでなく、もっと古いログも削除される)
- いまのログファイルが過去ログ(非圧縮)になる
すべてが行われました。