nginx-module-vts 是最成熟开箱即用的域名级监控方案,原生支持按 server_name 独立采集流量与性能数据;stub_status 仅提供 worker 级全局指标,无法区分多域名。

直接用 nginx-module-vts 模块,它是目前最成熟、开箱即用的方案,原生支持按 server_name(即域名)维度独立采集、统计和展示流量与性能数据。
为什么 stub_status 不行?
内置的 stub_status 只提供 worker 进程级全局指标:活跃连接数、总请求数、读写等待状态等。它不感知 server 块,多个域名共用一个 worker 时,所有数据混在一起,无法区分 api.example.com 和 admin.example.com 的各自表现。
用 vts 实现域名级独立监控的关键配置
只需两步核心配置,无需改后端、不依赖日志解析:
- 在
http块顶部启用模块并声明共享内存区:vhost_traffic_status on;<br>vhost_traffic_status_zone;
- 每个
server块必须有明确且唯一的server_name,例如:server { listen 80; server_name shop.tenant-a.com; ... }server { listen 80; server_name api.tenant-b.com; ... } - 模块会自动将每个
server_name识别为一个独立的 “Server Zone”,无需额外映射或标签。
你能实时看到哪些域名维度指标?
访问 /status(如 http://your-ip/status)后,在 HTML 页面点击 Server Zones 标签页,即可看到每行一个域名,包含:
- 实时请求数(Req)、2xx/3xx/4xx/5xx 响应分布
- 入向(In)和出向(Out)字节数(带宽)
- 平均响应时间(RT),单位毫秒
- 当前活跃连接数(Active)
- 点击单个域名可下钻查看其 URI 热点、状态码趋势、响应时间分布图
进阶用法增强多租户可观测性
生产环境中建议搭配以下配置提升实用性:
- 为每个租户加独立限流区域,例如:
limit_req_zone $binary_remote_addr zone=tenant_a:10m rate=100r/m;
并在对应server块中调用,避免租户间资源争抢 - 在 access_log 中显式记录
$server_name和$request_time,便于离线聚合 QPS、延迟、错误率 - 配合
vhost_traffic_status_filter_by_set_key按 URL 参数(如?client_id=xxx)进一步细分同一域名下的子租户流量 - 通过 JSON 接口(
/status/format/json)对接 Prometheus 或 Grafana,构建多租户仪表盘
不复杂但容易忽略:vts 的数据全在内存中实时聚合,无外部依赖,重启即清零——适合看实时态,长期趋势需配合日志或指标系统落盘。



















