控制平面指標與 Prometheus - Amazon EKS

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

控制平面指標與 Prometheus

Kubernetes API 伺服器公開多個可用於監控和分析的指標。這些指標透過參照 /metrics HTTP API 的指標端點於內部公開。類似其他端點,此端點在 Amazon EKS 控制平面公開。此主題說明您可使用此端點來檢視和分析叢集運作的一些方式。

檢視原始指標

若要檢視原始指標輸出,請使用 kubectl--raw 旗標。此命令可讓您傳遞任何 HTTP 路徑並傳回原始回應。

kubectl get --raw /metrics

輸出範例:

... # HELP rest_client_requests_total Number of HTTP requests, partitioned by status code, method, and host. # TYPE rest_client_requests_total counter rest_client_requests_total{code="200",host="127.0.0.1:21362",method="POST"} 4994 rest_client_requests_total{code="200",host="127.0.0.1:443",method="DELETE"} 1 rest_client_requests_total{code="200",host="127.0.0.1:443",method="GET"} 1.326086e+06 rest_client_requests_total{code="200",host="127.0.0.1:443",method="PUT"} 862173 rest_client_requests_total{code="404",host="127.0.0.1:443",method="GET"} 2 rest_client_requests_total{code="409",host="127.0.0.1:443",method="POST"} 3 rest_client_requests_total{code="409",host="127.0.0.1:443",method="PUT"} 8 # HELP ssh_tunnel_open_count Counter of ssh tunnel total open attempts # TYPE ssh_tunnel_open_count counter ssh_tunnel_open_count 0 # HELP ssh_tunnel_open_fail_count Counter of ssh tunnel failed open attempts # TYPE ssh_tunnel_open_fail_count counter ssh_tunnel_open_fail_count 0

此原始輸出會逐字傳回 API 伺服器公開的內容。這些指標會以 Prometheus 格式顯示。此格式可讓 API 伺服器按列分類公開不同的指標。每個列皆包含指標名稱、標籤和值。

<metric_name>{"<tag>"="<value>"[<,...>]} <value>

如果您正在尋找特定指標,雖然此端點很有用,但隨著時間經過,您通常會想要分析這些指標。若要這樣做,您可以將 Prometheus 部署到您的叢集。Prometheus 是監控和時間序列資料庫,它會清除公已開的端點和彙總資料,讓您能夠篩選、繪圖及查詢結果。

部署 Prometheus

此主題協助您使用 Helm V3 將 Prometheus 部署到您的叢集。如果您已經安裝了 Helm,可以使用 helm version 命令檢查您的版本。Helm 是 Kubernetes 叢集的套件管理工具。如需有關 Helm 及如何安裝它的詳細資訊,請參閱搭配 使用 HelmAmazon EKS

在您為 Amazon EKS 叢集設定 Helm 之後,即可用它來依照下列步驟部署 Prometheus。

使用 Helm 部署 Prometheus

  1. 建立 Prometheus 命名空間。

    kubectl create namespace prometheus
  2. 新增prometheus-community圖表儲存庫。

    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
  3. 部署 Prometheus。

    helm upgrade -i prometheus prometheus-community/prometheus \ --namespace prometheus \ --set alertmanager.persistentVolume.storageClass="gp2",server.persistentVolume.storageClass="gp2"
    注意

    如果您在執行此命令Error: failed to download "stable/prometheus" (hint: running `helm repo update` may help)時收到 錯誤,請執行 helm repo update,然後嘗試再次執行 Step 2 命令。

    如果您收到錯誤 Error: rendered manifests contain a resource that already exists,請執行 helm uninstall your-release-name -n namespace,然後嘗試再次執行 Step 3 (步驟 3) 命令。

  4. 確認 prometheus 命名空間中的所有裝置皆處於 READY 狀態。

    kubectl get pods -n prometheus

    輸出:

    NAME READY STATUS RESTARTS AGE prometheus-alertmanager-59b4c8c744-r7bgp 1/2 Running 0 48s prometheus-kube-state-metrics-7cfd87cf99-jkz2f 1/1 Running 0 48s prometheus-node-exporter-jcjqz 1/1 Running 0 48s prometheus-node-exporter-jxv2h 1/1 Running 0 48s prometheus-node-exporter-vbdks 1/1 Running 0 48s prometheus-pushgateway-76c444b68c-82tnw 1/1 Running 0 48s prometheus-server-775957f748-mmht9 1/2 Running 0 48s
  5. 使用 kubectl 將 Prometheus 主控台的連接埠轉送到本機機器。

    kubectl --namespace=prometheus port-forward deploy/prometheus-server 9090
  6. 將 Web 瀏覽器連接至 localhost:9090 以檢視 Prometheus 主控台。

  7. - insert metric at cursor (- 在游標處插入指標) 功能表中選擇一個指標,然後選擇 Execute (執行)。選擇 Graph (圖表) 標籤以顯示一段時間內的指標。下圖顯示一段時間內的 container_memory_usage_bytes

    
                        Prometheus 指標
  8. 選擇頂部導覽列中的 Status (狀態),然後選擇 Targets (目標)

    
                        Prometheus 主控台

    將會顯示使用服務探索連接至 Prometheus 的所有 Kubernetes 端點。