温馨提示×

CentOS Apache日志分析

小樊
32
2025-12-17 13:09:03
栏目: 智能运维

CentOS 上 Apache 日志分析实用指南

一 日志位置与格式

  • 默认路径
    • 访问日志/var/log/httpd/access_log
    • 错误日志/var/log/httpd/error_log
    • 说明:在 RHEL/CentOS 上通常为上述路径;在 Debian/Ubuntu 上常见为 /var/log/apache2/。若自定义了日志路径,可在主配置中搜索 ErrorLogCustomLog 指令确认。
  • 常用日志格式
    • Common Log Format(CLF)
      LogFormat “%h %l %u %t "%r" %>s %b” common
    • Combined Log Format(Combined)
      LogFormat “%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"” combined
    • 字段含义要点:%h(客户端IP)、%t(时间)、%r(请求行)、%>s(状态码)、%b(响应字节数)、%{Referer}i(来源页)、%{User-Agent}i(UA)。
  • 快速确认配置
    • 查看主配置与虚拟主机中 ErrorLog/CustomLog 的实际路径与格式定义,必要时用 apachectl configtest 校验语法。

二 命令行快速分析

  • 实时监控与定位
    • 实时查看访问日志:tail -f /var/log/httpd/access_log
    • 实时查看错误日志:tail -f /var/log/httpd/error_log
    • 按关键字过滤:grep “ERROR” /var/log/httpd/error_log
  • 访问统计与排查
    • Top N 来源 IP:
      cat /var/log/httpd/access_log | awk ‘{print $1}’ | sort | uniq -c | sort -nr | head
    • 某时间段的 IP 访问:
      cat /var/log/httpd/access_log | grep “2025-12-17” | awk ‘{print $1}’ | sort | uniq -c | sort -nr
    • 指定页面访问次数:
      cat /var/log/httpd/access_log | grep “/index.php” | wc -l
    • 状态码分布(示例:统计 404):
      cat /var/log/httpd/access_log | awk ‘{print $9}’ | sort | uniq -c | sort -nr | grep 404
    • 慢请求识别(日志含 %T/%D 时):
      awk ‘{print $NF, $7}’ access.log | sort -k1,1nr | head
  • 小技巧
    • 字段位置会随 LogFormat 变化,先用 head 观察样例行,再调整 awk$n 列号。

三 错误日志定位与常见错误

  • 服务级故障排查
    • 查看服务状态:systemctl status httpd -l --no-pager
    • 查看 systemd 日志:journalctl -u httpd --since today --no-pager
  • 错误日志高频场景
    • 403 Forbidden:如日志含 “client denied by server configuration”,多为 Directory/Files 访问控制或 .htaccess 规则导致。
    • 404 Not Found:请求资源不存在或 DocumentRootAlias 配置不当。
    • 500 Internal Server Error:后端脚本异常、权限/属主错误、模块配置问题等。
    • Premature end of script headers: script.php:常见于 CGI/PHP 脚本输出头未正确发送或权限/解释器配置问题。
  • 排查步骤建议
    • 先定位错误时间点与 client IP → 对照访问日志复现 → 检查对应 虚拟主机配置、文件系统权限与 SELinux 上下文 → 复核后端应用日志。

四 可视化与长期分析工具

  • GoAccess:实时、终端/HTML 报表,适合快速洞察 PV/UV、状态码、UA、Referer 等。
  • Awstats:老牌工具,支持多站点,生成 HTML 周期报告,适合长期趋势分析。
  • Webalizer:轻量、生成 HTML 报告,部署简单。
  • ApacheTop:类 top 的实时请求统计,便于观察突发流量。
  • ELK Stack(Elasticsearch/Logstash/Kibana)/Graylog:集中化采集、检索与可视化,适合大规模与多源日志。

五 日志轮转与维护

  • 使用 logrotate 管理 Apache 日志
    • 配置文件示例(/etc/logrotate.d/apache2 或 httpd):
      /var/log/httpd/*.log {
          daily
          missingok
          rotate 7
          compress
          delaycompress
          notifempty
          create 0640 root adm
          sharedscripts
          postrotate
              /usr/bin/systemctl reload httpd >/dev/null 2>&1 || true
          endscript
      }
      
    • 测试与强制执行:
      logrotate -d /etc/logrotate.conf -d /etc/logrotate.d/apache2 # 干跑
      logrotate -f /etc/logrotate.d/apache2 # 强制执行
  • 建议
    • 结合 cron 定时执行,保留周期与压缩策略按合规与容量规划设定;轮转后确保 httpd 能正确重新打开日志文件。

0