WEBサーバーのログの肥大化対応
PHPエラーログ肥大化 調査・対応記録(実施内容)¶
■ 概要
サーバディスク使用率上昇の調査を実施した結果、
PHP-FPMエラーログの肥大化を確認。
本Wikiでは、原因特定および対処までの実施内容を整理する。
■ 調査フェーズ
■ ① ディスク使用量の確認
全体の使用量を確認
df -h
ディレクトリ単位で使用量を調査
sudo du -xhd1 / 2>/dev/null | sort -h
確認結果:
/var 配下の使用率が高い
■ ② 詳細調査(/var配下)
sudo du -xhd1 /var 2>/dev/null | sort -h
確認結果:
/var/log が大きい
■ ③ ログディレクトリ確認
sudo du -xhd1 /var/log 2>/dev/null | sort -h
確認結果:
php-fpm ディレクトリが肥大
■ ④ ログファイル確認
ls -lh /var/log/php-fpm/
確認結果:
www-error.log が数百MB以上
ローテーションファイルも複数存在
■ ⑤ ログ内容確認
tail -100 /var/log/php-fpm/www-error.log
確認結果:
同一Warningが大量出力
短時間でログ増加
■ ⑥ 対象ログの特定
主なエラー:
Undefined variable
Undefined array key
Trying to access array offset on null
■ ⑦ 発生箇所の特定
ログ参照より対象ファイルを特定:
/wp-content/themes/----/component/xxx.php
■ 原因分析
■ ① 同一エラーの多重出力
ループ中で同一Warningが繰り返し出力
1リクエストで複数回発生
■ ② PHP Warningの蓄積
PHP8の仕様によりWarningが厳格化
ログ出力量増加
■ ③ デバッグログ出力の確認
ログ内に以下を確認:
+++ Array
debug
post_set::
考察:
デバッグ用出力(print_r / error_log等)が本番動作中
出力データ量がログ増加を加速
■ 対応フェーズ
■ ① PHPログ出力制御
設定ファイル修正:
vi /etc/php.ini
設定変更:
error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING & ~E_DEPRECATED
display_errors = Off
log_errors = On
反映:
systemctl restart php-fpm
■ ② ログファイル初期化
truncate -s 0 /var/log/php-fpm/www-error.log
■ ③ ログローテーション設定確認
対象:
/etc/logrotate.d/php-fpm
設定例確認:
/var/log/php-fpm/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
}
■ ④ 既存ログ圧縮対応
(必要に応じて実施)
gzip /var/log/php-fpm/www-error.log-*
■ 効果確認
■ ログ出力量確認
ls -lh /var/log/php-fpm/
確認結果:
ログ増加が抑制されていることを確認
■ ディスク使用率確認
df -h
確認結果:
使用率改善
■ 結果
項目状態ログ肥大化抑制ディスク使用率改善システム影響解消
■ まとめ
今回の肥大化は以下の挙動によるもの:
PHP Warningの大量出力
同一コードによる繰り返し発生
デバッグ出力の混在
対処として:
ログ出力レベルの制御
ログローテーション管理強化
既存ログのクリア/圧縮
を実施し、正常状態へ復帰した。