「ディスクが満杯で障害」——原因の常連がログの肥大です。これを自動でさばく logrotate の使い方をまとめます。
なぜログは危険なのか
アプリやアクセスログは、放っておくと際限なく増えます。気づいたらディスク100%でサービス停止、は運用あるあるです。logrotateは、ログを定期的に分割・圧縮・古いものを削除して、自動で肥大を防ぎます。
仕組み
多くのディストリでは、logrotateが毎日cronで自動実行されます。設定は /etc/logrotate.d/ にサービスごとのファイルを置きます。
設定例
/var/log/myapp/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
copytruncate
}
各行の意味は、
daily… 毎日ローテートrotate 14… 14世代(14日分)保持し、それより古いのは削除compress… 古いログをgzip圧縮missingok… ログが無くてもエラーにしないnotifempty… 空なら回さないcopytruncate… コピーして元を空にする(アプリを止められない時に有効)
copytruncate に注意
copytruncate は、アプリがログを開いたまま書き続ける場合に便利ですが、コピーと切り詰めの一瞬に書かれたログが欠ける可能性があります。アプリがログの再オープンに対応しているなら、postrotate でシグナルを送る方式の方が確実です。
postrotate
systemctl reload myapp
endscript
テスト実行
いきなり本番に効かせる前に、デバッグ実行で確認します。
logrotate -d /etc/logrotate.d/myapp … 実行せず動作確認(dry-run)
logrotate -f /etc/logrotate.d/myapp … 強制実行してテスト
まとめ
- ログは放置すると必ず溢れる
rotate(世代数)とcompressで容量を抑える- 設定したら
-dで必ず確認
ディスク枯渇は予防できる障害です。新しくログを吐くアプリを入れたら、セットでlogrotateを設定する——これを習慣にすると、夜中の呼び出しが確実に減ります。