ngx_http_vts_module需配合nginx-vts-exporter将vts json接口转为prometheus指标:先编译启用模块并暴露/status/json,再部署exporter转换,最后由prometheus抓取9913端口/metrics,结合grafana id 10229实现可视化。

ngx_http_vts_module 本身不直接输出 Prometheus 格式,但可通过配套的 vts_exporter(如 nginx-vts-exporter)将 VTS 的 JSON 接口转换为标准 Prometheus metrics。关键在于 Nginx 正确暴露 VTS 数据,Exporter 稳定采集,Prometheus 成功抓取。
1. 编译并启用 ngx_http_vts_module
该模块非 Nginx 官方内置,需手动编译集成:
- 下载对应 Nginx 版本源码及 nginx-module-vts 源码
- 编译时添加:
--add-module=/path/to/nginx-module-vts - 在
nginx.conf的http块中启用模块:vhost_traffic_status_zone;
- 配置一个 location 暴露 VTS JSON 接口(通常用于调试和 exporter 抓取):
location /status { vhost_traffic_status_display; vhost_traffic_status_display_format json; }
2. 部署 nginx-vts-exporter 作为指标转换桥接
官方推荐的 exporter 是 hnlq715/nginx-vts-exporter(Go 编写,轻量可靠):
- 下载对应平台的二进制文件,或用 Docker 启动:
docker run -d --name vts-exporter \ -p 9913:9913 \ -e NGINX_STATUS_URL=http://nginx-host:80/status/format/json \ hnlq715/nginx-vts-exporter - 确保 exporter 能访问到 Nginx 的
/status接口(网络连通、无认证、CORS 无关) - 启动后访问
http://localhost:9913/metrics,应看到类似nginx_vts_server_requests_total{server="default",code="200"}的 Prometheus 格式指标
3. 配置 Prometheus 抓取 exporter 指标
在 prometheus.yml 中添加 job:
scrape_configs:
- job_name: 'nginx-vts'
static_configs:
- targets: ['vts-exporter-host:9913'] # 替换为 exporter 实际地址
重启 Prometheus,进入 Web UI 的 Status → Targets 页面确认该 job 状态为 UP;在 Graph 中可输入如 nginx_vts_server_requests_total 查看时间序列数据。
4. 常用监控指标与 Grafana 可视化建议
exporter 默认导出以下核心维度指标(均带 label 如 server, code, cache):
-
nginx_vts_server_requests_total:按 server 和状态码统计请求数 -
nginx_vts_server_request_seconds_total:按 server 统计请求耗时(需 Nginx 开启log_format+$request_time并被 VTS 解析) -
nginx_vts_server_bytes_total:出入流量字节数(in/out) -
nginx_vts_filter_requests_total:按 upstream 分组的请求(需配置vhost_traffic_status_filter_by_set_key)
推荐导入社区 Grafana Dashboard ID 10229(Nginx VTS Dashboard),它已适配 exporter 输出格式,开箱即用。
整个链路清晰稳定:Nginx(VTS JSON)→ Exporter(转 Prom)→ Prometheus(存与查)→ Grafana(可视化)。无需改 Nginx 日志或埋点,适合网关层轻量实时监控。










