温馨提示×

Ubuntu LNMP如何实现日志分析

小樊
38
2025-12-26 01:53:50
栏目: 智能运维

Ubuntu LNMP日志分析实操指南

一 日志位置与快速定位

  • 建议先明确各组件日志路径与用途,便于快速排查与统计。
组件 常见日志路径 主要用途
Nginx /var/log/nginx/access.log/var/log/nginx/error.log 访问记录、语法/启动/权限等错误
PHP-FPM /var/log/php7.x-fpm.log/var/log/php-fpm/error.log(版本与发行版不同) 运行时错误、进程异常
MySQL/MariaDB /var/log/mysql/error.log;慢查询日志位置由配置决定 启动/运行错误、慢查询
系统日志 /var/log/syslog/var/log/auth.log 服务启动、认证与安全事件
  • 快速查看与定位命令示例:
    • 实时查看 Nginx 错误日志:sudo tail -f /var/log/nginx/error.log
    • 实时查看 Nginx 访问日志:sudo tail -f /var/log/nginx/access.log
    • 查看 MySQL 错误日志:sudo tail -f /var/log/mysql/error.log
    • 查看 PHP-FPM 日志:sudo tail -f /var/log/php7.x-fpm.log
    • 查看系统日志:sudo tail -f /var/log/syslogsudo tail -f /var/log/auth.log
    • 端口占用检查:sudo netstat -tulnp | grep 80
    • Nginx 配置语法检查:sudo nginx -t
      以上路径与命令适用于 Ubuntu 上的常见 LNMP 部署,PHP-FPM 路径会因版本不同略有差异。

二 命令行快速分析范式

  • 关键词检索与计数
    • 在 Nginx 错误日志中查找“error”并统计次数:grep "error" /var/log/nginx/error.log | wc -l
    • 过滤包含指定关键字的行:grep "error" /var/log/nginx/error.log
  • 时间范围筛选
    • 按日期片段筛选(示例为 2021-01 的日志):grep "2021-01-[01-31]" /var/log/nginx/error.log
  • 字段提取与统计
    • 统计 Nginx 访问日志中 5xx 状态码数量:awk '$9 ~ /^5[0-9]{2}$/ {count++} END {print "5xx count:", count}' /var/log/nginx/access.log
    • Top 10 客户端 IP:awk '{ips[$1]++} END {for (ip in ips) print ips[ip], ip}' /var/log/nginx/access.log | sort -nr | head
    • Top 10 请求路径:awk '{paths[$7]++} END {for (p in paths) print paths[p], p}' /var/log/nginx/access.log | sort -nr | head
    • 平均响应时间(假设日志包含 $request_time):awk '{sum+=$NF; n++;} END {print "avg:", sum/n}' /var/log/nginx/access.log
  • 组合检索
    • 查找 5xx 且来源为某 IP 的日志:awk '$9 ~ /^5[0-9]{2}$/ && $1=="203.0.113.10"' /var/log/nginx/access.log
      以上命令基于 grep/awk/sed 的组合,可覆盖大多数日常定位与统计需求。

三 可视化与集中化分析

  • 实时可视化
    • 使用 GoAccess 对 Nginx 访问日志做实时分析与可视化:goaccess /var/log/nginx/access.log -a -o /var/www/html/report.html --log-format=COMBINED
  • 集中化平台
    • ELK Stack(Elasticsearch + Logstash + Kibana):适合多机统一检索、可视化与告警。
    • Graylog:集中日志、灵活路由与告警。
    • Fluentd:统一数据收集与转发(可对接 ES)。
      以上工具适合访问量增长、多实例或需要长期留存与可视化的场景。

四 日志轮转与保留策略

  • 使用 logrotate 管理日志生命周期,防止磁盘被撑满。
  • 示例(为 PHP 应用日志配置轮转,可按需调整):
    /path/to/your/php/app/logs/*.log {
        daily
        missingok
        rotate 7
        compress
        delaycompress
        notifempty
        create 0640 www-data adm
        sharedscripts
        postrotate
            if [ -f /var/run/php-fpm/php-fpm.sock ]; then
                kill -USR2 $(cat /var/run/php-fpm/php-fpm.pid)
            fi
        endscript
    }
    
  • 测试与启用
    • 测试配置:sudo logrotate -d /etc/logrotate.d/php-app
    • 通常随系统定时任务自动运行,无需额外启动服务。
      通过合理的轮转与压缩策略,可显著降低磁盘占用并保留必要的审计线索。

五 常见问题排查路径

  • Nginx 无法启动
    • 语法检查:sudo nginx -t
    • 端口占用:sudo netstat -tulnp | grep 80
    • 查看错误日志:sudo tail -f /var/log/nginx/error.log
  • PHP 异常
    • 查看 PHP-FPM 日志:sudo tail -f /var/log/php7.x-fpm.log
    • 必要时在 php.ini 中开启 error_reportinglog_errorserror_log 并重启 PHP-FPM
  • MySQL 连接失败
    • 查看错误日志:sudo tail -f /var/log/mysql/error.log
    • 确认服务已启动并检查应用数据库连接配置
  • 网站访问异常
    • 同时比对 access.log(流量与状态码)与 error.log(后端报错)
      以上步骤覆盖了最常见的故障面,配合“命令行快速分析”可迅速定位根因。

0