ngx_http_vts_module是轻量高效Nginx原生流量统计模块,通过HTTP暴露JSON/HTML监控接口,需配置vhost_traffic_status_zone及/status路径,并规范upstream命名与proxy_pass引用以准确分组后端流量。

ngx_http_vts_module 是一个轻量、高效、原生支持 Nginx 的虚拟主机流量统计模块,它不依赖外部存储或代理层,直接通过 HTTP 接口暴露 JSON 数据,非常适合快速搭建反向代理后端的实时流量监控看板。
启用 vts 模块并暴露监控接口
确保你使用的 Nginx 已编译包含 ngx_http_vts_module(官方源码需手动添加,OpenResty 2.0+ 默认内置)。在 nginx.conf 的 http 块中启用模块并配置状态页:
- 添加
vhost_traffic_status_zone;启用统计区域(必须放在 http 块顶层) - 添加一个 location,例如
location /status,使用vhost_traffic_status_display;和vhost_traffic_status_display_format html;提供可视化 HTML 页面 - 若需对接前端看板,推荐同时启用 JSON 格式接口:
location /status/format/json { vhost_traffic_status_display; vhost_traffic_status_display_format json; }
识别并分组后端服务流量
vts 默认按 server_name 和 upstream 名称聚合数据。要清晰区分不同后端服务,关键在于规范 upstream 定义和 server 配置:
- 每个 upstream 块应有明确名称,如
upstream api_backend { ... },vts 会自动创建upstream.api_backend统计节点 - 反向代理的
location中务必使用proxy_pass http://api_backend;(带名称),而非 IP 直连,否则流量不会计入 upstream 分组 - 若使用多级 proxy(如先到网关再到具体服务),可在网关层通过
proxy_set_header X-Upstream-Name "user-svc",再配合 Nginx map 指令映射到自定义变量,用于更细粒度标记(需配合 log_format + vts_filter 使用)
构建轻量前端看板(无需后端服务)
利用 vts 的 JSON 接口可直接用纯 HTML + JS 实现动态看板,零部署成本:
- 用 fetch 轮询
/status/format/json,解析upstreamZones字段获取各后端的requestCounter、inBytes、outBytes、responseTime等指标 - 对每个 upstream,计算 QPS(每秒请求数):用两次采样差值 ÷ 时间间隔;响应时间建议取
responseTime.mean或responseTime.max - 使用 Chart.js 或 ApexCharts 渲染折线图(QPS趋势)、环形图(流量占比)、色块卡片(异常延迟标红)
- 可添加简单筛选:点击卡片聚焦某 upstream,或按状态码(
responseCodes["2xx"])过滤健康度
告警与长期趋势的低成本延伸
vts 本身不提供告警,但可结合极简方案补足:
- 用 crontab + curl + awk 定时检查
upstreamZones.xxx.fails是否持续 > 0,触发邮件或钉钉通知 - 将 JSON 数据通过 log_format 写入 access 日志(用
$vts_upstream_response_time等变量),再用 Loki + Grafana 实现长期存储与多维分析 - 注意:vts 的内存统计是运行时累计值,重启即清零;如需天级汇总,建议加一层定时快照脚本,存入本地文件或 SQLite
不复杂但容易忽略——真正让看板“有用”的,不是图表多炫,而是 upstream 命名是否一致、proxy_pass 是否指向命名 upstream、JSON 接口是否被防火墙拦截。跑通这三步,你就已经拥有了一个稳定、低开销、可嵌入运维门户的后端流量视图。

















