環境已經部署了?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 即可實時觀察流量、錯誤率等關鍵指標!