apache监控需分层分析:用%d字段看自身处理耗时,x-response-time头获后端真实耗时,scoreboard与ss命令交叉验证连接状态,虚拟主机独立日志归因,x-request-id实现全链路追踪。

Apache 监控指标不能只看一个数字,得拆开看——网络、协议层、后端、资源调度各环节都有对应的关键指标,组合起来才能定位真问题。
看 Apache 自身处理耗时:%D 字段最准
%D 是 Apache 内置的微秒级耗时字段,代表从收到请求第一个字节到发出响应头的时间,不含响应体传输、不依赖后端。
- 确保
mod_log_config已启用:httpd -M | grep log_config应显示log_config_module (shared) - 在日志格式中加入
%D:LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D" timed CustomLog logs/access_log timed - 日志末尾数字即微秒值,比如
142857≈ 142.9 ms;若大量请求超过 300ms,要查 SSL 握手、重写规则或压缩配置是否拖慢。
看后端真实耗时:靠 Java 透传 X-Response-Time
Apache 不知道 Spring Boot 或 Tomcat 里代码跑了多久,必须由应用自己算好、通过响应头传出来:
- Java 端(如 Filter)用
System.nanoTime()计算毫秒级耗时,设头:response.setHeader("X-Response-Time", String.valueOf(durationMs)); - Apache 日志中捕获它:
LogFormat "%D %{X-Response-Time}o" full_timing - 注意
%{X-Response-Time}o中的o表示 output header;若日志该位置显示-,说明头没发出来——常见于 Nginx 代理默认过滤自定义头,或mod_deflate提前截断响应头。
看连接与 Worker 状态:Scoreboard + ss 命令交叉验证/server-status?auto 页面顶部的 Scoreboard 是实时窗口:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
K:Keep-Alive 空闲连接(已响应完,等下一个请求) -
_:完全空闲 worker -
W:正在发送响应 -
R:正在读请求头 - 若
K长期占满大部分 worker,且IdleWorkers接近 0,说明 KeepAliveTimeout 过长或客户端复用率低 - 用
ss -tn state established | grep ':80\|:443' | wc -l查 ESTABLISHED 连接数,再对比BusyWorkers + IdleWorkers:- 若 ESTABLISHED 远大于两者之和 → 大量连接未被 Apache 接管(反向代理未透传、中间设备截断)
- 若 ESTABLISHED 与 BusyWorkers 接近但响应慢 → 可能是后端响应慢拖住 worker
看虚拟主机级表现:独立日志 + 按 Host 归因
虚拟主机不能共用一套指标,必须隔离观测:
- 每个
<virtualhost></virtualhost>单独配日志路径:CustomLog /var/log/apache2/site-a_access.log combined ErrorLog /var/log/apache2/site-a_error.log
- 用
SetEnvIf Host "^site-a\.example\.com$" vhost=site-a打标,再把%{vhost}e写入日志格式 - 实时分析:
tail -f /var/log/apache2/site-a_access.log | awk '$9 ~ /^5/ {print $7}' | head -20快速筛出 site-a 的 5xx 请求 URL
- 用
apachetop -f /var/log/apache2/site-a_access.log直接看该站点实时请求数、平均响应时间、TOP URL
看全链路瓶颈:用 X-Request-ID 关联各层日志
单靠 Apache 日志无法判断慢在哪儿,必须统一 trace ID:
- 所有组件(HAProxy/Nginx → Apache → Java)都透传并记录
X-Request-ID - HAProxy 开启
%Tr(从发请求到收第一个响应字节),Apache 记%D,Java 记X-Response-Time - 对比三者:
- 若
%Tr − %D > 200ms→ 后端或内网链路慢 - 若
%Tr ≈ %D且都高 → 慢在 Apache 层或客户端到前置代理的公网
- 若
不复杂但容易忽略










