本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定 CloudWatch 代理程式以收集叢集指標
重要
如果您要在 Amazon EKS 叢集上安裝 Container Insights,建議您使用 Amazon CloudWatch 可觀測性 EKS 附加元件進行安裝,而不是使用本節中的指示。如需詳細資訊和指示,請參閱Amazon CloudWatch 可觀測性 EKS 附加元件的快速入門。
若要設定容器洞見收集指標,您可以遵循 Amazon EKS 和 Kubernetes 上 Container Insights 的 Quick Start 設定 中的步驟,或是遵循本節中的步驟。在下列步驟中,您會將 CloudWatch 代理程式設為能夠從叢集收集指標。
如果您要在 Amazon EKS 叢集中進行安裝,並且在 2023 年 11 月 6 日或之後使用本節中的指示,則您可在叢集中安裝 Container Insights 搭配 Amazon EKS 的增強可觀測性。
步驟 1:建立 CloudWatch 的命名空間
使用以下步驟,為 CloudWatch 建立名為 amazon-cloudwatch
的 Kubernetes 命名空間。如果您已建立此命名空間,則可以略過此步驟。
若要建立 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
檔案進行身分驗證。此方法可讓您略過直接在 CloudWatch 代理程式組態中指定kubeconfig
路徑的服務帳戶 b 需求。它還允許您移除對 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:為 CloudWatch 代理程式建立 ConfigMap
使用下列步驟來為 CloudWatch 代理程式建立 ConfigMap。
若要為 CloudWatch 代理程式建立 ConfigMap
-
透過執行下列命令,將 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
-
編輯已下載的 YAML 檔案,如下所示:
-
cluster_name – 在
kubernetes
區段,將{{cluster_name}}
取代為叢集的名稱。移除{{}}
字元。或者,如果您使用的是 Amazon EKS 叢集,您可以刪除"cluster_name"
欄位和值。如果您這麼做,CloudWatch 代理程式會透過 Amazon EC2 標籤偵測叢集名稱。
-
-
(選用) 根據您的監控要求對 ConfigMap 進行進一步變更,如下所示:
-
metrics_collection_interval – 在
kubernetes
區段,您可以指定代理程式收集指標的頻率。預設值為 60 秒。kubelet 中的預設 cadvisor 收集間隔是 15 秒,所以請不要將這個值設定為少於 15 秒。 -
endpoint_override 如果您想要覆寫預設端點,您可以在
logs
區段指定 CloudWatch Logs 端點。如果您透過 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" } } } }
-
-
透過執行以下命令在叢集中建立 ConfigMap。
kubectl apply -f cwagent-configmap-enhanced.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,請遵循下列步驟:
-
透過執行以下命令,將 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
-
取消
cwagent-daemonset.yaml
檔案中port
區段的註解,如下所示:ports: - containerPort: 8125 hostPort: 8125 protocol: UDP
-
透過執行以下命令在叢集中部署 CloudWatch 代理程式。
kubectl apply -f cwagent-daemonset.yaml
執行下列命令,在叢集的 Windows 節點上部署 CloudWatch 代理程式。Windows 上的 CloudWatch 代理程式不支援 StatsD 接聽程式。
kubectl apply -f cwagent-daemonset-windows.yaml
-
-
-
透過執行下列命令確認已部署代理程式。
kubectl get pods -n amazon-cloudwatch
完成後,CloudWatch 代理程式會建立名為 /aws/containerinsights/
的日誌群組,並將效能日誌事件傳送到這個日誌群組。如果您也將代理程式設定為 StatsD 接聽程式,此代理程式也會使用應用程式 pod 排定所在的節點 IP 地址,來接聽連接埠 8125 上的 StatsD 指標。Cluster_Name
/performance
故障診斷
如果代理程式未正確部署,請嘗試下列項目:
-
執行以下命令來取得 Pod 清單。
kubectl get pods -n amazon-cloudwatch
-
執行以下命令和檢查輸出底部的事件。
kubectl describe pod
pod-name
-n amazon-cloudwatch -
執行以下命令來檢查日誌。
kubectl logs
pod-name
-n amazon-cloudwatch