Apache不直接区分动态与静态资源统计,但可通过日志解析、请求特征识别及工具链组合实现精准分析。1. 配置自定义LogFormat并启用扩展字段;2. 用awk命令快速识别高频动态路径、查询参数及异常接口;3. 用GoAccess实时可视化动态请求分布;4. 结合Prometheus+Grafana做长期趋势监控与告警。

Apache 本身不直接区分“动态资源”与静态资源进行统计,但可通过日志解析 + 请求特征识别 + 工具链组合,精准定位 PHP、JSP、.cgi、.py 等后缀或带查询参数的请求热点。关键不是 Apache 内置功能,而是利用其可定制日志 + 外部分析工具实现。
1. 确保 access_log 记录足够识别动态请求
默认 LogFormat(如 combined)已包含路径(%U)、查询串(%q)、状态码(%>s)和响应大小(%B),但需确认是否启用扩展字段:
- 在
/etc/apache2/apache2.conf或虚拟主机配置中,检查或添加自定义格式,例如:
LogFormat "%h %l %u %t "%r" %>s %O "%{Referer}i" "%{User-Agent}i" %D %q" dynamiclog
- 对动态站点启用该格式:
CustomLog /var/log/apache2/dynamic-access.log dynamiclog - 特别注意:若前端有反向代理(如 Nginx),需确保
%h被替换为真实客户端 IP(通过%{X-Forwarded-For}i)并启用RemoteIPInternalProxy,否则 IP 统计失真。
2. 用命令行快速识别高频动态路径
针对实时或短周期分析,无需部署完整平台,几条命令即可定位热点:
- 统计最常访问的 .php/.jsp/.cgi 路径(排除静态资源):
awk '$7 ~ /.(php|jsp|cgi|py|asp)(?|$)/ {print $7}' /var/log/apache2/access.log | sort | uniq -c | sort -nr | head -10
- 按查询参数维度聚合(如 API 接口带
?action=):
awk -F'\?' '$2 ~ /action=/ {print $2}' /var/log/apache2/access.log | cut -d' ' -f1 | sort | uniq -c | sort -nr | head -10
- 结合状态码筛选异常高访问的失败接口(如 500/404 动态页):
awk '$9 ~ /^(500|404)$/ && $7 ~ /.(php|jsp)/ {print $7}' /var/log/apache2/access.log | sort | uniq -c | sort -nr | head -5
3. 使用 GoAccess 实时可视化动态请求分布
GoAccess 支持自定义日志格式和过滤,适合快速搭建轻量级热点看板:
- 安装后运行(假设日志含动态标识):
goaccess /var/log/apache2/access.log --log-format='%h %^ %^ %t "%r" %s %b "%R" "%u" %T %q' --date-format='%d/%b/%Y' --time-format='%H:%M:%S' --real-time-html -o /var/www/html/goaccess-dynamic.html
- 打开
goaccess-dynamic.html,切换到 “Requests” 或 “URIs” 标签页,点击列头可排序;勾选 “Filter by URI” 输入.php即可聚焦动态资源。 - 它会自动统计 PV、UV、平均响应时间(
%T字段)、带宽消耗,且支持每秒刷新。
4. 结合 Prometheus + Grafana 做长期趋势与告警
若已有 Prometheus 生态,可通过 apache_exporter + 日志指标双路采集:
-
服务级动态负载:
apache_httpd_requests_total{handler=~"cgi-script|proxy-server|fastcgi"}(需 Apache 启用对应 handler 并暴露指标) -
日志级路径热度:用
promtail或filebeat采集 access_log,通过 LogQL 或 PromQL 提取动态路径并计数,例如:
count_over_time({job="apache-logs"} |~ "\.php(\?|$)" [1h])
- 在 Grafana 中创建面板,按路径分组 TOP N,并叠加响应时间(
%D字段提取为直方图)和错误率(状态码 4xx/5xx 比例),形成“动态接口健康度热力图”。


















