goaccess 是最直接的选择——不依赖数据库或 web 服务,一条命令即可生成带交互图表的 html 报表或终端实时 qps 时间序列,自动聚合请求量并过滤错误码,支持结合 %d 和 %s 分析吞吐质量。

用 Apache 日志做图形化吞吐量展示,核心是把原始 access.log 转成结构化指标,再接入轻量可视化工具。GoAccess 是最直接的选择——不依赖数据库或 Web 服务,一条命令就能生成带交互图表的 HTML 报表,也能在终端实时刷新查看 QPS 趋势。
用 GoAccess 生成吞吐量热力图与时间线
GoAccess 默认解析 Combined 日志格式,自动提取时间戳、状态码、响应大小等字段,天然支持按秒/分钟聚合请求量:
- 运行命令生成 HTML 报表:
goaccess /var/log/apache2/access.log --log-format=COMBINED --date-format='%d/%b/%Y' --time-format='%H:%M:%S' -o report.html
生成的 report.html 中,“Requests per minute” 和 “Requests per second” 面板会以折线+柱状组合图显示吞吐量随时间变化,鼠标悬停可看精确数值。 - 终端模式下按数字键 1 进入总览页,顶部“Hits per minute”就是滚动更新的吞吐量时间序列,每 200ms 刷新一次,适合盯屏观察突发流量。
- 它自动过滤掉 4xx/5xx 错误请求(除非你显式开启 --with-codes),所以图表中展示的是有效业务吞吐量,不是裸连接数。
配合日志字段增强吞吐质量分析
仅看请求数不够,需结合响应时间和状态码判断吞吐是否健康。Apache 日志中的 %D(微秒级响应时间)和 %s(状态码)是关键:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 确保 LogFormat 包含
%D,例如:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D" combined_with_time - GoAccess 支持自定义日志格式解析,加上
--log-format='%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D'参数后,报表中会多出“Average Time Taken”和“Time Distribution”图表,可交叉验证:QPS 上升时平均响应时间是否同步跳变。 - 点击“HTTP Status Codes”面板,能快速定位高吞吐下的异常比例——比如 QPS 达 80 时 502 占比突然升至 15%,说明上游已过载。
进阶:对接 Prometheus + Grafana 做长期趋势监控
如果需要保留历史数据、设置告警或叠加其他系统指标(如 CPU、内存),可走标准可观测链路:
- 用 logstash 或 vector 采集 access.log,用 grok 解析出
timestamp、status、response_time_us,按分钟聚合为apache_requests_total和apache_request_duration_seconds等指标,推送给 Prometheus。 - Grafana 中用 Prometheus 数据源创建面板,X 轴设为时间,Y 轴用
rate(apache_requests_total[1m])计算真实 QPS,叠加histogram_quantile(0.95, rate(apache_request_duration_seconds_bucket[1m]))查看 P95 延迟曲线。 - 这样就能看到吞吐量与延迟、错误率的三维关系——比如某次发布后 QPS 不变但 P95 延迟翻倍,问题就出在应用层而非 Apache 配置。
不需要堆砌复杂组件,从 GoAccess 终端实时视图起步,再按需延伸到 Grafana,就能把 Apache 日志里的吞吐信息真正“看得见、读得懂、用得上”。










