如何筛选CentOS PHP关键日志
2025-12-25 13:24:240
定位日志文件与确认来源
先确认使用的是PHP-FPM还是mod_php(Apache),不同处理程序的日志路径不同。
常见路径与用途如下:
| 组件/场景 | 日志类型 | 典型路径 | 说明 |
|---|---|---|---|
| PHP-FPM | 错误日志 | /var/log/php-fpm/error.log | 运行时错误、警告 |
| PHP-FPM | 访问日志 | /var/log/php-fpm/access.log | 请求记录(若启用) |
| PHP-FPM | 慢执行日志 | 由slowlog配置项指定 | 执行时间超过阈值的脚本 |
| Apache+mod_php | 错误日志 | /var/log/httpd/error_log | PHP错误通常写入此处 |
| Apache+mod_php | 访问日志 | /var/log/httpd/access_log | HTTP请求记录 |
| Nginx+PHP-FPM | 错误日志 | /var/log/nginx/error.log | 与上游PHP-FPM交互错误 |
| Nginx+PHP-FPM | 访问日志 | /var/log/nginx/access.log | HTTP请求记录 |
若使用systemd,也可用journalctl查看服务日志:例如
journalctl-uphp-fpm或
journalctl-uhttpd。以上路径与方式适用于CentOS常见部署。
快速筛选命令
实时查看新增错误
PHP-FPM:
tail-f/var/log/php-fpm/error.log|grep-i"error\|fatal\|warning"
Apache:
tail-f/var/log/httpd/error_log|grep-i"php"
Nginx:
tail-f/var/log/nginx/error.log|grep-i"php\|upstream"
按时间窗口截取
示例(按日志内时间范围):
awk'/2025-11-2910:00:00/,/2025-11-2911:00:00/'/var/log/php-fpm/error.log
按关键字与上下文
含关键字前后各5行:
grep-C5"keyword"/var/log/httpd/error_log
按IP、URI、状态码筛选
某IP的访问:
grep'192.168.1.100'/var/log/nginx/access.log
某接口(如/api/login)的5xx错误:
grep'/api/login'/var/log/nginx/access.log|awk'$9>=500'
统计与排序
Top10最频繁URI:
awk'{print$7}'/var/log/nginx/access.log|sort|uniq-c|sort-nr|head-10错误数按小时统计:
grep-i"error"/var/log/php-fpm/error.log|cut-d''-f1-2|uniq-c以上命令可组合管道以满足多条件筛选。
按场景给出可直接使用的筛选命令
定位PHP致命错误与解析器错误
grep-E"PHP(Fatal|Parse)error"/var/log/php-fpm/error.log-A2-B2
找出执行慢的请求(PHP-FPM慢日志)
若
slowlog已开启,直接按时间阈值筛选,例如阈值5秒:
awk'$4>5{print}'/path/to/php-fpm.slow.log追踪某个URL的异常(跨访问与错误日志)
grep'/checkout.php'/var/log/nginx/access.log|awk'{print$1,$7,$9}'与grep-i"checkout.php"/var/log/php-fpm/error.log联合排查
统计4xx/5xx比例
awk'{s[$9]++;total++;}END{for(kins)printf"%s:%d(%.2f%%)\n",k,s[k],s[k]/total*100}'/var/log/nginx/access.log实时观察某接口的错误并高亮
tail-f/var/log/nginx/access.log|grep--line-buffered'/api/pay'|awk'$9>=400{print"\033[31m"$0"\033[0m"}'仅输出匹配行的请求时间与方法
grep'login'/var/log/php-fpm/access.log|awk'{print$1,$2,$3,$6}'上述命令覆盖错误、慢请求、访问异常与统计等常见场景。确保日志可被筛选到
在php.ini中开启错误记录并写入文件(生产建议
display_errors=Off):
error_reporting=E_ALL
display_errors=Off
log_errors=On
error_log=/var/log/php-fpm/error.log
修改后重启服务:
systemctlrestartphp-fpm
在PHP-FPM池配置(如www.conf)中启用慢日志并设置阈值:
slowlog=/var/log/php-fpm/www-slow.log
request_slowlog_timeout=5s
修改后重启:
systemctlrestartphp-fpm
确认Web服务器(Apache/Nginx)访问日志已开启并写入预期路径,以便从访问侧关联错误与请求。以上配置可确保错误、慢请求与访问记录落地,便于筛选与分析。
日志轮转与长期分析
使用logrotate对PHP-FPM、Apache、Nginx日志进行按日/按大小轮转,避免单文件过大影响筛选性能。
集中化与可视化:小规模可用GoAccess快速出报表;中大规模建议ELKStack(Elasticsearch+Logstash+Kibana)或Graylog做检索、告警与仪表盘。这些做法有助于长期保留与高效分析日志。
声明:本文来自用户分享和网络收集,仅供学习与参考,测试请备份。

