Apache的mod_log_config无法记录全链路TCP耗时,%D和%T仅统计HTTP处理阶段(微秒/秒),不含TCP建连、TLS握手、客户端接收等网络层耗时;可用%I/%O(需mod_logio)和SSL字段辅助分析,但精确TCP指标须依赖tcpdump、ss或APM工具。

Apache 的 mod_log_config 无法直接记录全链路 TCP 耗时,因为它只在 HTTP 请求进入处理流程后才介入日志记录,而 TCP 连接建立(三次握手)、TLS 握手、连接复用、连接关闭(四次挥手)等底层网络阶段,均发生在 mod_log_config 可见范围之外。
真正能反映“端到端网络耗时”的字段只有 %D 和 %T,但它们的含义是:
-
%D:从 Apache 接收到完整 HTTP 请求首行开始,到发送完全部响应数据为止的微秒级耗时(即 request processing time),不包含 TCP 建连、SSL 握手、客户端读取响应体的时间; -
%T:同%D,但单位为秒,精度更低。
所以 %D ≠ 全链路 TCP 耗时,它只是 Apache 内部处理阶段的耗时。
✅ 能间接辅助分析 TCP 层行为的可用字段
1. %I 和 %O(需启用 mod_logio)
-
%I:Apache 实际从 socket 接收的原始请求字节数(含 header + body,不含 TCP/IP 包头); -
%O:Apache 实际调用 send() 发出的响应字节数(含压缩、分块编码、额外代理头等); - 它们本身不是时间,但配合
%D可判断网络效率:- 若
%O很大而%D很小 → 后端快、网络发得快,TCP 层无明显瓶颈; - 若
%O小但%D异常高 → 可能后端流式响应未结束、或客户端接收慢导致连接挂起(Apache 等待 write 完成); - 若
%I为 0 或极小,但%D非零 → 请求可能被中断(如客户端提前断连),Apache 仍在处理或清理。
- 若
⚠️ 注意:
%I/%O仅对完成的请求有效;连接异常中断时值不可靠。
Apache Superset Dashboard and SQL Exploration Skill下载Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
2. SSL/TLS 协商信息(仅限成功握手后)
通过 %{SSL_PROTOCOL}x、%{SSL_CIPHER}x、%{SSL_SECURE_RENEG}x 等可确认是否使用了 TLSv1.3(握手更快)、是否启用了 0-RTT、是否发生重协商——这些会影响首次请求的 TCP+TLS 总延迟,但无法记录具体毫秒数。
❌ 不能做的:别指望 mod_log_config 记录这些
- TCP 连接建立耗时(SYN→SYN-ACK→ACK)
- TLS ClientHello 到 ServerHello 时间
- 客户端从发出请求到收到首个字节(TTFB)的完整链路
- 连接复用是否生效、复用连接的空闲时长
- 四次挥手耗时或 TIME_WAIT 持续时间
这些必须借助外部工具:
-
tcpdump+Wireshark分析三次握手与 TLS 握手时间戳 -
ss -i查看单个连接的retransmits、rto、rtt等内核级指标 - 应用层埋点(如前端
navigation.timing、后端StopWatch+ MDC 日志)补全 TTFB - 专用 APM 工具(SkyWalking、Pinpoint)串联 DNS→TCP→TLS→HTTP→后端调用全路径
✅ 实用建议:如何逼近“全链路感知”
- 在 LogFormat 中同时记录
%D %I %O %{SSL_PROTOCOL}x %{SSL_CIPHER}x,例如:LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D %I %O %{SSL_PROTOCOL}x %{SSL_CIPHER}x" fullchain CustomLog logs/access_full.log fullchain - 结合日志与
ss -tan state established | awk '{print $5}' | cut -d: -f2 | sort | uniq -c | sort -nr统计活跃连接的目标端口分布,辅助判断是否大量连接卡在后端; - 对高延迟请求(
%D > 5000000,即 >5 秒),提取其%I和%O,再查对应后端服务日志,确认是网络阻塞、后端卡顿,还是客户端侧慢(如移动弱网持续拉取响应体)。
本质上,Apache 是一个 HTTP 服务器,不是网络协议分析器。想掌握全链路 TCP 耗时,得在更底层或更上层补位,而不是强求 mod_log_config 完成它做不到的事。


















