読者です 読者をやめる 読者になる 読者になる

続 カッコの付け方

AWSを始めとしたクラウドコンピューティング全般と、唯一神emacsにおける()の付け方についてだらだら書きます

nginx + php-fpm の組み合わせのErrorログ出力を理解する

ngix + php-fpm の組み合わせで特に Errorログについて整理しときます。

初心者向け補足

プール向け設定ファイル = /etc/php-fpm.d/www.conf
全体の設定ファイル = /etc/php-fpm.conf

php-fpmのログまとめ

error.log

php-fpm 全体で出す Errorログです。これは global ディレクティブでしか設定出来ません。 このファイルは、デフォルトでは各プールの標準エラーなどを出力されることはありません。各プールのエラーを出力したいならば catch_workers_output = yes を、プールの設定ファイルに記載します。 ただし、このパラーメータには注釈があります。

; Redirect worker stdout and stderr into main error log. If not set, stdout and
; stderr will be redirected to /dev/null according to FastCGI specs.
; Note: on highloaded environement, this can cause some delay in the page
; process time (several ms).
; Default Value: no

パフォーマンスに若干影響するということなので、気になる人はデフォルトの noが良いでしょう。

このファイルはphp-fpm マスタープロセスがつかみます。ので、logrotate時にシグナルを打つ必要があります。

$pool.access.log

プール毎 に設定できる access.logです。 このファイルはphp-fpm ワーカープロセスがつかみます。ので、logrotate時にシグナルを打つ必要があります。

xxx-slow.log

プール毎 に設定できる slow-logです。 php-fpm ワーカープロセスが出しているはずですが、ファイルはつかんでいません。

www-error.log

rpmデフォルトの設定を参考に書きます。プール毎 に設定できるのですが、これは php-fpm が出力しているのではなく、言語としての php が出力しています。 プール毎に設定できるので、これを使うのがベストプラクティスだと思います。

ファイルの出力は、エラーが発生したタイミングで発生します。また、php-fpmが出力していないので、出力するユーザーはワーカプロセスの実行ユーザー = プール向け設定ファイルで設定するユーザー&グループとなります。例えば nginx + php-fpm の組み合わせ centosなどの場合、 /var/log/php-fpm の所有権が apache となっているため、 www.confで 実行ユーザーをnginxなどとしていると ファイル出力出来ません。

nginx側のログ

ワーカープロセスの標準エラーは、実は nginxのerror.logにそのまま出力されます。しかし、日付等が記載されず、そのままなので、その点不便です。

おまけ php-fpm のログ出力パーミッションを変更したい

/var/log/php-fpm/xxx.log のうち、php-fpm自身が出力するものはすべて 600で吐き出され、しかも rootがオーナーです。これを設定ファイルでかえることは残念ながら出来ないようです。パッチは出ています。

https://github.com/sandyskies/php-filemode-patch