温馨提示×

Linux服务器LNMP日志如何分析

小樊
33
2025-12-14 01:49:20
栏目: 云计算

LNMP日志分析实操指南

一 日志位置与快速定位

  • 建议先确认各组件日志路径与级别,再进入分析。下表给出常见路径与用途(不同发行版或安装方式可能略有差异,请以实际配置为准)。
组件 日志路径 主要用途
Nginx 访问日志:/var/log/nginx/access.log;错误日志:/var/log/nginx/error.log 记录请求与错误,定位403/404/502
PHP-FPM 常见:/var/log/php-fpm.log/var/log/php7.x-fpm.log;部分系统为 /var/log/php-fpm/www.log 捕获PHP 运行时错误、慢请求等
MySQL/MariaDB 错误日志:/var/log/mysql/error.log;慢查询日志:/var/log/mysql/slow.log;通用查询日志:/var/log/mysql/general.log 连接失败、语法错误、性能瓶颈
系统与服务 系统日志:/var/log/syslog;服务日志:journalctl -u nginx/mysql/php-fpm 服务启动失败、崩溃、系统级异常
  • 快速查看与跟踪常用命令:
    • 实时查看 Nginx 错误日志:sudo tail -f /var/log/nginx/error.log
    • 查看 Nginx 服务日志:journalctl -u nginx -f
    • 查看 PHP-FPM 错误日志:sudo tail -f /var/log/php-fpm.log(或对应版本路径)
    • 查看 MySQL 错误日志:sudo tail -f /var/log/mysql/error.log
    • 查看系统日志:tail -f /var/log/syslog
      以上路径与命令适用于多数 Ubuntu/Debian 场景,其他发行版请按实际路径调整。

二 常见故障的日志切入点

  • Nginx 无法启动或端口冲突
    • 配置语法检查:nginx -t
    • 端口占用检查:netstat -tulnp | grep 80ss -tulnp | grep 80
    • 查看错误日志:tail -f /var/log/nginx/error.logjournalctl -u nginx -f
  • 网站访问异常(白屏、502、504、403、404)
    • 访问日志定位请求与返回码:tail -f /var/log/nginx/access.log
    • 错误日志定位上游或权限问题:tail -f /var/log/nginx/error.log
  • PHP 报错或空白页
    • 打开并查看 PHP-FPM 错误日志(确保 php.iniwww.conf 中开启错误日志),再结合 Nginx 错误日志交叉验证
  • MySQL 连接失败或异常
    • 错误日志:tail -f /var/log/mysql/error.log
    • 慢查询日志:/var/log/mysql/slow.log(定位性能瓶颈)
    • 通用查询日志:/var/log/mysql/general.log(按需开启)
      以上切入点覆盖了部署与运行中最常见的故障面,优先从错误日志与服务状态入手可快速缩小范围。

三 高效分析命令与示例

  • 基础过滤与统计
    • 按状态码统计 Top URL:awk ‘{print $9}’ /var/log/nginx/access.log | sort | uniq -c | sort -nr | head
    • 统计 5xx 错误数:awk ‘$9 ~ /^5/ {count++} END {print “5xx:”, count}’ /var/log/nginx/access.log
    • 查找特定 IP 的请求:grep ‘^203.0.113.10’ /var/log/nginx/access.log
    • 按 UA 统计:awk -F’"’ ‘{print $6}’ /var/log/nginx/access.log | sort | uniq -c | sort -nr | head
    • 按时间段过滤(示例:2025-12-14 10 点):awk ‘$4 ~ /[14/Dec/2025:10:/ {print}’ /var/log/nginx/access.log
  • 可视化与集中化
    • 生成 Nginx 访问报表:goaccess /var/log/nginx/access.log -a -o /var/www/html/report.html
    • 集中与告警:小规模可用 ELK/Graylog 做检索与可视化;配合 Prometheus + Grafana 做指标与日志联动告警
      以上命令覆盖日常排障的高频需求,结合可视化工具可显著提升分析效率。

四 日志轮转与安全

  • 使用 logrotate 自动轮转,防止日志膨胀
    • 示例(Nginx):在 /etc/logrotate.d/nginx 中配置
      • 关键参数:daily | weekly | monthlyrotate 7compressmissingoknotifemptycreate 0640 www-data adm、**postrotate /usr/sbin/nginx -s reload > /dev/null 2>&1`
    • 示例(PHP 应用日志):在 /etc/logrotate.d/php-app 中配置
      • 关键参数:dailyrotate 7compressdelaycompressnotifemptycreate 0640 www-data adm
      • postrotate 中向 PHP-FPM 发送 USR2 信号以重新打开日志文件(如:kill -USR2 $(cat /var/run/php-fpm/php-fpm.pid)
    • 测试与生效:logrotate -d /etc/logrotate.d/yourconf(干跑),配置正确后由系统定时任务自动执行
  • 安全与合规
    • 权限最小化:日志目录与文件建议 0640/0750,属主 root:admwww-data:adm
    • 定期清理与归档:保留关键周期日志,过期压缩归档或转存至对象存储
    • 集中管理与审计:多机环境建议统一到 syslog/rsyslogELK/Graylog,并配置关键事件告警
      以上做法可确保日志长期可用、可审计且不影响业务稳定性。

0