nginx-vts-exporter是采集nginx细粒度指标的更优方案,依赖vts模块暴露200+项指标;需先启用vts模块、配置/status接口,再部署exporter抓取并转换为prometheus格式,或直接用vts内置prometheus格式。

要用 Prometheus 采集 Nginx 更细粒度的运行数据,nginx-vts-exporter 是比基础 nginx_exporter 更优的选择——它依赖 Nginx 的 vts 模块,能暴露 server、upstream、cache 等 200+ 项指标,比如各虚拟主机的请求数、响应时间分布、上游节点健康状态、缓存命中率等。
前提:Nginx 必须启用 vts 模块
nginx-vts-exporter 本身不采集原始数据,它只是把 vts 模块生成的状态页“翻译”成 Prometheus 格式。所以第一步不是装 exporter,而是确认你的 Nginx 已编译并启用了 nginx-module-vts:
- 执行
/usr/local/nginx/sbin/nginx -V 2>&1 | grep vts,输出中应含--add-module=.../nginx-module-vts - 在
nginx.conf的http块中添加vhost_traffic_status_zone; - 配置一个公开状态接口,例如:
location /status { vhost_traffic_status_display; vhost_traffic_status_display_format json; allow 127.0.0.1; deny all; } - 重载 Nginx:
nginx -s reload,再访问http://localhost/status确认返回 JSON 数据
部署 nginx-vts-exporter 服务
它是一个独立二进制程序,负责定时抓取上面的 /status 接口,并在本地 :9913/metrics 暴露标准 Prometheus 指标:
- 下载预编译版或源码构建(推荐用 GitHub Release 页面获取对应系统的二进制)
- 启动时指定 Nginx 状态地址,例如:
./nginx-vts-exporter -nginx.scrape-uri=http://127.0.0.1/status - 验证是否生效:
curl http://localhost:9913/metrics | head -20,应看到类似nginx_vts_server_request_counter_total{server="default"} 12345的指标行 - 建议用 systemd 托管,避免进程意外退出
让 Prometheus 抓取指标
在 Prometheus 配置文件 prometheus.yml 中添加 job:
- 新增 static_configs 或基于服务发现的目标,指向 exporter 的
9913端口,例如:scrape_configs:<br> - job_name: 'nginx-vts'<br> static_configs:<br> - targets: ['127.0.0.1:9913']
- 保存后执行
prometheus --config.file=prometheus.yml --reload(或发送 SIGHUP) - 打开 Prometheus Web UI → “Status” → “Targets”,确认该 job 显示为 UP
可选:直接用 vts 内置 Prometheus 格式(免 exporter)
如果你使用的是较新版本的 vts 模块(v0.2.0+),它原生支持 Prometheus 输出格式,无需额外部署 nginx-vts-exporter:
- 只需将状态接口 location 改为:
location /vts/format/prometheus {<br> vhost_traffic_status_display;<br> vhost_traffic_status_display_format prometheus;<br>} - 然后让 Prometheus 直接抓取
http://nginx-host/vts/format/prometheus即可 - 这种方式更轻量,但灵活性略低(无法做中间过滤或重标)











