ingress-nginx 开启 Prometheus 监控 + Grafana 查看指标
环境已经部署了 ingress-nginx
(DaemonSet 方式),并且 Prometheus + Grafana 也已经运行。但之前 /metrics
端点没有暴露 Nginx 核心指标(如 nginx_ingress_controller_requests_total
),经过调整后现在可以正常采集数据。以下是完整操作总结:
1. 确保 ingress-nginx 暴露 Prometheus 指标
(1)检查并修改 DaemonSet 配置
kubectl edit daemonset ingress-nginx-controller -n ingress-nginx
在 containers.args
中添加:
args:
- /nginx-ingress-controller
- --enable-metrics=true # 启用 Prometheus 指标
- --metrics-per-host=true # 按 Host 统计指标(可选)
- --configmap=$(POD_NAMESPACE)/ingress-nginx
- ...(其他原有参数保持不变)
保存后会自动重启 Pod,或者手动滚动更新:
kubectl rollout restart daemonset ingress-nginx-controller -n ingress-nginx
(2)验证指标是否暴露
kubectl exec -it $(kubectl get pods -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx -o jsonpath='{.items[0].metadata.name}') \-n ingress-nginx -- curl -s http://localhost:10254/metrics | grep 'nginx_ingress_controller_requests_total'
预期输出:
nginx_ingress_controller_requests_total{ingress="your-ingress", namespace="default", status="200"} 15
2. 配置 Prometheus 采集指标
(1)创建 ServiceMonitor(如果尚未配置)
cat <<EOF | kubectl apply -f -
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:name: ingress-nginxnamespace: ingress-nginxlabels:release: prometheus # 必须匹配 Prometheus 的 serviceMonitorSelector
spec:selector:matchLabels:app.kubernetes.io/name: ingress-nginx # 匹配 Service 的标签endpoints:- port: metrics # 必须与 Service 的端口名称一致interval: 15spath: /metrics
EOF
(2)检查 Prometheus Targets
访问 Prometheus 的 Targets
页面(如 http://prometheus-server:9090/targets
),确认 ingress-nginx
的 target 状态为 UP。
(3)手动查询 Prometheus 验证
# 进入 Prometheus Pod 查询
kubectl exec -it $PROM_POD -n prometheus -c prometheus -- \curl -s "http://localhost:9090/api/v1/query?query=nginx_ingress_controller_requests_total" | jq
预期:返回带 ingress
和 status
标签的指标数据。
3. 在 Grafana 中查看指标
(1)导入官方 Dashboard
-
登录 Grafana(如
http://grafana.example.com
) -
点击 + → Import
-
输入 Dashboard ID:
-
最新版(推荐):
14314
(官方链接) -
旧版兼容:
9614
-
-
选择正确的 Prometheus 数据源
(2)检查数据源和查询
-
确认数据源:Dashboard 右上角选择正确的 Prometheus 数据源。
-
检查查询语句:点击任意 Panel → Edit → 查看 Query 是否使用正确的指标(如
nginx_ingress_controller_requests_total
)。 -
调整时间范围:确保选择最近的时间范围(如
Last 1 hour
)。
(3)常见问题排查
-
无数据:
-
检查 Prometheus 是否真的采集到数据(直接查询
nginx_ingress_controller_requests_total
)。 -
确保有流量经过 ingress-nginx(空流量无指标)。
-
-
指标名称不匹配:
-
新版本可能用
controller_nginx_requests_total
,需调整 Grafana 查询。
-
4. 最终验证
-
Prometheus 有数据:
curl -s "http://prometheus:9090/api/v1/query?query=nginx_ingress_controller_requests_total" | jq
-
Grafana 图表正常:
-
打开 Dashboard,查看请求量、错误率、延迟等图表。
-
总结
步骤 | 关键操作 |
---|---|
1. 启用指标 | --enable-metrics=true + 重启 DaemonSet |
2. 配置采集 | 创建 ServiceMonitor 匹配 metrics 端口 |
3. 检查 Target | Prometheus 的 Targets 页面确认 UP |
4. 导入 Dashboard | Grafana 导入 ID 14314 ,选择正确数据源 |
5. 验证数据 | 直接查询 Prometheus + 检查 Grafana 图表 |
你的环境已经可以正常监控 ingress-nginx,后续只需关注 Grafana Dashboard 即可实时观察流量、错误率等关键指标!