关键在于指标源匹配、维度一致、双轴同步与参考线印证:QPS用rate(nginx_http_requests_total[30s]),连接数取nginx_connections_active;二者按vhost/upstream等标签同维分组;Grafana中设10s刷新、左轴QPS右轴连接数,并叠加容量基线与理论上限告警线。

要配置 Nginx 在 Grafana 中的 QPS 与并发连接数趋势折线图,关键不是只画两条线,而是让它们时间对齐、维度一致、刷新同步,并能相互印证瓶颈。下面分四步讲清楚实操要点。
用对指标源:QPS 必须用 rate(),连接数直接取瞬时值
QPS 是速率型指标,不能用计数器原始值相减——必须用 Prometheus 的 rate() 函数;而活跃连接数(如 nginx_connections_active 或 nginx_vts_server_connections_total{state="active"})是瞬时状态量,可直接绘制。
- QPS 推荐写法:
rate(nginx_http_requests_total[30s])(若用 nginx-prometheus-exporter)或rate(nginx_vts_server_requests_total[30s])(若用 VTS 模块) - 并发连接数推荐写法:
nginx_connections_active(stub_status)或nginx_vts_server_connections_total{state="active"}(VTS) - 窗口选 30 秒:比 5 秒平滑、比 1 分钟灵敏,适配秒级波动又不过度抖动
统一标签与分组:让 QPS 和连接数能按同维度对比
如果 QPS 按 vhost 分组,连接数也得按 vhost 查;如果想看某 upstream 的压力,两者都需加 upstream="xxx" 标签。否则图表无法对齐,分析就失真。
- 在 Prometheus 抓取配置中保留关键标签:如
vhost、upstream、status、env - Grafana 面板中启用变量(如
$vhost),两个指标共用同一筛选器 - 避免过早
sum by():先保留维度,下钻时再聚合
双 Y 轴折线图:QPS 左轴 + 连接数右轴,时间刻度严格同步
在 Grafana 新建一个 Time series 面板,添加两个查询:
- Query A(QPS):设置为左 Y 轴,单位选 req/sec,图例写 “QPS”
- Query B(Active Connections):设置为右 Y 轴,单位选 connections,图例写 “Active Conn”
- 两个查询的 Min time interval 和 Refresh interval 必须一致(建议设为 10s)
- 开启 “Stacking” 关闭,“Null value” 设为 “null as zero” 或 “connected” 避免断线
叠加关键参考线:识别异常模式
光有曲线不够,要加几条线才能快速判断问题:
- QPS 曲线上叠加一条水平线:标出该服务的容量基线(如峰值 800 QPS),超出即告警
- 连接数曲线上叠加一条虚线:标出
worker_connections × worker_processes理论上限的 90%,持续逼近说明连接资源吃紧 - 当 QPS 上升但连接数不增 → 可能复用率高或请求变轻;QPS 平稳但连接数陡升 → 大量 Waiting 连接堆积,检查 keepalive_timeout 或后端响应慢


















