响应时间与流量需联合分析,关键在于明确指标来源(如$request_time与$upstream_response_time)、按业务路径分层统计、用日志字段交叉关联、采用分位数替代平均值进行趋势对比。

响应时间与流量不是孤立指标,它们共同反映服务在不同负载下的实际表现。分析二者关系,关键在于区分“谁的响应时间”“哪部分流量”,并建立可比、可归因的观测维度。
明确响应时间的来源与含义
Nginx 日志中至少有两个核心时间变量,用途不同:
- $request_time:从接收请求首字节到发出响应末字节的总耗时(秒),含网络传输、Nginx 处理、上游等待、发送延迟等全部环节
- $upstream_response_time:仅 upstream(后端)返回响应体所用时间,不包括 Nginx 自身开销和客户端网络收发
若 $request_time 明显大于 $upstream_response_time,说明瓶颈可能在 Nginx 层(如大文件发送慢、SSL 加密开销高)或客户端网络;若两者接近,则压力主要来自后端。
按流量类型分层统计,避免混杂干扰
全站平均值意义有限。应按业务路径或资源类型切分,例如:
- 静态资源(/static/, .js/.css/.png):关注 $request_time 是否随文件大小线性增长,判断是否受带宽或 TCP 拥塞影响
- API 接口(/api/v1/):过滤 $body_bytes_sent > 1024 的请求,排除小响应的固定开销干扰,再计算 $upstream_response_time 中位数与 P95
- 下载路径(/download/):用 $body_bytes_sent / $request_time 计算下行吞吐率(字节/秒),识别慢速客户端或中间链路抖动
用日志字段组合构建关联视图
单靠时间或流量数字难发现问题,需交叉分析。推荐在 log_format 中固定包含:
- $status:区分成功与失败请求对响应时间的影响
- $body_bytes_sent:结合 $request_time 可估算有效吞吐,辅助判断是计算慢还是传输出慢
- $http_referer 或 $http_user_agent:识别某类来源(如爬虫、旧版 App)是否拉低整体响应表现
- $upstream_addr:确认是否某台后端实例响应异常拖累均值
例如,发现某段时间 $request_time 突增,但 $upstream_response_time 稳定,且 $body_bytes_sent 偏大、$status 多为 200,大概率是下行网络或客户端侧问题,而非后端故障。
借助分位数与趋势对比代替平均值
平均响应时间易被长尾请求扭曲。建议用日志解析工具(如 awk + sort + head)提取 P50/P90/P99,并按分钟或小时聚合:
- 画出 QPS(每秒请求数)与 P95 $request_time 的双轴折线图:若 QPS 上升但 P95 平稳,说明系统弹性好;若 P95 随 QPS 快速攀升,说明存在性能拐点
- 对比同一路径在不同日期的 P90:排除业务变化干扰,专注基础设施或配置变更影响
- 对高频小请求(如健康检查)单独统计,避免其数量优势掩盖真实业务请求的延迟恶化
不复杂但容易忽略











