プロジェクト

全般

プロフィール

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の大量出力
同一コードによる繰り返し発生
デバッグ出力の混在

対処として:

ログ出力レベルの制御
ログローテーション管理強化
既存ログのクリア/圧縮

を実施し、正常状態へ復帰した。