nginx多维度流量监控集群架构核心是基于ngx_http_vts_module统一采集server/upstream/location三级指标,通过nginx-vts-exporter转为prometheus指标并聚合,再由grafana下钻可视化与告警。

用 Nginx 构建多维度流量监控的集群架构,关键不在堆机器,而在于指标采集粒度、数据聚合方式和跨节点一致性。核心是把 ngx_http_vts_module 作为统一的数据源底座,替代分散的 stub_status,再通过标准化导出与集中存储实现集群级可观测。
用 vts 模块统一采集多维原始指标
vts 模块天然支持 server/upstream/location 三个层级的实时统计,且基于共享内存,无额外性能损耗。在每台 Nginx 节点的 http 块中启用:
-
vhost_traffic_status on;—— 开启全局统计 - 确保每个
server块有明确、唯一的server_name(如api.example.com、admin.example.com) - 为关键 upstream 定义清晰名称(如
upstream user-service { ... }),vts 会自动按名称聚合 - 可选:用
vhost_traffic_status_filter_by_set_key $arg_uid;实现按用户 ID 动态分组,支撑灰度或租户维度分析
暴露安全、结构化的监控端点
不要复用业务端口或开放全网访问。推荐独立监听内网地址:
- 新增一个仅监听
127.0.0.1:8080的server块 -
/status/format/json提供机器可读接口,供采集器拉取 -
/status保留 HTML 页面,供人工快速巡检 - 用
allow 192.168.10.0/24;限制仅监控服务器网段可访问 - 生产环境建议加
auth_basic或前置 API 网关鉴权
对接 Prometheus 实现集群指标聚合
单靠 vts 暴露 JSON 不足以支撑集群分析,必须引入 nginx-vts-exporter 作为转换层:
- 每台 Nginx 节点部署一个 exporter(DaemonSet 或二进制常驻),拉取本地
http://127.0.0.1:8080/status/format/json - exporter 将原始 JSON 转为标准 Prometheus metrics,自动注入
instance、job等标签 - Prometheus 配置服务发现(如 static_configs + relabel_configs),按角色打标:
role="edge"、role="internal" - 关键查询示例:
sum(rate(vts_server_requests_total{server=~"api.*"}[5m])) by (server)查各域名 QPS
用 Grafana 构建可下钻的可视化体系
避免“一张大盘看全部”,要支持从集群 → 节点 → server → upstream → location 逐层下钻:
- 使用官方模板 ID 10229(Nginx VTS Dashboard),已预置 server/upstream 切换面板
- 添加变量
$server和$upstream,让图表支持动态过滤 - 重点看三个视图:错误率热力图(按 server + status code)、Top N location 响应延迟、upstream 各节点成功率对比
- 对关键 server 设置告警规则,例如:
vts_server_5xx_rate{server="pay.example.com"} > 0.01(5xx 超 1% 持续 2 分钟)











