怎样排查centos lnmp的错误日志
导读:CentOS LNMP 错误日志排查手册 一 快速定位与日志路径 先确认故障现象与服务状态,再按组件查看日志与配置。下表给出 CentOS 上 LNMP 常用日志路径与用途(路径可能因安装方式或自定义而不同,请以实际配置为准)。...
CentOS LNMP 错误日志排查手册
一 快速定位与日志路径
- 先确认故障现象与服务状态,再按组件查看日志与配置。下表给出 CentOS 上 LNMP 常用日志路径与用途(路径可能因安装方式或自定义而不同,请以实际配置为准)。
| 组件 | 常见日志路径 | 主要用途 |
|---|---|---|
| Nginx | /var/log/nginx/error.log(访问日志:/var/log/nginx/access.log) | 启动失败、权限/路径错误、与上游通信异常 |
| PHP-FPM | /var/log/php-fpm/error.log 或 /var/log/php7.x-fpm.log | PHP 语法/运行时错误、进程池资源告警 |
| MySQL/MariaDB | /var/log/mysql/error.log 或 /var/log/mariadb/error.log | 启动失败、权限/连接、InnoDB 错误 |
| 系统日志 | /var/log/messages | 内核/服务级事件、资源告警 |
- 快速查看与验证:
- 实时跟踪错误日志:tail -f /var/log/nginx/error.log;tail -f /var/log/php-fpm/error.log;tail -f /var/log/mysql/error.log
- 服务状态与端口监听:systemctl status nginx php-fpm mysqld;ss -tulnp | egrep ‘:(80|443|9000|3306)’
二 分组件排查步骤
- Nginx
- 语法与配置:nginx -t;核对 include 与站点配置中的 root、index、fastcgi_pass 等指令。
- 常见错误与处理:
- 端口被占用:Address already in use → ss -tulnp | grep ‘:80’ 找到 PID 并处理,或调整 listen 端口后重启。
- 权限/路径:Permission denied / No such file or directory → 核对 root 目录、文件属主与权限(如 nginx:nginx,目录 755、文件 644),必要时 setenforce 0 做临时排除 SELinux 影响。
- 502/504:检查 PHP-FPM 是否运行、fastcgi_pass 地址是否匹配(如 unix:/run/php-fpm.sock 或 127.0.0.1:9000),并关注 upstream 超时/进程不足。
- PHP-FPM
- 语法与池配置:php-fpm -t;检查 /etc/php/*/fpm/pool.d/www.conf 中 user/group、listen、pm.* 等关键项。
- 常见错误与处理:
- 进程数不足:server reached pm.max_children → 结合内存与负载适当调大 pm.max_children、pm.start_servers 等。
- 脚本超时/慢执行:调整 request_terminate_timeout、request_slowlog_timeout 并查看慢日志定位问题代码。
- 权限/套接字:connect() to unix:/run/php-fpm.sock failed (13: Permission denied) → 统一 Nginx 与 PHP-FPM 的运行用户/组,确认套接字目录与权限。
- MySQL/MariaDB
- 服务与错误日志:systemctl status mysqld;查看 /var/log/mysql/error.log 中的 InnoDB、启动失败、权限错误等线索。
- 常见错误与处理:
- 连接失败/拒绝:检查应用 DB 配置、用户权限与 host(localhost/%)、以及 3306 端口连通性。
- 性能问题:开启并分析 slow_query_log,优化慢 SQL 与索引。
三 高效检索与分析命令
- 实时监控与关键字过滤
- tail -f /var/log/nginx/error.log | egrep -i ‘error|warn|crit|alert|emerg’
- tail -f /var/log/php-fpm/error.log | egrep -i ‘php|fpm|warning|notice’
- tail -f /var/log/mysql/error.log | egrep -i ‘error|access denied|failed’
- 访问层问题定位(Nginx)
- 统计状态码分布:awk ‘{ print $9} ’ /var/log/nginx/access.log | sort | uniq -c | sort -nr
- Top 10 访问 IP:awk ‘{ print $1} ’ /var/log/nginx/access.log | sort | uniq -c | sort -rn | head
- 指定时间段请求量:grep “01/May/2025:10” /var/log/nginx/access.log | grep -E “10:[0-9]{ 2} :|11:00:00” | wc -l
- 热门 URL(去参):awk ‘{ print $7} ’ /var/log/nginx/access.log | awk -F’?’ ‘{ print $1} ’ | sort | uniq -c | sort -nr | head
- 可视化与集中化
- GoAccess 生成 HTML 报告:goaccess -f /var/log/nginx/access.log -a > /var/www/html/report.html
- 大规模场景建议接入 ELK/Graylog/Loki 做集中检索与告警。
四 常见错误与修复要点
- 502 Bad Gateway
- 检查 PHP-FPM 是否运行(systemctl status php-fpm);核对 Nginx fastcgi_pass 与 PHP-FPM listen 一致(如 unix:/run/php-fpm.sock 或 127.0.0.1:9000);确认进程数与超时设置合理;检查目录/套接字权限与 SELinux。
- 504 Gateway Timeout
- 增大 PHP-FPM 的 request_terminate_timeout;优化慢脚本与数据库查询;必要时提升 listen.backlog 与内核网络参数。
- 403 Forbidden / 404 Not Found
- 403:核对 root 路径、index 文件、目录权限与 SELinux;404:确认请求路径与 root/alias 配置是否匹配,文件是否存在。
- 数据库连接失败
- 确认 mysqld 运行、用户权限与 host 正确、网络与防火墙放行 3306;必要时查看错误日志中的具体报错(如 access denied、unknown host)。
- Nginx 无法启动
- 先执行 nginx -t 修正语法;排查端口占用(ss -tulnp | grep ‘:80’);检查配置中 include 路径与站点配置是否完整。
五 日志轮转与保留策略
- 使用 logrotate 管理日志体积与保留天数,避免磁盘被占满。示例(/etc/logrotate.d/nginx):
- /var/log/nginx/*.log { daily missingok rotate 30 compress delaycompress notifempty create 0640 nginx nginx sharedscripts postrotate systemctl reload nginx > /dev/null 2> & 1 || true endscript }
- 测试与强制执行:logrotate -d /etc/logrotate.d/nginx(模拟);logrotate -f /etc/logrotate.d/nginx(强制执行)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 怎样排查centos lnmp的错误日志
本文地址: https://pptw.com/jishu/783432.html
