在grafana中清晰展示全链路压测期间nginx性能指标的核心是围绕压测动线构建可比、可归因、时序对齐的视图,重点通过打标压测流量、固定采集节奏、记录元信息,并联动分析连接健康度、吞吐成功率、双视角延迟及资源级指标,结合分层面板组织与压测后快速归因方法实现精准瓶颈定位。

要在 Grafana 中清晰展示全链路压测期间 Nginx 的性能指标变化,核心不是“把所有曲线堆上去”,而是围绕压测动线——从请求进入 Nginx 开始,到转发、处理、响应——构建可比、可归因、有时序对齐的指标视图。重点在于让每条曲线都回答一个具体问题:瓶颈在哪?何时出现?是否与压测节奏同步?
压测前必须对齐的关键准备
没有统一的时间锚点和可控变量,压测监控就失去对比意义:
-
打标压测流量:在 Nginx 配置中为压测请求注入唯一标识,例如通过
map指令识别压测 Header:map $http_x_test_mode $is_stress { "true" 1; default 0; },再将$is_stress写入 access log 或 VTS filter key,确保 Prometheus 指标带is_stress="1"标签 -
固定采集节奏:Prometheus 抓取间隔设为
5s(非默认 15s),避免压测突增被平滑;rate 计算窗口用[30s],兼顾灵敏度与抗抖动 - 记录压测元信息:在 Grafana 注释(Annotations)中手动或通过 API 添加压测事件标记,注明起始时间、并发数、目标路径、预期 RPS,方便后续回溯
压测中重点关注的四类联动指标
每类指标都应支持按 is_stress 标签快速筛选,并与非压测时段并排对比:
-
连接层健康度:Active connections(活跃连接)、
nginx_connections_accepted_total{is_stress="1"}与nginx_connections_handled_total的比率;若 handled/accepted net.core.somaxconn 或 worker_connections -
请求吞吐与成功率:实时 QPS(
rate(nginx_vts_server_request_seconds_count{is_stress="1"}[30s]))、4xx/5xx 错误率(分母含全部请求);观察错误率是否随 RPS 上升而陡增,是判断容量瓶颈的最直接信号 -
双视角延迟分布:P95/P99 的
request_time(客户端总耗时)与upstream_response_time(后端真实耗时)必须同图绘制;若两者差值持续拉大,说明 Nginx 自身(SSL、rewrite、limit_req)成为瓶颈;若两者同步上升,则问题在 upstream -
资源级关联指标:在同一时间轴叠加 Nginx 进程 CPU 使用率、系统
listen overflows(来自 node_exporter)、TIME-WAIT 连接数(ss -s | grep time_wait),可验证内核参数调优效果,例如调大net.ipv4.tcp_max_syn_backlog后 overflow 是否归零
Grafana 面板组织建议
避免平铺式看板,按压测阶段逻辑组织区块:
- 顶部横幅区:单值面板显示当前压测 RPS、P99 延迟、5xx 错误率,字体加大加粗,一眼掌握全局水位
- 中间趋势区:三组并列折线图——上(QPS 曲线 + 压测并发设定线)、中(P99 request_time vs upstream_response_time)、下(5xx% + listen overflows 右轴),X 轴严格对齐,启用“同步缩放”
-
底部下钻区:热力图展示各
location或upstream的 QPS 密度(单位:req/s/m²),点击高热区域可下钻到该维度的延迟直方图与错误码分布
压测后快速归因的方法
压测结束不等于分析结束,关键要锁定根因:
- 用 Grafana 的 “Compare” 功能,选取压测峰值时段与基线时段(如前 5 分钟),自动计算各指标变化率,排序出增幅最大的 Top 3 指标
- 检查 Nginx error.log 中是否集中出现
accept() failed (24: Too many open files)或recv() failed (11: Resource temporarily unavailable),与指标异常时间点交叉验证 - 若发现某 upstream 的 P99 延迟飙升但其他正常,立即导出该 upstream 对应的 access log 片段,用
awk '{print $9}'统计响应时间分布,确认是否为后端服务毛刺











