直接用 prometheus 抓取 ingress-nginx 的 /metrics 端点即可获取核心流量指标,关键在于正确配置标签、端口(10254)和抓取路径;需确认 pod 监听 10254 端口并标注 prometheus.io/scrape: "true";推荐 servicemonitor(依赖 service)或 podmonitor(适用于 daemonset)自动发现目标;常用指标包括请求量、响应码分布、上游延迟及后端健康状态。

直接用 Prometheus 抓取 Ingress-Nginx 暴露的 /metrics 端点,配合 ServiceMonitor 或 PodMonitor 自动发现目标,就能拿到请求量、响应码、延迟、后端状态等核心流量指标。关键不是“能不能”,而是配置是否对得上标签、端口和抓取路径。
确认 Ingress-Nginx 已启用 metrics
Ingress-Nginx 默认开启 metrics,但需验证两点:
- Pod 中容器是否监听
10254端口(非 80/443),且该端口已暴露为metrics名称 - Pod 的 annotations 是否包含
prometheus.io/scrape: "true"和prometheus.io/port: "10254"
执行命令快速检查:
kubectl get pod -n kube-system -l app.kubernetes.io/name=ingress-nginx -o widekubectl get pod -n kube-system
用 ServiceMonitor 自动发现(推荐)
如果你的 Ingress-Nginx 有对应的 Service(如 nginx-ingress-lb),ServiceMonitor 是最稳妥的方式。它通过 Service 关联的 Endpoint 自动识别后端 Pod。
示例配置(注意匹配实际标签):
kind: ServiceMonitor
metadata:
name: ingress-nginx-monitor
labels:
release: prometheus
spec:
selector:
matchLabels:
app.kubernetes.io/name: nginx-ingress
namespaceSelector:
matchNames:
- kube-system
endpoints:
- port: metrics
interval: 30s
path: /metrics
用 PodMonitor 直接抓取(适合 DaemonSet 场景)
当 Ingress-Nginx 以 DaemonSet 部署、没有稳定 Service,或你想绕过 Service 层直连 Pod 时,用 PodMonitor 更精准。
它不依赖 Service,只看 Pod 标签和端口定义:
apiVersion: monitoring.coreos.com/v1kind: PodMonitor
metadata:
name: ingress-nginx-pod-monitor
spec:
selector:
matchLabels:
app.kubernetes.io/name: ingress-nginx
namespaceSelector:
matchNames:
- kube-system
podMetricsEndpoints:
- port: metrics
interval: 30s
path: /metrics
常用流量指标与 PromQL 示例
抓取成功后,这些指标在 Prometheus UI 或 Grafana 中可直接查询:
-
每秒请求数:
rate(nginx_ingress_controller_requests_total[5m]) -
各响应码分布:
sum by (status) (rate(nginx_ingress_controller_requests_total[5m])) -
平均上游延迟(毫秒):
histogram_quantile(0.95, rate(nginx_ingress_controller_request_duration_seconds_bucket[5m])) * 1000 -
后端健康状态:
nginx_ingress_controller_upstream_healthcheck_failures_total
建议搭配 Grafana 导入社区成熟的 Ingress-Nginx 仪表盘(如 ID 11076),开箱即用查看南北向流量全景。











