温馨提示×

ubuntu lamp日志如何查看与分析

小樊
42
2025-12-12 07:33:57
栏目: 智能运维

Ubuntu LAMP 日志查看与分析

一 日志位置与快速定位

  • 建议先明确组件与常见路径,再结合命令行实时查看与过滤。下表汇总了 Ubuntu 上 LAMP 常用日志的默认路径与用途(实际路径可能因版本与安装方式略有差异,请以本机配置为准)。
组件 日志文件 典型路径 主要用途
Apache 访问日志 /var/log/apache2/access.log 记录所有 HTTP 请求
错误日志 /var/log/apache2/error.log 语法、权限、后端错误等
MySQL 错误日志 /var/log/mysql/error.log 启动/运行/停止错误
慢查询日志 /var/log/mysql/slow.log 超过阈值的 SQL
通用查询日志 /var/log/mysql/general.log 全部 SQL(调试用)
PHP FPM 错误日志 /var/log/php7.x-fpm.log/var/log/php-fpm.log PHP-FPM 进程错误
PHP 错误日志 php.ini error_log 指定,常见 /var/log/php_errors.log/var/log/php/error.log PHP 运行时错误
系统 系统日志 /var/log/syslog 全系统事件
认证日志 /var/log/auth.log SSH 登录等安全事件
  • 快速定位 PHP 错误日志路径的两种方式:
    • 命令行:php -i | grep 'Loaded Configuration File',再在对应 php.ini 中查看 error_log 配置项。
    • 配置文件:检查 /etc/php/版本号/apache2/php.ini/etc/php/版本号/fpm/php.ini 中的 error_log

二 常用查看与分析命令

  • 实时查看与过滤
    • 实时看 Apache 错误日志:sudo tail -f /var/log/apache2/error.log
    • 过滤特定 IP 的访问:grep '192.168.1.100' /var/log/apache2/access.log
    • 统计访问量 Top N IP:awk '{print $1}' /var/log/apache2/access.log | sort | uniq -c | sort -nr | head -10
  • 系统级日志
    • 按服务过滤:journalctl -u apache2journalctl -u mysql
    • 按时间范围:journalctl --since "2025-12-01" --until "2025-12-12"
  • 文本处理组合
    • 按关键字统计错误级别:grep -E 'error|warning|notice' /var/log/php/error.log | wc -l
    • 查看最近 100 行并高亮错误:tail -n 100 /var/log/apache2/error.log | grep --color=auto -i error

三 组件专项分析与优化

  • Apache
    • 定位错误优先看 error.log;状态码含义:404(未找到)、500(服务器内部错误)、403(禁止访问)、401(未授权)。
    • 访问分析可用 awk/sort/uniq 组合统计 Top IP、Top URL、返回码分布等。
    • 日志轮转示例(/etc/logrotate.d/apache2):
      /var/log/apache2/*.log {
          daily
          missingok
          rotate 52
          compress
          delaycompress
          notifempty
          create 0644 root adm
          sharedscripts
          postrotate
              systemctl reload apache2 >/dev/null
          endscript
      }
      
    • 动态调日志级别:LogLevel debug(调试期),上线后恢复为合适的级别(如 warn/error)。
  • MySQL
    • 确认日志路径与开关:
      SHOW VARIABLES LIKE 'general_log_file';
      SHOW VARIABLES LIKE 'log_error';
      SHOW VARIABLES LIKE 'slow_query_log_file';
      SHOW VARIABLES LIKE 'slow_query_log';
      SHOW VARIABLES LIKE 'long_query_time';
      
    • 启用慢查询(示例阈值 2 秒):
      SET GLOBAL slow_query_log = 1;
      SET GLOBAL long_query_time = 2;
      
    • 分析慢查询:
      • mysqldumpslow -s t -t 10 /var/log/mysql/slow.log(按耗时取 Top 10)
      • pt-query-digest /var/log/mysql/slow.log(更强大的聚合与诊断)
  • PHP
    • 确认日志路径:在 php.inierror_log;FPM 日志常见 /var/log/php7.x-fpm.log
    • 实时跟踪:sudo tail -f /var/log/php7.x-fpm.log | grep --color=auto -i fatal
    • 生产建议:display_errors=Offlog_errors=On,避免敏感信息泄露;复杂问题可配合 Xdebug 做性能与调用栈分析。

四 故障排查与监控联动

  • 快速排障流程
    • 服务状态:systemctl status apache2systemctl status mysql
    • 配置语法:apachectl configtest
    • 资源与磁盘:free -mdf -h
    • 端口监听:ss -tulnp | grep ':80\|:443'
    • 网络与安全:检查防火墙(如 ufw/firewalld)与云安全组是否放行 80/443;必要时排查 SELinux/AppArmor 策略。
    • 线索回查:系统级事件看 /var/log/syslogjournalctl,Web 层看 Apache error.log,数据库层看 MySQL error.log,脚本层看 PHP 错误日志
  • 监控与安全
    • 实时监控:apachetop(Apache)、mysqladmin status/SHOW PROCESSLIST(MySQL)、top/htopiostatvmstatdfiotop
    • 日志报告与告警:Logwatch 生成日报;fail2ban 基于日志自动封禁恶意 IP。

五 日志治理与最佳实践

  • 容量与轮转
    • 使用 logrotate 定期切割、压缩、保留历史,防止磁盘被日志打满;为 Apache/MySQL/PHP 分别配置合理的保留周期与压缩策略。
  • 权限与合规
    • 仅授予必要权限,避免日志泄露敏感信息(如数据库口令、会话数据);必要时对归档做脱敏。
  • 集中化与可视化
    • 中小规模可用 ELK Stack(Elasticsearch/Logstash/Kibana)Graylog 做集中存储、检索与仪表板;大规模建议引入消息队列与分片策略。
  • 变更与备份
    • 调整日志级别或路径前先备份配置;变更后验证服务可用性与日志写入是否正常。

0