温馨提示×

怎样排查centos lnmp的错误日志

小樊
40
2025-12-29 11:08:40
栏目: 智能运维

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.sock127.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.sock127.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(强制执行)。

0