本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定 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 客服人員建立
-
執行下列命令,將 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 日誌端點。如果您是從 中的叢集發佈,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.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