logrotate設定を作成
設定例を作るだけでなく、権限、圧縮、ローテーション方式、後処理の注意点と確認コマンドまで表示します。
ログ肥大化、保持不足、create権限の誤り、copytruncateやpostrotateによる運用事故を事前に確認します。
絶対パスで指定します。ワイルドカードも使用できます。
ログ量に合わせて選びます。大量ログならdailyが一般的です。
古いログを何世代保持するか指定します。0は保持しません。
指定すると、周期に加えてサイズ条件も利用できます。
基本推奨 ログが一時的に存在しなくても処理全体をエラーにしないmissingokを通常は選びます。
基本推奨 空ログを不要にローテーションしないnotifemptyが一般的です。
基本推奨 保存容量を抑えるため、特別な理由がなければcompressを選びます。
「次回まで遅らせる」を選ぶと、設定にdelaycompressを追加します。最新のローテート済みログだけは圧縮せず、次回に圧縮します。
条件付き推奨 アプリが直前のログを開いたままにする場合に向いています。すぐ圧縮して問題ないサービスでは必須ではありません。
「圧縮しない」を選択しているため、この項目は設定へ出力されません。
「新しいログを作成」は設定名createです。元ログをリネームし、新しい空ファイルを作ります。
基本推奨 サービスがreloadやシグナルでログを再オープンできる場合はこちらを選びます。
「元ログをコピー後に空にする」は設定名copytruncateです。再オープンに対応していないサービス向けですが、コピー中の書き込みが欠落する可能性があります。
ローテーション方式で「新しいログを作成」を選んだ場合だけ使用します。create 0640 appuser appgroupのように、新しい空ログの権限・所有者・グループを指定します。
基本推奨 権限は0640を出発点にし、所有者とグループは実際にログを書き込むサービスに合わせて変更してください。
現在は「元ログをコピー後に空にする」を選択しているため、この項目は設定へ出力されません。
postrotateは、ローテーション後に実行する後処理です。主にサービスへ「新しいログへ切り替えてください」と通知するために使います。
必要な場合だけ設定 「新しいログを作成」を選び、サービス側にログ再オープンの通知が必要な場合に入力します。停止を伴うrestartより、reloadや専用シグナルを優先します。
確認コマンド
注意点
copytruncateはアプリ再起動不要ですが、コピー中に書き込まれたログが欠落する可能性があります。可能ならサービス側でログを再オープンする方式を優先します。
生成後に必ず確認すること
生成後はlogrotate --debugで解釈結果を確認し、ローテーション後の所有者・権限とサービスの書き込み継続を確認してください。
判定範囲と実環境での確認
このツールで確認できること
周期、保持世代、圧縮、create、copytruncate、postrotateなどから設定例を生成します。
このツールだけでは分からないこと
サービス固有のログ再オープン方法、SELinux、ファイルシステム、ディスク容量、logrotateのバージョン差までは完全には判定できません。
実環境で追加確認すること
logrotate --debugで解釈結果を確認し、ローテート後のファイル所有者・権限とサービスの書き込み継続を確認してください。
適用時の注意
logrotate -fは強制実行です。copytruncateやpostrotateを含む設定では、ログ欠落やサービス影響を確認してから使ってください。
よくある質問
createとcopytruncateはどちらを選ぶべきですか?
基本はcreateを使い、サービスにreloadやログ再オープン通知を行う方式が安全です。copytruncateは再オープンできないサービス向けですが、コピー中のログ欠落リスクがあります。
postrotateには何を書けばよいですか?
サービスが新しいログファイルを開き直すためのreloadや専用シグナルを記述します。停止を伴うrestartは、必要性を確認してから使ってください。
確認コマンドでは何が分かりますか?
logrotate -dまたは--debugで設定解釈、-fで強制実行、ls -lで生成後の所有者・権限を確認できます。-fは実際に処理するため注意が必要です。
判定がおかしい・対応してほしい設定がありますか?
OSや環境差による判定漏れ、分かりにくい表示、追加してほしい確認項目をお知らせください。設定内容は機密部分を伏せてください。