設定 CloudWatch 代理程式以收集叢集指標 - Amazon CloudWatch

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

設定 CloudWatch 代理程式以收集叢集指標

重要

如果您要在 Amazon EKS叢集上安裝 Container Insights,建議您使用 Amazon CloudWatch Observability EKS 附加元件進行安裝,而不是使用本節中的指示。如需詳細資訊和指示,請參閱安裝 Amazon CloudWatch Observability EKS 附加元件

若要設定容器洞見收集指標,您可以遵循 Amazon EKS和 Kubernetes 上 Container Insights 的快速入門設定 中的步驟,或是遵循本節中的步驟。在下列步驟中,您可以將 CloudWatch 代理程式設定為能夠從叢集收集指標。

如果您要在 Amazon EKS叢集中安裝 ,並在 2023 年 11 月 6 日或之後使用本節中的指示,則可以在叢集EKS中為 Amazon 安裝具有增強可觀測性的 Container Insights。

步驟 1:建立 的命名空間 CloudWatch

使用下列步驟建立名為 amazon-cloudwatch的 Kubernetes 命名空間 CloudWatch。如果您已建立此命名空間,則可以略過此步驟。

為 建立命名空間 CloudWatch
  • 輸入以下命令。

    kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cloudwatch-namespace.yaml

步驟 2:在叢集中建立服務帳戶

如果您還沒有代理程式,請使用下列其中一種方法來建立該 CloudWatch 代理程式的服務帳戶。

  • 使用 kubectl

  • 使用kubeconfig檔案

使用 kubectl 進行身分驗證

使用 為 CloudWatch 客服人員kubectl建立服務帳戶
  • 輸入以下命令。

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

如果您未遵循上述步驟,但已經擁有您要使用的 CloudWatch 客服人員的服務帳戶,則必須確保其具有下列規則。此外,在容器洞見安裝中的其他步驟,您必須使用該服務帳戶的名稱,而不是 cloudwatch-agent

rules: - apiGroups: [""] resources: ["pods", "nodes", "endpoints"] verbs: ["list", "watch"] - apiGroups: [ "" ] resources: [ "services" ] verbs: [ "list", "watch" ] - apiGroups: ["apps"] resources: ["replicasets", "daemonsets", "deployments", "statefulsets"] verbs: ["list", "watch"] - apiGroups: ["batch"] resources: ["jobs"] verbs: ["list", "watch"] - apiGroups: [""] resources: ["nodes/proxy"] verbs: ["get"] - apiGroups: [""] resources: ["nodes/stats", "configmaps", "events"] verbs: ["create", "get"] - apiGroups: [""] resources: ["configmaps"] resourceNames: ["cwagent-clusterleader"] verbs: ["get","update"] - nonResourceURLs: ["/metrics"] verbs: ["get", "list", "watch"]

使用 kubeconfig 進行身分驗證

或者,您可以使用 kubeconfig 檔案進行身分驗證。此方法可讓您略過服務帳戶 b 的需求,直接在 CloudWatch 客服人員組態中指定kubeconfig路徑。它還允許您移除對 Kubernetes 控制平面API的相依性以進行身分驗證,透過您的 kubeconfig 檔案管理身分驗證,簡化設定並可能提高安全性。

若要使用此方法,請更新您的 CloudWatch 代理程式組態檔案以指定kubeconfig檔案的路徑,如下列範例所示。

{ "logs": { "metrics_collected": { "kubernetes": { "cluster_name": "YOUR_CLUSTER_NAME", "enhanced_container_insights": false, "accelerated_compute_metrics": false, "tag_service": false, "kube_config_path": "/path/to/your/kubeconfig" "host_ip": "HOSTIP" } } } }

若要建立kubeconfig檔案,請使用 Kubernetes 角色為admin/{create_your_own_user}使用者建立憑證簽署請求 system:masters (CSR)。然後使用 Kubernetes 叢集的憑證授權單位 (CA) 簽署並建立kubeconfig檔案。

步驟 3: ConfigMap 為 CloudWatch客服人員建立

使用下列步驟為 ConfigMap CloudWatch 客服人員建立 。

ConfigMap 為 CloudWatch 客服人員建立
  1. 執行下列命令,將 ConfigMap YAML下載到您的kubectl用戶端主機:

    curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-configmap-enhanced.yaml
  2. 編輯下載YAML的檔案,如下所示:

    • cluster_name – 在 kubernetes 區段,將 {{cluster_name}} 取代為叢集的名稱。移除 {{}} 字元。或者,如果您使用 Amazon EKS叢集,則可以刪除 "cluster_name" 欄位和值。如果您這麼做, CloudWatch 客服人員會從 Amazon EC2標籤偵測叢集名稱。

  3. (選用) ConfigMap 根據您的監控需求對 進行進一步變更,如下所示:

    • metrics_collection_interval – 在 kubernetes 區段,您可以指定代理程式收集指標的頻率。預設值為 60 秒。kubelet 中的預設 cadvisor 收集間隔是 15 秒,所以請不要將這個值設定為少於 15 秒。

    • endpoint_override – 如果您要覆寫預設端點logs,您可以指定 CloudWatch 日誌端點。如果您是從 中的叢集發佈,VPC且您希望資料移至VPC端點,則可能需要執行此操作。

    • force_flush_interval – 在 logs區段中,您可以指定批次記錄事件在發佈至 CloudWatch Logs 之前的間隔。預設為 5 秒。

    • region – 在預設情況下,代理程式會將指標發佈至工作節點所在的區域。若要覆寫這個值,您可以在 agent 區段新增 region 欄位:例如,"region":"us-west-2"

    • statsd 區段 – 如果您希望 CloudWatch Logs 代理程式也在叢集的每個工作者節點中以 StatsD 接聽程式身分執行,您可以將statsd區段新增至metrics區段,如下列範例所示。如需此區段其他 StatsD 選項的資訊,請參閱 使用 StatsD 擷取自訂指標

      "metrics": { "metrics_collected": { "statsd": { "service_address":":8125" } } }

      JSON 本節的完整範例如下。如果您使用 kubeconfig 檔案進行身分驗證,請新增 kube_config_path 參數以指定 kubeconfig 檔案的路徑。

      { "agent": { "region": "us-east-1" }, "logs": { "metrics_collected": { "kubernetes": { "cluster_name": "MyCluster", "metrics_collection_interval": 60, "kube_config_path": "/path/to/your/kubeconfig" //if using kubeconfig for authentication } }, "force_flush_interval": 5, "endpoint_override": "logs.us-east-1.amazonaws.com" }, "metrics": { "metrics_collected": { "statsd": { "service_address": ":8125" } } } }
  4. 執行下列命令,在叢集 ConfigMap 中建立 。

    kubectl apply -f cwagent-configmap.yaml

步驟 4:將 CloudWatch 代理程式部署為 DaemonSet

若要完成 CloudWatch 代理程式的安裝並開始收集容器指標,請使用下列步驟。

將 CloudWatch 代理程式部署為 DaemonSet
    • 如果您不希望在叢集上使用 StatsD,請輸入以下命令。

      kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-daemonset.yaml
    • 若您希望使用 StatsD,請遵循下列步驟:

      1. 執行下列命令,將 DaemonSet YAML下載到您的kubectl用戶端主機。

        curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-daemonset.yaml
      2. 取消 cwagent-daemonset.yaml 檔案中 port 區段的註解,如下所示:

        ports: - containerPort: 8125 hostPort: 8125 protocol: UDP
      3. 執行下列命令,在叢集中部署 CloudWatch 代理程式。

        kubectl apply -f cwagent-daemonset.yaml
      4. 執行下列命令,在叢集的 Windows 節點上部署 CloudWatch 代理程式。Windows 上的 CloudWatch 代理程式不支援 StatsD 接聽程式。

        kubectl apply -f cwagent-daemonset-windows.yaml
  1. 透過執行下列命令確認已部署代理程式。

    kubectl get pods -n amazon-cloudwatch

完成後, CloudWatch 客服人員會建立名為 的日誌群組,/aws/containerinsights/Cluster_Name/performance並將效能日誌事件傳送至此日誌群組。如果您也將代理程式設定為 StatsD 接聽程式,此代理程式也會使用應用程式 pod 排定所在的節點 IP 地址,來接聽連接埠 8125 上的 StatsD 指標。

故障診斷

如果代理程式未正確部署,請嘗試下列項目:

  • 執行以下命令來取得 Pod 清單。

    kubectl get pods -n amazon-cloudwatch
  • 執行以下命令和檢查輸出底部的事件。

    kubectl describe pod pod-name -n amazon-cloudwatch
  • 執行以下命令來檢查日誌。

    kubectl logs pod-name -n amazon-cloudwatch