关键是要将错误率和响应延迟与业务行为、系统状态联动分析:错误率需按HTTP状态码分层归因(5xx查后端异常、4xx看客户端问题、非HTTP错误追网络/证书),响应延迟须分层(TTFB、upstream_response_time、RUM)、分位(P95/P99)、分路径监控,并通过动态告警与交叉验证定位根因。

负载测试中监控错误率和响应延迟,关键不是只看数字,而是把它们和业务行为、系统状态绑在一起看。光知道“错误率2%”或“平均延迟800ms”没用,得清楚什么时候错、谁在错、为什么慢。
错误率要分层统计,不能只算总比例
HTTP状态码只是表层,真正要拆开看:
- 5xx错误重点盯后端服务:比如502/504说明上游超时或不可达,500可能是应用抛异常;配合日志查堆栈,定位是代码崩溃还是数据库连接池耗尽
- 4xx错误关注客户端行为:401/403说明鉴权逻辑被压垮(如JWT解析耗CPU),429说明限流策略没生效或阈值设太低
- 非HTTP错误也不能漏:DNS解析失败、TCP连接拒绝、SSL握手超时——这些在Loader日志里可能只显示“Connection refused”,但根源在网络层或证书配置
响应延迟必须区分层级和分位值
平均响应时间容易掩盖问题,实际要盯三个维度:
-
分层耗时:TTFB(首字节时间)反映LB和Web服务器处理效率;
$upstream_response_time体现后端真实处理时长;前端RUM数据则包含DNS、SSL、资源加载等全链路 - 分位值比平均值重要:TP95 > 1s 比平均300ms更有意义——说明5%的用户正在忍受卡顿;TP99突增往往预示GC风暴或锁竞争
-
按业务路径切分:登录接口延迟飙升,但查询接口正常?说明问题在认证模块而非数据库;用Prometheus按
path或backend打标,Grafana热力图一眼可见异常节点
持续负载下要配动态告警和交叉验证
跑一小时压力不是只等结束再看报告,过程中就得干预:
- 错误率告警不能只设“>5%就告警”:改成“连续3分钟5xx占比>3%且同比上升200%”,避免毛刺误报
- 延迟告警要带上下文:比如TP95超过800ms的同时,
nginx stub_status里Active connections翻倍,大概率是连接队列积压,而不是后端慢 - 必须交叉验证:外部拨测显示延迟高,但Nginx日志里
$request_time正常?那问题可能在CDN缓存失效或客户端网络;反过来,日志延迟高但拨测正常?检查是否被本地缓存干扰
数据采集要避开常见陷阱
很多团队监控不准,其实是采集方式错了:
- Loader和Probe别混用:用JMeter发压时,别让它同时记延迟——它的线程调度会影响精度;单独部署轻量Probe(比如用curl + time轮询关键接口),专盯真实延迟
- 日志字段要全:Nginx access_log至少开启
$status $request_time $upstream_response_time $upstream_addr,否则无法区分是LB转发慢还是后端慢 - 采样频率要匹配业务节奏:健康检查间隔3秒,Prometheus抓取周期却设15秒?瞬时错误高峰直接漏掉

















