prometheus监控nginx需通过exporter桥接:ingress controller默认暴露/10254/metrics,自建容器推荐sidecar模式运行nginx-prometheus-exporter抓取/nginx_status,k8s中用servicemonitor动态发现目标并打标聚合。

云原生环境中监控 Nginx,核心是让指标可采集、可传输、可聚合。Prometheus 本身不直接拉取 Nginx 数据,需通过 Exporter 桥接,而具体方案取决于 Nginx 的部署形态和指标深度需求。
确认 Nginx 实例是否暴露基础状态接口
绝大多数云原生 Nginx(包括容器化 Nginx 或 Nginx Ingress Controller)默认已启用 ngx_http_stub_status_module,但需显式配置路径并限制访问:
- 在 Nginx 配置的
server或location块中添加:location /nginx_status { stub_status on; allow 127.0.0.1; deny all; } - 若运行在 Pod 内(如自建 Nginx 容器),确保该路径可通过 localhost 访问;若为 Nginx Ingress Controller,则其默认已暴露
/metrics端点(无需额外配置 stub_status) - 执行
nginx -t && nginx -s reload生效后,用curl http://localhost/nginx_status验证返回是否含Active connections等字段
选择适配的 Exporter 类型
云原生场景下不推荐手动部署独立 nginx_exporter,优先利用原生支持能力:
-
Nginx Ingress Controller(最常见):官方镜像内置 Prometheus metrics 端点(默认
:10254/metrics),自动暴露nginx_ingress_controller_requests、nginx_ingress_controller_ssl_expire_time_seconds等丰富指标,直接配置 Prometheus 抓取即可 -
自建容器化 Nginx:若仅需连接数、请求计数等基础指标,可在容器内同时运行
nginx-prometheus-exporter(推荐 sidecar 模式),指向http://localhost/nginx_status -
需虚拟主机/Upstream 细粒度指标:选用
nginx-vts-exporter,但要求 Nginx 编译时已集成nginx-module-vts,并在配置中启用vhost_traffic_status_zone
配置 Prometheus 抓取任务
根据部署方式调整 scrape_configs,关键在于目标发现逻辑:
- 在 Kubernetes 中,通常使用 ServiceMonitor 或 PodMonitor(Operator 方式);若用静态配置,示例如下:
job_name: nginx-ingress<br> static_configs:<br> - targets: ['nginx-ingress-controller:10254']
- 若为 sidecar 模式下的 nginx_exporter,默认监听
:9113/metrics,target 改为对应 Pod IP + 9113 - 务必添加
relabel_configs补充标签,如namespace、ingress、service,便于后续按路由或服务维度聚合
验证与常用指标定位
部署后立即检查数据连通性:
- 访问 Prometheus UI → Targets 页面,确认 job 状态为
UP - 在 Graph 中输入
nginx_ingress_controller_requests_total{status=~"5.."}查看 5xx 错误趋势 - 关键指标举例:
nginx_ingress_controller_requests_total{ingress="my-app", status="200"}(某 Ingress 的成功请求数)rate(nginx_ingress_controller_request_size_sum[5m]) / rate(nginx_ingress_controller_requests_total[5m])(平均请求体大小)nginx_ingress_controller_ssl_expire_time_seconds{host="api.example.com"} (证书剩余有效期告警)











