温馨提示×

CentOS Apache日志如何查看与分析

小樊
35
2025-12-07 15:08:19
栏目: 智能运维

CentOS 上 Apache 日志的查看与分析

一 日志位置与确认

  • 默认路径:在 CentOS(使用 httpd 包)中,日志通常位于 /var/log/httpd/,包含 access_log(访问日志)与 error_log(错误日志)。若通过源码安装或自定义配置,路径可能被改写。快速确认方式:
    • 查看进程打开的文件:
      • sudo lsof -p $(systemctl show -p MainPID httpd | awk -F= ‘{print $2}’) | grep -E ‘access|error’
    • 在配置中搜索日志指令:
      • sudo grep -R “ErrorLog|CustomLog” /etc/httpd/
  • 常见变体与排查要点:
    • 某些系统或第三方教程会出现 /var/log/apache2//var/log/apache/;若未找到文件,优先检查虚拟主机配置与 Include 目录。
    • 早期或自定义安装中,ErrorLog 可能写成相对路径(如 log/error_log),其实际路径需结合 ServerRoot 解析;也可能通过符号链接指向 /var/log/httpd/error_log

二 常用查看命令

  • 实时查看最新日志(调试首选):
    • sudo tail -f /var/log/httpd/access_log
    • sudo tail -f /var/log/httpd/error_log
  • 分页与快速定位:
    • less /var/log/httpd/access_log(进入后可用 /关键词 搜索,按 n/N 跳转)
  • 查看末尾 N 行:
    • tail -n 100 /var/log/httpd/access_log
  • 按关键字过滤:
    • grep “192.168.1.100” /var/log/httpd/access_log
    • grep “php” /var/log/httpd/error_log
  • 权限提示:/var/log/httpd/ 下的文件通常需要 root 权限查看,建议使用 sudo

三 日志格式与字段含义

  • 常见访问日志格式:
    • 通用日志格式(CLF):%h %l %u %t "%r" %>s %b
    • 组合日志格式(Combined):%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"
  • 关键字段释义:
    • %h:客户端 IP
    • %l:远程登录名(通常为 -
    • %u:认证用户名(若未认证为 -
    • %t:请求时间(如 [10/Oct/2025:12:34:56 +0800]
    • "%r":请求行(如 GET /index.html HTTP/1.1
    • %>s:最终状态码(如 200/404/500
    • %b:响应字节数(若为 - 表示 0)
    • "%{Referer}i":来源页
    • "%{User-Agent}i":客户端标识
  • 性能相关字段(需日志格式包含):
    • %D:请求处理时间(微秒)
    • %T:请求处理时间(秒)
  • 如何在配置中确认/自定义格式:
    • 查看或编辑 /etc/httpd/conf/httpd.conf 或虚拟主机配置中的 LogFormatCustomLog 指令。

四 高效分析命令示例

  • 统计访问量 Top N IP:
    • cat /var/log/httpd/access_log | awk ‘{print $1}’ | sort | uniq -c | sort -nr | head -20
  • 统计某页面的访问次数(如 /index.php):
    • grep -F ‘/index.php’ /var/log/httpd/access_log | wc -l
  • 查找 4xx/5xx 错误及对应资源:
    • grep -E ’ 4[0-9]{2} ’ /var/log/httpd/access_log | awk ‘{print $7}’ | sort | uniq -c | sort -nr
    • grep -E ’ 5[0-9]{2} ’ /var/log/httpd/access_log | head -20
  • 识别慢请求(需日志含 %T%D;示例以第 10 列为耗时秒数):
    • awk ‘{print $10, $7}’ /var/log/httpd/access_log | sort -k1,1nr | head -20
  • 按小时统计访问量(按日志时间字段第 4 列,形如 [10/Oct/2025:13:xx:xx):
    • awk ‘{print $4}’ /var/log/httpd/access_log | cut -d: -f2 | sort | uniq -c | sort -nr
  • 按日期快速筛选错误日志(示例:包含 2025-12-07 的行):
    • grep “2025-12-07” /var/log/httpd/error_log
  • 说明:字段位置取决于日志格式;若使用 Combined/自定义格式,请结合 awk-F 指定分隔符或调整列号。

五 可视化工具与日志轮转

  • 可视化与实时监控工具:
    • GoAccess:终端/HTML 报表,支持实时与离线分析,适合快速洞察流量与状态码分布。
    • AwstatsWebalizer:生成周期性 HTML 报告,适合长期趋势统计。
    • ApacheTop:类 top 的实时请求速率与热点资源查看。
    • Graylog:集中式日志平台,便于检索、告警与可视化。
  • 安装示例(以 GoAccess 为例):
    • sudo yum install -y goaccess
    • goaccess /var/log/httpd/access_log -a -o /var/www/html/report.html --log-format=COMBINED
  • 日志轮转(避免磁盘被占满):
    • 配置文件:/etc/logrotate.d/httpd
    • 示例策略(每日轮转、保留 7 天、压缩、轮转后重载 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 }
    • 测试与强制执行:
      • sudo logrotate -d /etc/logrotate.d/httpd # 干跑校验
      • sudo logrotate -f /etc/logrotate.d/httpd # 强制执行一次
  • 提示:生产环境建议开启压缩、合理保留天数,并确保轮转后 httpd 能平滑重载(使用 systemctl reload 而非 restart)。

0