温馨提示×

PHP-FPM在Linux中的日志如何管理

小樊
36
2025-12-06 09:07:37
栏目: 编程语言

PHP-FPM 在 Linux 中的日志管理

一 日志类型与默认路径

  • PHP-FPM 的日志主要分为两类:Pool 错误日志访问日志。常见路径为 /var/log/php-fpm/,文件名可能为 error.logaccess.log,或按池名区分如 www.access.logwww-data-*.log。不同发行版与安装方式(如 Debian/UbuntuCentOS/RHEL)路径可能略有差异,建议先确认实际配置后再操作。

二 查看与实时监控

  • 实时查看错误日志:
    • 命令:sudo tail -f /var/log/php-fpm/error.log
  • 实时查看访问日志(若已启用):
    • 命令:sudo tail -f /var/log/php-fpm/access.log
  • 过滤关键字(如 error、warning):
    • 命令:grep error /var/log/php-fpm/error.loggrep warning /var/log/php-fpm/error.log
  • 若不确定日志路径,可在 PHP-FPM 配置或系统日志目录中检索关键字 error_log 来定位实际文件。

三 配置日志输出与级别

  • 编辑 Pool 配置文件(常见路径:/etc/php-fpm.d/www.conf/etc/php-fpm.conf),按需开启与调整:
    • 启用访问日志:access.log = /var/log/php-fpm/access.log
    • 指定错误日志:error_log = /var/log/php-fpm/error.log
    • 捕获子进程输出:catch_workers_output = yes
    • 使用管理员指令写入日志(避免 .ini 覆盖):
      • php_admin_flag[log_errors] = on
      • php_admin_value[error_log] = /var/log/php-fpm/error.log
  • 若需记录 PHP 层面的错误到单独文件,可在 php.ini 中设置:
    • log_errors = On
    • error_log = /var/log/php_errors.log
  • 修改后重启服务使配置生效:
    • 命令:sudo systemctl restart php-fpm(Nginx/Apache 配合重启视环境而定)。

四 日志轮转与归档

  • 使用 logrotate 管理 PHP-FPM 日志,创建或编辑 /etc/logrotate.d/php-fpm
    • 示例(按发行版区分权限与信号):
      • Ubuntu(使用 www-data 运行,发送 USR2 信号):
        /var/log/php-fpm/*.log {
            daily
            missingok
            rotate 7
            compress
            notifempty
            create 640 www-data adm
            sharedscripts
            postrotate
                if [ -f /var/run/php-fpm/php-fpm.pid ]; then
                    kill -USR2 `cat /var/run/php-fpm/php-fpm.pid`
                fi
            endscript
        }
        
      • CentOS/RHEL(常见属主 root adm,发送 SIGUSR1 信号):
        /var/log/php-fpm/*.log {
            daily
            missingok
            rotate 7
            compress
            delaycompress
            notifempty
            create 0640 root adm
            sharedscripts
            postrotate
                kill -SIGUSR1 `cat /var/run/php-fpm/php-fpm.pid 2>/dev/null` 2>/dev/null || :
            endscript
        }
        
  • 关键选项说明:
    • daily:按天轮转;rotate 7:保留 7 份归档;compress/delaycompress:压缩旧日志;
    • create:轮转后创建新文件并设定权限与属主;sharedscripts:所有日志轮转后仅执行一次 postrotate;
    • postrotate:向 PHP-FPM 主进程发送信号,通知其重新打开日志文件,确保写入不中断。
  • 手动测试与定时任务:
    • 测试:sudo logrotate -f /etc/logrotate.d/php-fpm
    • 定时:系统通常通过 /etc/cron.daily/logrotate 每日自动执行。

五 维护与优化建议

  • 权限与属主:确保日志目录与文件可被 PHP-FPM 进程写入(如 www-dataapache 用户),避免因权限不足导致日志丢失。
  • 日志级别:生产环境建议将 PHP 错误级别调整为 E_ALL & ~E_NOTICEwarning/error,降低 I/O 压力。
  • 集中化与告警:结合 rsyslog/ELK/Graylog 做集中采集、分析与告警;使用 Logwatch 做日常汇总。
  • 清理策略:除 logrotate 保留策略外,可配合 cron 定期清理超期归档,例如:
    • 0 0 * * * find /var/log/php-fpm -type f -name "*.gz" -mtime +30 -delete
  • 变更验证:每次调整配置或轮转策略后,使用 tail 观察新日志是否正常写入,并核验归档文件是否按策略生成。

0