apache不直接生成状态码图表,需结合日志分析与第三方工具实现:1.确保日志含%s字段;2.用prometheus、elk或脚本解析日志;3.在grafana中配置面板与告警;4.结合java应用日志协同排查后端问题。

Apache 本身不直接生成状态码分布图表,但可以通过日志分析 + 第三方工具(如 Grafana + Prometheus、ELK、AWStats 或自定义脚本)实现基于 HTTP 状态码的可视化监控。
1. 确保 Apache 正确记录状态码
默认情况下,Apache 的 common 日志格式已包含状态码(%>s),但建议使用 combined 或自定义格式确保字段完整:
- 检查
httpd.conf或apache2.conf中的LogFormat,确认含%>s(响应状态码)和%D(响应耗时,可选) - 示例推荐格式:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D" combined - 确保虚拟主机或主配置中
CustomLog引用了该格式,例如:CustomLog /var/log/apache2/access.log combined
2. 采集与解析访问日志
状态码统计依赖对 access.log 的实时/准实时解析:
-
Prometheus + apache_exporter:适用于已有 Prometheus 生态。需启用 Apache 的
mod_status(ExtendedStatus On),并配置apache_exporter抓取/server-status?auto页面——它会自动提取2xx、3xx、4xx、5xx汇总指标(非单条请求) -
Filebeat + Logstash/Elasticsearch + Kibana(ELK):适合细粒度分析。用 Grok 过滤器解析日志行,提取
response_code字段,再在 Kibana 中按状态码做饼图/时间趋势图 -
轻量方案(Shell + cron):每分钟执行
awk '{print $9}' /var/log/apache2/access.log | sort | uniq -c | sort -nr,输出到临时文件供前端轮询(仅适合低流量或调试)
3. 构建状态码分布图表
以 Grafana + Prometheus 为例,关键步骤如下:
- 在 Grafana 中新建 Dashboard,添加 Bar Gauge 或 Pie Chart 面板
- 查询语句示例(使用
apache_exporter提供的指标):sum by (code) (rate(apache_httpd_request_duration_seconds_count{job="apache"}[5m]))
→ 统计最近 5 分钟各状态码请求数占比 - 设置阈值告警:如
rate(apache_httpd_request_duration_seconds_count{code=~"5.."}[5m]) > 0.01表示 5xx 错误率超 1% - 补充维度:叠加
vhost或path标签,定位具体服务或接口的问题来源
4. Java 应用侧协同排查建议
Apache 常作为反向代理(如通过 mod_proxy 转发至 Tomcat),此时状态码可能来自后端 Java 服务:
- 若大量出现
502 Bad Gateway或504 Gateway Timeout,优先检查 Tomcat 是否存活、连接池是否耗尽、JVM 是否 Full GC 频繁 - 若
4xx集中在特定路径(如/api/v1/user),结合 Java 应用日志中的RequestURI和status字段交叉验证 - 在 Spring Boot 中可通过
@ControllerAdvice统一记录异常响应,并输出结构化日志(含 traceId),便于与 Apache 日志关联分析
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










