在 Amazon EKS 和 Kubernetes 叢集上安裝具有 Prometheus 指標集合的 CloudWatch 代理程式 - Amazon CloudWatch

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

在 Amazon EKS 和 Kubernetes 叢集上安裝具有 Prometheus 指標集合的 CloudWatch 代理程式

本節說明如何在執行 Amazon EKS 或 Kubernetes 的叢集中使用 Prometheus 監控來設定 CloudWatch 代理程式。執行這項操作之後,代理程式會自動湊集和匯入該叢集中執行的下列工作負載的指標。

  • AWS App Mesh

  • NGINX

  • Memcached

  • 爪哇/JMX

  • HAProxy

  • Fluent Bit

您也可以設定代理程式,以湊集和匯入其他 Prometheus 工作負載和來源。

在執行這些步驟安裝 Prometheus 指標收集的 CloudWatch 代理程式之前,您必須在 Amazon 上執行一個叢集,EKS或在 Amazon 執行個體上執行 Kubernetes 叢集。EC2

VPC安全群組需求

Prometheus 工作負載的安全群組輸入規則必須向 CloudWatch 代理程式開啟 Prometheus 連接埠,以便透過私有 IP 擷取 Prometheus 度量。

代理程式的安全性群組輸出規則必須允許 CloudWatch 代理程式透過 CloudWatch 私有 IP 連線至 Prometheus 工作負載的連接埠。

在 Amazon EKS 和 Kubernetes 叢集上安裝具有 Prometheus 指標集合的 CloudWatch 代理程式

本節說明如何在執行 Amazon EKS 或 Kubernetes 的叢集中使用 Prometheus 監控來設定 CloudWatch 代理程式。執行這項操作之後,代理程式會自動湊集和匯入該叢集中執行的下列工作負載的指標。

  • AWS App Mesh

  • NGINX

  • Memcached

  • 爪哇/JMX

  • HAProxy

  • Fluent Bit

您也可以設定代理程式,以湊集和匯入其他 Prometheus 工作負載和來源。

在執行這些步驟安裝 Prometheus 指標收集的 CloudWatch 代理程式之前,您必須在 Amazon 上執行一個叢集,EKS或在 Amazon 執行個體上執行 Kubernetes 叢集。EC2

VPC安全群組需求

Prometheus 工作負載的安全群組輸入規則必須向 CloudWatch 代理程式開啟 Prometheus 連接埠,以便透過私有 IP 擷取 Prometheus 度量。

代理程式的安全性群組輸出規則必須允許 CloudWatch 代理程式透過 CloudWatch 私有 IP 連線至 Prometheus 工作負載的連接埠。

設定IAM角色

第一步是在叢集中設定必要的IAM角色。有兩種方法:

  • 設定服務帳戶的IAM角色,也稱為服務角色。此方法適用於EC2啟動類型和 Fargate 啟動類型。

  • 將IAM原則新增至叢集使用的IAM角色。這僅適用於EC2啟動類型。

設定服務角色 (EC2啟動類型和 Fargate 啟動類型)

若要設定服務角色,請輸入下列命令。Replace (取代) MyCluster 與群集的名稱。

eksctl create iamserviceaccount \ --name cwagent-prometheus \ --namespace amazon-cloudwatch \ --cluster MyCluster \ --attach-policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy \ --approve \ --override-existing-serviceaccounts

將原則新增至叢集的IAM角色 (僅限EC2啟動類型)

若要在叢集中設定 Prometheus 支援的IAM原則
  1. 在打開 Amazon EC2 控制台https://console.aws.amazon.com/ec2/

  2. 在導覽窗格中,選擇執行個體

  3. 您需要找到群集的IAM角色名稱的前綴。若要這麼做,請選取叢集中執行處理名稱旁的核取方塊,然後選擇「動作」、「執行處理設定」、「附加/取代IAM角色」。然後複製IAM角色的前綴,例如eksctl-dev303-workshop-nodegroup

  4. 開啟位於 IAM 的 https://console.aws.amazon.com/iam/ 主控台。

  5. 在導覽窗格中,選擇角色

  6. 使用搜尋方塊尋找您先前在此程序中複製的前綴,然後選擇該角色。

  7. 選擇連接政策

  8. 使用搜索框進行查找CloudWatchAgentServerPolicy。選取旁邊的核取方塊 CloudWatchAgentServerPolicy,然後選擇 [附加原則]。

安裝 CloudWatch代理程式以收集 Prometheus 測量結果

您必須在叢集中安裝 CloudWatch 代理程式,才能收集指標。Amazon EKS 叢集和 Kubernetes 叢集的安裝代理程式的安裝方式有所不同。

刪除具有 Prometheus 支持的 CloudWatch 代理的以前版本

如果您已在叢集中安裝具有 Prometheus 支援的 CloudWatch 代理程式版本,則必須輸入下列命令來刪除該版本。只有具有 Prometheus 支援的舊版代理程式才需要這麼做。您不需要刪除在沒有 Prometheus 支援的情況下啟用容器洞見的 CloudWatch 代理程式。

kubectl delete deployment cwagent-prometheus -n amazon-cloudwatch

使用EC2啟動類型在 Amazon EKS 叢集上安裝 CloudWatch 代理程式

若要在 Amazon EKS 叢集上安裝具有 Prometheus 支援的 CloudWatch 代理程式,請依照下列步驟執行。

在 Amazon 叢集上安裝具有 Prometheus 支援的 CloudWatch 代理程式 EKS
  1. 輸入下列命令以檢查是否已建立 amazon-cloudwatch 命名空間:

    kubectl get namespace
  2. 如果結果中未顯示 amazon-cloudwatch,請輸入下列命令來建立它:

    kubectl create namespace amazon-cloudwatch
  3. 若要使用預設組態部署代理程式,並讓它將資料傳送至其安裝的 AWS 區域,請輸入下列命令:

    kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks.yaml

    如果要讓代理程式將資料傳送到不同的區域,請依照下列步驟執行:

    1. 輸入下列命令,以下載代理程式的YAML檔案:

      curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks.yaml
    2. 使用文字編輯器開啟檔案,然後搜尋檔案的 cwagentconfig.json 區塊。

    3. 新增反白的行,指定您想要的區域:

      cwagentconfig.json: | { "agent": { "region": "us-east-2" }, "logs": { ...
    4. 儲存檔案並使用您更新的檔案來部署代理程式。

      kubectl apply -f prometheus-eks.yaml

使用 Fargate 啟動類型在 Amazon EKS 叢集上安裝 CloudWatch 代理程式

若要在具有 Fargate 啟動類型的 Amazon EKS 叢集上安裝具有 Prometheus 支援的 CloudWatch 代理程式,請依照下列步驟執行。

在具有 Fargate 啟動類型的 Amazon EKS 叢集上安裝具有 Prometheus 支援的 CloudWatch 代理程式
  1. 輸入下列命令,為 CloudWatch 代理程式建立 Fargate 設定檔,以便在叢集內執行。Replace (取代) MyCluster 與群集的名稱。

    eksctl create fargateprofile --cluster MyCluster \ --name amazon-cloudwatch \ --namespace amazon-cloudwatch
  2. 若要安裝 CloudWatch 代理程式,請輸入下列命令。Replace (取代) MyCluster 與群集的名稱。此名稱會用於存放代理程式所收集之日誌事件的日誌群組名稱中,也用作為代理程式所收集之指標的維度。

    Replace (取代) region 使用您要傳送指標的地區名稱。例如 us-west-1

    curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks-fargate.yaml | sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" | kubectl apply -f -

在 Kubernetes 叢集上安裝 CloudWatch 代理程式

若要在執行 Kubernetes 的叢集上安裝具有 Prometheus 支援的 CloudWatch 代理程式,請輸入下列命令:

curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-k8s.yaml | sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" | kubectl apply -f -

Replace (取代) MyCluster 與群集的名稱。此名稱會用於存放代理程式所收集之日誌事件的日誌群組名稱中,也用作為代理程式所收集之指標的維度。

Replace (取代) region 使用您要傳送指標的 AWS 地區名稱。例如 us-west-1

確認代理程式正在執行中

在 Amazon EKS 和 Kubernetes 叢集上,您可以輸入下列命令來確認代理程式正在執行。

kubectl get pod -l "app=cwagent-prometheus" -n amazon-cloudwatch

如果結果包含Running狀態中的單一 CloudWatch 代理程式網繭,表示代理程式正在執行並收集 Prometheus 度量。根據預設, CloudWatch代理程式會收集應用程式網格NGINX、Memcached、Java/ JMX 和HAProxy每分鐘的指標。如需這些指標的詳細資訊,請參閱 代理程式收集的 Prometheus 測量結果 CloudWatch 。有關如何在中查看您的 Prometheus 指標的說明,請參閱 CloudWatch 檢視 Prometheus 指標

您也可以將 CloudWatch 代理程式設定為從其他 Prometheus 匯出器收集指標。如需詳細資訊,請參閱 湊集其他 Prometheus 來源並匯入這些指標