Nginx 开源版可通过原生日志暴露 upstream 响应指标、stub_status 页面展示连接状态、第三方模块实现主动健康检查,并对接 Prometheus/Grafana 构建完整监控闭环。

Nginx 本身不是全功能监控平台,但作为负载均衡器,它能提供关键链路指标并支撑可观测体系。核心思路是:用原生能力采集基础数据 + 借助扩展模块增强探测 + 对接外部工具实现可视化与告警。不依赖商业版(如 Nginx Plus),开源 Nginx 也能构建实用的性能监控闭环。
启用 upstream 实时响应指标
Nginx 默认记录每次转发的耗时和目标地址,只需在日志格式中显式暴露:在 http 块中定义日志格式:
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'$upstream_response_time $upstream_addr $upstream_status';这样每条访问日志都会包含:
– $upstream_response_time:后端真实响应时间(毫秒级,支持小数,如 0.123)
– $upstream_addr:实际转发到的后端 IP:PORT
– $upstream_status:后端返回的状态码(如 200、503)
后续可用 ELK、Prometheus + nginxlog-exporter 或简单 awk 脚本按节点聚合 P95 延迟、错误率。
暴露上游健康状态页面
无需额外模块,直接复用 Nginx 自带的 stub_status 并配合 upstream 模块信息:
- 确保编译时启用了
--with-http_stub_status_module(默认通常开启) - 添加 location 配置:
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
allow 10.0.0.0/8;
deny all;
}访问 /nginx_status 可看到:
- Active connections:当前活跃连接数
- Reading/Writing/Waiting:各阶段连接分布
- 结合 access.log 中的
$upstream_*字段,可反推各后端负载是否倾斜
配置主动健康探测(需第三方模块)
仅靠被动日志无法提前发现“能连通但响应慢/返回错”的节点。推荐使用 nginx_upstream_check_module(淘宝开源,OpenResty 默认集成):
- 在 upstream 块中加入探测配置:
upstream app {
server 10.0.1.10:8080;
server 10.0.1.11:8080;
check interval=5 rise=2 fall=3 timeout=1 type=http;
check_http_send "GET /health HTTP/1.1\r\nHost: example.com\r\n\r\n";
check_http_expect_alive http_2xx;
}关键参数说明:
- interval=5:每 5 秒发起一次探测
- rise=2:连续 2 次成功才恢复上线
- fall=3:连续 3 次失败才标记为 down
- check_http_expect_alive:只把 2xx 视为健康,排除 404/503 等干扰
该模块还支持 location /upstream_check 页面,实时查看每个节点的检查结果、失败次数、响应时间等。
对接 Prometheus 实现指标可视化
单靠日志和页面不够自动化。推荐轻量方案:
- 部署 nginx-prometheus-exporter(官方维护),它会自动解析 Nginx 日志或通过 stub_status 抓取指标
- 在 exporter 配置中指定日志路径,并启用
upstream_response_time解析 - Grafana 中导入 Nginx Dashboard(ID: 12106),即可看到:
– 各 upstream 节点的平均延迟、P90/P99 延迟
– 每秒请求数(RPS)、成功率、5xx 错误率
– 连接数趋势与后端权重变化
若已用 OpenResty,还可通过 ngx_http_lua_module 直接上报自定义指标(如业务维度的处理耗时),精度更高。



















