监控CentOS上的PHP错误日志

一确认日志路径与配置

先明确PHP的日志写入位置,常见有三类:

PHP-FPM错误日志:通常为/var/log/php-fpm/error.log(多池环境可能还有/var/log/php-fpm/www.log等)。

Apache错误日志:通常为/var/log/httpd/error_log(PHP运行在mod_php时,语法/启动错误常写入此处)。

PHP内置错误日志:由php.ini的error_log指定,例如/var/log/php_errors.log。

建议的php.ini关键配置(生产环境):

error_reporting=E_ALL

display_errors=Off

log_errors=On

error_log=/var/log/php_errors.log

Web服务器日志(便于关联请求与错误):

Apache:在/etc/httpd/conf/httpd.conf中设置ErrorLog/var/log/httpd/error_log与CustomLog/var/log/httpd/access_logcombined。

Nginx:在/etc/nginx/nginx.conf中设置error_log/var/log/nginx/error.log;access_log/var/log/nginx/access.log;。

验证配置是否生效:

查看CLI与FPM的生效配置:分别执行php-i|greperror_log与php-fpm-i|greperror_log。

触发一条可控错误(如调用未定义函数)并确认日志是否写入目标文件。

二命令行快速监控与排查

实时查看日志尾部:

查看PHP-FPM日志:tail-f/var/log/php-fpm/error.log

查看Apache错误日志:tail-f/var/log/httpd/error_log

关键字检索(减少缓冲延迟):

例如:grep--line-buffered‘error|Warning|Fatal’/var/log/php-fpm/error.log

按时间定位:

例如:grep“2025-11-29”/var/log/php-fpm/error.log

若PHP错误写入了Web服务器错误日志,可联合查看访问与错误:

tail-f/var/log/httpd/error_log与tail-f/var/log/httpd/access_log

systemd场景(如服务日志聚合):

查看httpd单元日志:journalctl-uhttpd-f。

三自动化分析与告警方案

轻量分析与日报:

使用Logwatch生成日志分析报告并通过邮件发送(适合日常巡检):

安装:sudoyuminstalllogwatch

运行示例:sudologwatch--outputmail--mailtoyour-email@example.com

安全与滥用拦截:

使用fail2ban监控日志并自动封禁恶意来源(示例为监控PHP-FPM错误日志中的可疑频繁报错):

安装:sudoyuminstallfail2ban

配置/etc/fail2ban/jail.local:

[DEFAULT]bantime=600;findtime=600;maxretry=3

[php-fpm]enabled=true;filter=php-fpm;action=iptables-multiport[name=PHP,port=“http,https”,protocol=tcp"];logpath=/var/log/php-fpm/error.log

启动:sudosystemctlstartfail2ban&&sudosystemctlenablefail2ban

集中化日志与可视化:

使用ELKStack(Elasticsearch+Logstash+Kibana)收集、解析与展示PHP日志,并在Kibana中配置告警规则(适合中大型环境与多维分析)。

四日志轮转与容量管理

使用logrotate对PHP与Web服务日志进行按日轮转、压缩与保留,避免磁盘被占满:

示例(/etc/logrotate.d/php与/etc/logrotate.d/httpd):

/var/log/php_errors.log/var/log/php-fpm/.log/var/log/httpd/.log{

daily;missingok;rotate7;compress;delaycompress;notifempty;create0644apacheapache;sharedscripts;postrotate

systemctlreloadhttpd>/dev/null2>&1||true;systemctlreloadphp-fpm>/dev/null2>&1||true;

endscript}

建议将轮转周期与保留天数(如7天)纳入变更与容量评估流程。