Nginx 通过 VTS 模块暴露后端健康指标,结合 Prometheus 抓取与 Grafana 可视化,可构建实时、多维、可交互的健康度监控体系;需配置 upstream-check 探测、JSON 或 Lua 上报指标,并在 Grafana 中实现热力图、失败率趋势与延迟对比等核心视图。

Nginx 本身不带图形化健康面板,但通过 VTS 模块 + Prometheus + Grafana 组合,能实现实时、可交互、多维度的后端集群健康度可视化。
用 VTS 模块暴露结构化健康状态
VTS(Virtual Host Traffic Status)是轻量级、成熟稳定的开源模块,能直接输出每个 upstream server 的实时运行指标:
- ✅/❌ 健康标记(基于
nginx_upstream_check_module探测结果) -
active连接数、fails失败次数、down状态时间戳 - 最近一次响应码(如
200、503)、平均响应时间、请求计数
配置示例(需提前编译 VTS 和 upstream-check 模块):
http {
vhost_traffic_status_zone;
upstream app_backend {
server 10.0.1.10:8080;
server 10.0.1.11:8080;
check interval=5 rise=2 fall=3 timeout=2 type=http;
check_http_send "GET /actuator/health HTTP/1.1\r\nHost: localhost\r\n\r\n";
check_http_expect_alive http_2xx;
}
server {
listen 8080;
location /status {
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
allow 127.0.0.1;
allow 10.10.0.0/16;
deny all;
}
}
}访问 /status 即得 HTML 表格页,含所有 backend 实时健康标识和数字指标。
用 Prometheus 抓取并归一化指标
VTS 支持 JSON 输出(/status/format/json),但原生格式不完全适配 Prometheus。推荐两种方式:
- 启用
vhost_traffic_status_display_format json,再用 Prometheus 的json_exporter中转解析 - 更推荐:在 Nginx 中嵌入
log_by_lua_block,将$upstream_addr、$upstream_status、$upstream_response_time打标上报为 Prometheus 直方图或计数器(配合nginx-lua-prometheus库)
关键指标建议采集:
-
nginx_upstream_health_status{server="10.0.1.10:8080", upstream="app_backend"}(1=健康,0=宕机) -
nginx_upstream_response_time_seconds_bucket{le="0.5", server="..."}(P95 延迟分布) -
nginx_upstream_requests_total{status="5xx", server="..."}(按节点统计错误率)
用 Grafana 构建健康度看板
导入或自建看板,聚焦三类核心视图:
-
节点健康热力图:用
Bar gauge或State timeline展示各 backend 当前状态(✅/⚠️/❌),颜色自动映射health_status指标 -
失败率趋势线:叠加
rate(nginx_upstream_requests_total{status=~"5.."}[5m]) / rate(nginx_upstream_requests_total[5m]),按 server 分组 - 响应延迟对比柱状图:展示各节点 P95 响应时间,标出超阈值(如 >1s)的异常节点
支持点击下钻:点击某节点 → 自动跳转到该 server 的详细日志查询页(对接 Loki)或调用 /status/format/json?filter=10.0.1.10:8080 查原始探测记录。
补充:安全与稳定性增强点
- 健康判断不只看 HTTP 状态码,还要解析
/actuator/health响应体,确认"status":"UP"且无"outOfMemoryError"类关键词(可用 Lua 预处理) - 设置探测超时 ≤2 秒,避免拖慢主请求;
fall=3防止单次 GC 误判,rise=2加速恢复 - 所有状态页加 IP 白名单,禁止公网裸露
/status或/metrics
不复杂但容易忽略。


















