温馨提示×

CentOS PHP应用如何进行日志管理

小樊
41
2025-12-11 11:47:24
栏目: 编程语言

CentOS 上 PHP 应用的日志管理实践

一 日志体系与采集要点

  • PHP 错误日志:在 php.ini 中开启错误日志,生产环境建议关闭浏览器显示错误,避免信息泄露。示例:
    • error_reporting = E_ALL
    • display_errors = Off
    • log_errors = On
    • error_log = /var/log/php_errors.log
  • PHP-FPM 日志:在 /etc/php-fpm.d/www.conf 中启用访问与错误日志,便于定位进程与慢请求。
    • error_log = /var/log/php-fpm/error.log
    • access.log = /var/log/php-fpm/access.log
    • catch_workers_output = yes
  • Web 服务器日志:
    • Nginx:error_log /var/log/nginx/error.log;access_log /var/log/nginx/access.log main buffer=32k flush=300s;
    • Apache:ErrorLog /var/log/httpd/error_log;CustomLog /var/log/httpd/access_log combined
  • 应用业务日志:使用 Monolog 等库写入应用日志文件(如 /var/log/myapp.log),与 PHP-FPM/Web 日志分离,便于排查与审计。

二 日志轮转与保留策略

  • 系统级轮转工具 logrotate 是首选,按天轮转、压缩归档、保留 N 份,覆盖 PHP、PHP-FPM、Nginx、Apache 等日志。
  • 示例配置与要点:
    • PHP 错误日志(/etc/logrotate.d/php)
      /var/log/php_errors.log {
          daily
          missingok
          rotate 7
          compress
          notifempty
          create 640 root adm
      }
      
    • PHP-FPM 日志(/etc/logrotate.d/php-fpm)
      /var/log/php-fpm/*.log {
          daily
          missingok
          rotate 7
          compress
          notifempty
          create 0640 root adm
          postrotate
              /usr/sbin/php-fpm -k >/dev/null 2>&1 || true
          endscript
      }
      
    • Nginx 日志(/etc/logrotate.d/nginx)
      /var/log/nginx/*.log {
          daily
          missingok
          rotate 7
          compress
          notifempty
          create 0640 nginx nginx
          postrotate
              /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
          endscript
      }
      
    • 测试与生效:
      • 手动触发:logrotate -f /etc/logrotate.d/php-fpm
      • 验证:ls -lh /var/log/php-fpm/ 查看是否生成 .gz 归档
  • 命令行/长驻脚本场景:若无法发送信号给进程,可在应用日志上使用 copytruncate 方式避免重启进程(权衡:可能丢失尾部少量日志)。
    /var/log/myapp.log {
        daily
        missingok
        rotate 7
        compress
        copytruncate
        notifempty
    }
    
  • 不建议用 find … -mtime +N -delete 替代 logrotate 做日常轮转,易与系统策略冲突且缺少压缩、归档与通知能力。

三 监控分析与告警

  • 实时查看与排查:
    • tail -f /var/log/php-fpm/error.log
    • tail -f /var/log/nginx/error.log
    • grep/awk/sed 快速检索,例如:grep “error” /var/log/php-fpm.log
  • 周期性分析与报表:
    • 安装并使用 logwatch 生成日报/周报,辅助发现异常频率与峰值时段。
  • 集中式日志管理:
    • 小规模可先接入 rsyslog/syslog-ng 做统一采集与转发;
    • 中大型建议 ELK Stack(Elasticsearch, Logstash, Kibana)Graylog 做检索、可视化与告警。

四 安全与性能要点

  • 权限最小化:日志目录与文件建议属主 root:adm,权限 0640,避免 Web 进程直接写入敏感日志;Nginx 日志属主 nginx:nginx
  • 生产显示策略:display_errors = Off,仅记录到日志;开发环境可临时开启便于调试。
  • 日志级别:生产环境避免记录过多 DEBUG 级别,可按需调整为 E_ALL & ~E_NOTICE~E_DEPRECATED & ~E_STRICT,减少噪声与 I/O。
  • 缓冲与性能:Nginx access_log 使用 buffer=32k flush=300s 降低磁盘 I/O 抖动;PHP-FPM 启用 catch_workers_output=yes 捕获子进程输出到错误日志,便于排查。
  • 变更生效:修改 php.iniphp-fpm 配置后,重启服务(如 systemctl restart php-fpm),并验证日志与轮转是否正常。

0