Prometheus + Nginx Exporter 是最轻量、稳定且生产就绪的 Nginx 监控方案,依赖 stub_status 模块暴露连接数、请求速率等指标,需配置 /nginx_status 路径并启用模块,再部署 Exporter 抓取数据,最后在 Prometheus 中添加 job 完成采集。

要让 Nginx 的运行状态真正可观察,光靠 access.log 和 error.log 远远不够。Prometheus + Nginx Exporter 是目前最轻量、稳定且生产就绪的监控组合——它不侵入 Nginx 本身,只需暴露一个轻量 HTTP 接口,就能把连接数、请求速率、响应状态码分布、上游健康状况等关键指标实时送进 Prometheus。
确认 Nginx 已启用 stub_status 模块
Nginx Exporter 依赖 Nginx 自带的 ngx_http_stub_status_module 提供基础指标(如活跃连接、接受/处理/请求数)。该模块默认编译进大多数官方二进制包,但需在配置中显式开启:
- 在 server 或 location 块中添加:
location /nginx_status {
stub_status on;
allow 127.0.0.1;
deny all;
}
注意:路径必须是/nginx_status(Exporter 默认抓取此路径),且仅允许本地或监控节点访问。 - 执行
nginx -t验证配置,再nginx -s reload生效。 - 手动访问
http://localhost/nginx_status,应返回类似:
Active connections: 3
server accepts handled requests
12345 12345 23456
Reading: 0 Writing: 1 Waiting: 2
部署并配置 nginx_exporter
下载对应平台的二进制(推荐从 GitHub Release 页面 获取),解压后直接运行:
- 基础启动命令:
./nginx-prometheus-exporter -nginx.scrape-uri http://127.0.0.1/nginx_status
默认监听:9113/metrics,Prometheus 可直接抓取。 - 若 Nginx 启用了 basic auth 或使用 HTTPS,加上:
-nginx.username user -nginx.password pass -nginx.ssl-verify=false - 建议用 systemd 或容器方式长期运行,并添加健康检查(如
/healthz端点)。
在 Prometheus 中添加 job 并验证采集
编辑 prometheus.yml,在 scrape_configs 下新增:
- - job_name: 'nginx'
static_configs:
- targets: ['127.0.0.1:9113'] - 重启 Prometheus 或触发 reload(
curl -X POST http://localhost:9090/-/reload)。 - 访问 Prometheus Web UI → Status → Targets,确认 nginx job 显示为 UP;
在 Graph 中输入nginx_connections_active或nginx_http_requests_total,应有数据返回并随请求变化。
补充高阶指标:对接 Nginx Plus 或 OpenResty
stub_status 只提供基础连接和请求计数。若需响应时间分位数、按 upstream 或 vhost 维度拆分、缓存命中率等深度指标:
- Nginx Plus 用户:启用 API 模块(
api指令),Exporter 支持-nginx.plus.enabled=true直接拉取 JSON 格式全量指标。 - OpenResty 用户:可配合 lua-resty-prometheus 库,在 Lua 层埋点,导出自定义业务指标(如 API 耗时、鉴权失败次数)。
- 注意:Plus 和 OpenResty 的指标路径、认证方式与 stub_status 不同,需单独配置 Exporter 参数并调整 Prometheus 抓取目标。











