logrotate設定ミスによる障害事例まとめ【実務で実際に起きた事故集】

  • URLをコピーしました!

logrotateはLinux運用では「当たり前」の存在ですが、

設定を誤ると確実に障害を引き起こすツール

でもあります。

本記事では、現場で実際に発生しがちな

  • よくある設定ミス
  • 発生する症状
  • なぜ起きたのか
  • どう防ぐべきか

障害事例形式でまとめます。

目次

事例① copytruncateの誤用でログが欠損

発生した症状

  • 特定時間帯のログが存在しない
  • 障害調査が不可能
  • 監査で指摘

原因

copytruncateは

  • コピー中
  • truncate実行中

に書き込まれたログを確実に失います

よくある設定

/var/log/app.log {
  daily
  rotate 7
  copytruncate
}

防止策

  • postrotate + SIGHUP を使う
  • ログ再オープン可能か確認

事例② postrotate未設定でログが出なくなる

発生した症状

  • ログローテート後にログが一切出ない
  • ファイルサイズが0のまま

原因

ログファイルはリネームされたが、

アプリが新しいログファイルを開き直していない

ため。

典型例

/var/log/app.log {
  daily
  rotate 7
}

防止策

postrotate
  systemctl reload app.service
endscript

事例③ rotate数が少なすぎて証跡消失

発生した症状

  • 障害発生時のログが残っていない
  • 数日前のログが存在しない

原因

rotate設定が少なすぎる。

rotate 3

防止策

  • 最低7〜14世代を確保
  • 監査要件を事前に確認

事例④ 圧縮設定漏れでディスク逼迫

発生した症状

  • /varが急激に逼迫
  • サービス停止

原因

compress未設定。

compress
delaycompress

防止策

  • 必ず圧縮設定を入れる
  • 巨大ログは日次圧縮

事例⑤ notifempty未設定で無駄なログ増殖

発生した症状

  • 空ファイルが大量生成
  • inode枯渇

原因

空ログもローテートされ続けた。

防止策

notifempty

事例⑥ missingok未設定でcronエラー大量発生

発生した症状

  • cronメールが大量発生
  • logrotate失敗

原因

対象ログが存在しない状態で実行。

防止策

missingok

事例⑦ create設定漏れで権限エラー

発生した症状

  • ログ出力不可
  • Permission denied

原因

新しいログファイルの権限未指定。

防止策

create 0640 appuser appgroup

事例⑧ サイズローテーション誤設定

発生した症状

  • ログが一切回らない
  • または頻繁に回りすぎる

原因

size 10M

daily

の組み合わせ誤解。

防止策

  • sizeは条件であることを理解
  • 優先順位を把握

事例⑨ 削除しても容量が空かない

発生した症状

  • dfは空かない
  • duでは見えない

原因

プロセスが古いログを掴み続けている。

確認コマンド

lsof | grep deleted

防止策

  • 適切なローテート方法
  • truncate依存をやめる

logrotate安全設定テンプレート(例)

/var/log/app.log {
  daily
  rotate 14
  compress
  delaycompress
  missingok
  notifempty
  create 0640 appuser appgroup
  postrotate
    systemctl reload app.service
  endscript
}

まとめ

logrotateは

「設定して終わり」ではなく「設計対象」

です。

本記事の事例は、

  • ほぼ全て現場で実際に起きる
  • 再発率が非常に高い

事故です。

この記事をlogrotate設定レビューのチェックリストとして活用してください。

目次