PHP FPM
catch_workers_output boolean
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. Default value: no.
/usr/local/etc/php-fpm.d/www.conf (in my configuration)
sed -i '/^;catch_workers_output/ccatch_workers_output = yes' "/usr/local/etc/php-fpm.d/www.conf"
Or simply edit and save the file manually to uncomment line starting with ;catch_workers_output .
Then we need to configure log file names and locations.
Access log
If you want or need to activate access log at php level:
access.log string
The access log file. Default value: not set
sed -i '/^;access.log/caccess.log = /var/log/php/fpm-access.log' "/usr/local/etc/php-fpm.d/www.conf"
Or simply edit and save the file manually to uncomment line starting with ;access.log .
You will have this kind of output:
$ tailf var/logs/php/fpm-access.log 172.18.0.5 - 20/Feb/2017:13:07:39 +0100 "GET /app_dev.php" 200 172.18.0.5 - 20/Feb/2017:13:07:47 +0100 "POST /app_dev.php" 302 172.18.0.5 - 20/Feb/2017:13:07:47 +0100 "POST /app_dev.php" 302 172.18.0.5 - 20/Feb/2017:13:07:47 +0100 "GET /app_dev.php" 200 172.18.0.5 - 20/Feb/2017:13:07:48 +0100 "GET /app_dev.php" 302 172.18.0.5 - 20/Feb/2017:13:07:48 +0100 "GET /app_dev.php" 200
Error log
Of course in production we do not want to display errors to users:
sed -i '/^;php_flag\[display_errors\]/cphp_flag[display_errors] = off' "/usr/local/etc/php-fpm.d/www.conf"
Or simply edit and save the file manually to uncomment line starting with ;php_flag[display_errors] .
Then we must enable error log and define the error log file location :
sed -i '/^;php_admin_value\[error_log\]/cphp_admin_value[error_log] = /var/log/php/fpm-error.log' "/usr/local/etc/php-fpm.d/www.conf" sed -i '/^;php_admin_flag\[log_errors\]/cphp_admin_flag[log_errors] = on' "/usr/local/etc/php-fpm.d/www.conf"
Or simply edit and save the file manually to uncomment lines starting with ;php_admin_value[error_log] and ;php_admin_flag[log_errors] .
You will have this kind of output:
$ tailf var/logs/php/fpm-error.log [20-Feb-2017 13:33:46 Europe/Paris] PHP Parse error: syntax error, unexpected '8' (T_LNUMBER), expecting variable (T_VARIABLE) or ' or '$' in /var/www/html/web/app_dev.php on line 26
You also could change log level:
log_level string
Error log level. Possible values: alert, error, warning, notice, debug. Default value: notice.
sed -i '/^;log_level/clog_level = error' "/usr/local/etc/php-fpm.d/www.conf"
Important
Log files must have correct access rights (owner) and must exist:
mkdir -p /var/log/php touch /var/log/php/fpm-access.log touch /var/log/php/fpm-error.log chown -R www-data:www-data /var/log/php
PHP CLI
To enable php CLI errors, we need to add these lines into the (cli) php.ini file.
This configuration is for production not for debug or development.
error_reporting = E_ALL display_startup_errors = Off ignore_repeated_errors = Off ignore_repeated_source = Off html_errors = Off track_errors = Off display_errors = Off log_errors = On error_log = /var/log/php/cli-error.log
Conclusion
Using the given configuration you should have those logs:
$ ll var/logs/php total 256K -rw-r--r-- 1 82 82 0 févr. 17 09:35 cli-error.log -rw-r--r-- 1 82 82 64K févr. 20 13:34 fpm-access.log -rw-r--r-- 1 82 82 186 févr. 20 13:33 fpm-error.log
Do NOT forget to enable log rotation, you will have:
$ ll var/logs/php total 256K -rw-r--r-- 1 82 82 0 févr. 17 09:35 cli-error.log -rw-r--r-- 1 82 82 390 févr. 17 09:35 cli-error.log-20170217 -rw-r--r-- 1 82 82 64K févr. 20 13:34 fpm-access.log -rw-r--r-- 1 82 82 100 févr. 17 09:35 fpm-access.log-20170217.gz -rw-r--r-- 1 82 82 172K févr. 18 02:00 fpm-access.log-20170218 -rw-r--r-- 1 82 82 186 févr. 20 13:33 fpm-error.log -rw-r--r-- 1 82 82 374 févr. 17 09:35 fpm-error.log-20170217
Share on
PHP fpm and cli error log configuration was published on February 20, 2017 .
You might also enjoy (View all posts)
Php message php fpm
На этой странице представлена информация о настройке и содержании страницы состояния FPM. Смотрите также описание функции fpm_get_status() .
Настройка
Страница состояния FPM может быть включена путём установки параметра конфигурации pm.status_path в пуле FPM конфигурации.
В целях безопасности страница состояния FPM должна быть ограничена внутренними запросами или известными IP-адресами клиентов так как страница показывает URL запроса и информацию о доступных ресурсах.
В зависимости от конфигурации веб-сервера может потребоваться настроить веб-сервер так, чтобы разрешать запросы непосредственно к этому пути, минуя любые PHP скрипты. Пример конфигурации для Apache с FPM, слушающим на UDS и pm.status_path , установленным на /fpm-status будет выглядеть следующим образом:
Order Allow,Deny Allow from 127.0.0.1 ProxyPass "unix:/var/run/php-fpm.sock|fcgi://localhost/fpm-status"
После перезагрузки или перезапуска как FPM, так и веб-сервера страница состояния будет доступна из браузера (при условии, что запрос поступает с разрешённого IP-адреса, если было настроено ограничение IP-адресов).
Параметры запроса
Формат вывода страницы состояния может быть изменён путём указания одного из следующих параметров запроса:
Дополнительная информация также может быть возвращена с помощью параметра запроса full .
Примеры URL-адресов страниц состояния:
- https://localhost/fpm-status — Краткий вывод в текстовом формате по умолчанию
- https://localhost/fpm-status?full — Полный вывод в текстовом формате по умолчанию
- https://localhost/fpm-status?json — Краткий вывод в формате JSON
- https://localhost/fpm-status?html&full — Полный вывод в формате HTML
Отображаемая информация
Значения даты/времени используют формат временной метки UNIX в JSON и XML, в противном случае они используют формат, приводящий к следующему примеру даты: «03/Jun/2021:07:21:46 +0100» .
Параметр | Описание |
---|---|
pool | Имя пула процессов FPM. |
proccess manager | Тип менеджера процесса — static (статический), dynamic (динамический) или ondemand (по требованию). |
start time | Дата/время последнего запуска пула процессов. |
start since | Время в секундах с момента последнего запуска пула процессов. |
accepted conn | Общее количество принятых соединений. |
listen queue | Количество запросов (backlog), ожидающих свободного процесса. |
max listen queue | Максимальное количество запросов в очереди на прослушивание в любой момент времени. |
listen queue len | Максимально допустимый размер очереди прослушивания. |
idle processes | Количество процессов, которые в настоящее время простаивают (ожидают запросов). |
active processes | Количество процессов, которые в настоящее время обрабатывают запросы. |
total processes | Текущее общее количество процессов. |
max active processes | Максимальное количество одновременно активных процессов. |
max children reached | Было ли достигнуто максимальное количество процессов? Если да, то отображаемое значение будет 1 , иначе значение будет 0 . |
slow requests | Общее количество запросов, которые достигли настроенного request_slowlog_timeout . |
Параметр | Описание |
---|---|
pid | Системный PID процесса. |
state | Состояние процесса — Idle, Running, . |
start time | Дата/время начала процесса. |
start since | Количество секунд с момента начала процесса. |
requests | Общее количество обслуженных запросов. |
request duration | Общее время в секундах, затраченное на обслуживание запросов. |
request method | Метод HTTP последнего обслуженного запроса. |
request uri | URI последнего обслуженного запроса (после обработки веб-сервером он всегда может быть равен /index.php , если вы используете шаблонный редирект фронт-контроллера). |
content length | Длина тела запроса, в байтах, последнего запроса. |
user | HTTP-пользователь ( PHP_AUTH_USER ) последнего запроса. |
script | Полный путь к скрипту, выполненному последним запросом. Это будет ‘-‘ , если не применимо (например, запросы страницы состояния). |
last request cpu | Процент использования cpu последнего запроса. Это значение будет равно 0, если процесс не находится в состоянии Idle, потому что вычисление производится, когда обработка запроса завершена. |
last request memory | Максимальный объем памяти, потреблённый последним запросом. Это значение будет равно 0, если процесс не простаивает, так как вычисление производится после завершения обработки запроса. |
Замечание:
Все значения специфичны для пула и сбрасываются при перезапуске FPM.
Замечание:
В выводе формата OpenMetrics используются различные типы параметров, чтобы лучше соответствовать формату OpenMetrics. Параметры и описания их значений включены в выходные данные формата OpenMetrics.
Список изменений
nginx FastCGI ловит warning от воркеров PHP и пишет их в лог как Error
Вот на такие ворнинги програмисты кладут болт. А мне не нужны логи засранные этим флудом.
Поэтому я хочу отключить ворниги в логах
Но FastCGI воспринимает warning как ошибку и срет.
Если да, то, как правило, эти параметры настраиваются в конфиге пула процессов.
Который, в свою очередь совпадает с именём домена, который обслуживается на php-fpm . Ни разу не видел, чтобы эти настройки задавали как в ОП .
ну так иди и бей линейкой этих макак, чо ты тут то ноешь за распухшие логи?
после 4 часов матов я выяснил что есть два вида директив php_value и php_admin_value. первая дает настройки всякого по умолчанию, но в php код имеет право их менять, второе — php код не имеет право менять. а выяснил я то, чтт PHP мейнтейнеры уже 5 лет начиная с версии PHP 7.0 забивают болт на то, что PHP ( минимум в php-fpm) игнорирует php_admin_value error_reporting и дает коду ее переопределить. под крики и стоны всяких хостеров сайта я в логи которых льется куча ненужного говна.
Еще этот баг очень полюбили писатеоли бэкдоров, которые выключают вывод логов перед кодом бэкдора.
Соответственно решиние конкретно для сраных вордпрессов, которые портят мне жизнь- запихать в них плоагин костяль, которые чисит говнокод от вызова функции error_reporting, меняющей параметры вывода ошибок в логи.
Наиболее злые — вобще запрещают error_reporting.
Вот так. Простое желание убрать ворнинги привело к погружению в этот чан с говном — PHP.