使用 Amazon CloudWatch 可觀測性 EKS 附加元件或 Helm Chart 安裝 CloudWatch 代理程式 Amazon CloudWatch - Amazon CloudWatch

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

使用 Amazon CloudWatch 可觀測性 EKS 附加元件或 Helm Chart 安裝 CloudWatch 代理程式 Amazon CloudWatch

您可以使用 Amazon CloudWatch Observability EKS 附加元件或 Amazon CloudWatch Observability Helm Chart,在 Amazon EKS 叢集上安裝 CloudWatch 代理程式和 Fluent 位元代理程式。也可以使用 Helm Chart 在非 Amazon EKS 託管的 Kubernetes 叢集上安裝 CloudWatch 代理程式和 Fluent 位元代理程式。

根據預設,在 Amazon EKS 叢集上使用任一方法,可讓 Amazon EKS 和 CloudWatch Application SignalsContainer Insights 具有增強的可觀測性。使用這兩個概念時,您可從叢集中收集基礎結構指標、應用程式效能遙測資料和容器日誌。

使用 Container Insights 搭配 Amazon EKS 的增強可觀測性,Container Insights 指標會按觀測,而不是存放或擷取的指標計費。對於 Application Signals,帳單以發往應用程式的傳入請求、來自應用程式的傳出請求以及每個已設定的服務水準目標 (SLO) 來計費。收到的每個傳入請求都會產生一個應用程式訊號,而發出的每個傳出請求也會產生一個應用程式訊號。每個 SLO 會在每個測量週期建立兩個應用程式訊號。如需 CloudWatch 定價的詳細資訊,請參閱 Amazon CloudWatch 定價

這兩種方法都會在 Amazon EKS 叢集的 Linux 和 Windows 工作者節點上啟用 Container Insights。若要在 Windows 上啟用 Container Insights,必須使用 1.5.0 或更高版本的 Amazon EKS 附加元件或 Helm Chart。Amazon EKS 叢集中的 Windows 不支援 Application Signals。

Amazon CloudWatch Observability EKS 附加元件適用於使用 Kubernetes 版本 1.23 或更新版本執行的 Amazon EKS 叢集。

安裝附加元件或 Helm Chart 時,還必須授與 IAM 許可,讓 CloudWatch 代理程式能夠向 CloudWatch 傳送指標、日誌和追蹤。有兩種方式可以進行:

  • 將政策連接至工作節點的 IAM 角色。此選項會授予工作節點許可,以便將遙測傳送至 CloudWatch。

  • 針對代理程式 Pod 的服務帳戶使用 IAM 角色,並將政策連接至此角色。這僅適用於 Amazon EKS 叢集。此選項僅可授予 CloudWatch 對適當代理程式 Pod 的存取權。

選項 1:使用 EKS Pod 身分識別安裝

如果您使用 3.1.0 或更高版本的附加元件,可以使用 EKS Pod 身分識別將必要的許可授與附加元件。EKS Pod 身分識別是建議的選項,並提供最低權限、憑證輪換和可稽核性等優點。此外,使用 EKS Pod 身分識別可讓您在建立叢集的過程中安裝 EKS 附加元件。

若要使用此方法,請先遵循 EKS Pod 身分識別關聯步驟來建立 IAM 角色並設定 EKS Pod 身分識別代理程式。

然後安裝 Amazon CloudWatch 可觀測性 EKS 附加元件。若要安裝附加元件,您可以使用 AWS CLI、Amazon EKS 主控台 CloudFormation或 Terraform。

AWS CLI
使用 AWS CLI 安裝 Amazon CloudWatch 可觀測性 EKS 附加元件

輸入下列命令:使用您的叢集名稱替換 my-cluster-name,再以您的帳戶 ID 替換 111122223333。將 my-role 替換為您在 EKS Pod 身分識別關聯步驟中建立的 IAM 角色。

aws iam attach-role-policy \ --role-name my-role \ --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy aws eks create-addon \ --addon-name amazon-cloudwatch-observability \ --cluster-name my-cluster-name \ --pod-identity-associations serviceAccount=cloudwatch-agent,roleArn=arn:aws:iam::111122223333:role/my-role
Amazon EKS console
使用 Amazon EKS 主控台來新增 Amazon CloudWatch Observability EKS 附加元件
  1. https://console.aws.amazon.com/eks/home#/clusters 開啟 Amazon EKS 主控台。

  2. 在左側導覽窗格中選擇叢集

  3. 選擇要為其設定 Amazon CloudWatch Observability EKS 附加元件的叢集名稱。

  4. 選擇附加元件索引標籤。

  5. 選擇取得更多附加元件

  6. 選取附加元件頁面上,執行下列動作:

    1. Amazon EKS-addons 區段,選取 Amazon CloudWatch 可觀測性核取方塊。

    2. 選擇下一步

  7. 設定選取的附加元件設定頁面上,執行以下操作:

    1. 選取您要使用的版本

    2. 針對附加元件存取權,選取 EKS Pod 身分識別

    3. 如果您沒有設定 IAM 角色,請選擇建立建議的角色,然後選擇下一步,直至到達步驟 3 命名、檢閱和建立。您可以視需要變更角色名稱,否則請選擇建立角色,然後返回附加元件頁面,並選取您剛建立的 IAM 角色。

    4. (選用) 您可以展開選用組態設定。對於衝突解決方法,如果您選取覆寫,就可以使用 Amazon EKS 附加元件的設定來覆寫現有附加元件的一種或多種設定。若未啟用此選項,而且有設定與現有設定發生衝突,則操作會失敗。您可以使用產生的錯誤訊息對此衝突進行疑難排解。在選取此選項之前,請確認 Amazon EKS 附加元件未管理您需要自我管理的設定。

    5. 選擇下一步

  8. 檢閱並新增頁面上,選擇建立。附加元件安裝完成後,您會看到已安裝的附加元件。

CloudFormation
使用 CloudFormation 安裝 Amazon CloudWatch 可觀測性 EKS 附加元件
  1. 首先,執行下列 AWS CLI 命令,將必要的 IAM 政策連接至您的 IAM 角色。將 my-role 替換為您在 EKS Pod 身分識別關聯步驟中建立的角色。

    aws iam attach-role-policy \ --role-name my-role \ --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy
  2. 然後,建立下列資源。將 my-cluster-name 替換為您的叢集名稱,將 111122223333 替換為您的 帳戶 ID,並將 my-role 替換為在 EKS Pod 身分識別關聯步驟中建立的 IAM 角色。如需詳細資訊,請參閱 AWS::EKS::Addon

    { "Resources": { "EKSAddOn": { "Type": "AWS::EKS::Addon", "Properties": { "AddonName": "amazon-cloudwatch-observability", "ClusterName": "my-cluster-name", "PodIdentityAssociations": [ { "ServiceAccount": "cloudwatch-agent", "RoleArn": "arn:aws:iam::111122223333:role/my-role" } ] } } } }
Terraform
使用 Terraform 來安裝 Amazon CloudWatch Observability EKS 附加元件
  1. 使用以下內容。使用您的叢集名稱替換 my-cluster-name、使用您的帳戶 ID 替換 111122223333,然後使用之前步驟建立的 IAM 角色替換 my-service-account-role

    如需詳細資訊,請參閱 Terraform 文件中的資源:aws_eks_addon

  2. resource "aws_iam_role_policy_attachment" "CloudWatchAgentServerPolicy" { policy_arn = "arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy" role = "my-role" } resource "aws_eks_addon" "example" { cluster_name = "my-cluster-name" addon_name = "amazon-cloudwatch-observability" pod_identity_associations { roleArn = "arn:aws:iam::111122223333:role/my-role" serviceAccount = "cloudwatch-agent" } }

選項 2:在工作者節點上使用 IAM 許可安裝

若要使用此方法,請先輸入下列命令,以將 CloudWatchAgentServerPolicy IAM 政策附接至您的工作節點。在此命令中,使用 Kubernetes 工作節點使用的 IAM 角色,來取代 my-worker-node-role

aws iam attach-role-policy \ --role-name my-worker-node-role \ --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy

然後安裝 Amazon CloudWatch 可觀測性 EKS 附加元件。若要安裝附加元件,您可以使用 AWS CLI CloudFormation、 主控台或 Terraform。

AWS CLI
使用 AWS CLI 安裝 Amazon CloudWatch 可觀測性 EKS 附加元件

輸入以下命令。使用您叢集的名稱取代 my-cluster-name

aws eks create-addon --addon-name amazon-cloudwatch-observability --cluster-name my-cluster-name
Amazon EKS console
使用 Amazon EKS 主控台來新增 Amazon CloudWatch Observability EKS 附加元件
  1. https://console.aws.amazon.com/eks/home#/clusters 開啟 Amazon EKS 主控台。

  2. 在左側導覽窗格中選擇叢集

  3. 選擇要為其設定 Amazon CloudWatch Observability EKS 附加元件的叢集名稱。

  4. 選擇附加元件索引標籤。

  5. 選擇取得更多附加元件

  6. 選取附加元件頁面上,執行下列動作:

    1. Amazon EKS-addons 區段,選取 Amazon CloudWatch 可觀測性核取方塊。

    2. 選擇下一步

  7. 設定選取的附加元件設定頁面上,執行以下操作:

    1. 選取您要使用的版本

    2. (選用) 您可以展開選用組態設定。對於衝突解決方法,如果您選取覆寫,就可以使用 Amazon EKS 附加元件的設定來覆寫現有附加元件的一種或多種設定。若未啟用此選項,而且有設定與現有設定發生衝突,則操作會失敗。您可以使用產生的錯誤訊息對此衝突進行疑難排解。在選取此選項之前,請確認 Amazon EKS 附加元件未管理您需要自我管理的設定。

    3. 選擇下一步

  8. 檢閱並新增頁面上,選擇建立。附加元件安裝完成後,您會看到已安裝的附加元件。

CloudFormation
使用 CloudFormation 安裝 Amazon CloudWatch 可觀測性 EKS 附加元件

使用您叢集的名稱取代 my-cluster-name。如需詳細資訊,請參閱 AWS::EKS::Addon

{ "Resources": { "EKSAddOn": { "Type": "AWS::EKS::Addon", "Properties": { "AddonName": "amazon-cloudwatch-observability", "ClusterName": "my-cluster-name" } } } }
Helm chart
使用 amazon-cloudwatch-observability Helm Chart
  1. 您必須安裝 Helm 才能使用此圖表。如需有關安裝 Helm 的詳細資訊,請參閱 Helm 文件

  2. 安裝 Helm 之後,輸入下列命令。將 my-cluster-name 替換為您的叢集名稱,並將 my-cluster-region 替換為叢集執行所在的區域。

    helm repo add aws-observability https://aws-observability.github.io/helm-charts helm repo update aws-observability helm install --wait --create-namespace --namespace amazon-cloudwatch amazon-cloudwatch-observability aws-observability/amazon-cloudwatch-observability --set clusterName=my-cluster-name --set region=my-cluster-region
Terraform
使用 Terraform 來安裝 Amazon CloudWatch Observability EKS 附加元件

使用您叢集的名稱取代 my-cluster-name。如需詳細資訊,請參閱 Resource: aws_eks_addon

resource "aws_eks_addon" "example" { addon_name = "amazon-cloudwatch-observability" cluster_name = "my-cluster-name" }

選項 3:使用 IAM 服務帳戶角色進行安裝 (僅適用於使用附加元件的情況)

只有在您使用 Amazon CloudWatch Observability EKS 附加元件時,此方法才有效。使用此方法之前,請驗證下列先決條件:

  • 您具備的功能性 Amazon EKS 叢集,內含在支援 Container Insights 的其中一個 AWS 區域 中附接的節點。如需支援區域的清單,請參閱 Container Insights

  • 您已安裝 kubectl 並設定叢集。如需詳細資訊,請參閱《Amazon EKS 使用者指南》中的安裝 kubectl

  • 您已安裝 eksctl。如需詳細資訊,請參閱 Amazon EKS 使用者指南中的安裝或更新 eksctl

AWS CLI
使用 AWS CLI 使用 IAM 服務帳戶角色安裝 Amazon CloudWatch 可觀測性 EKS 附加元件
  1. 如果叢集尚未提供 OpenID Connect (OIDC) 供應商,請輸入下列命令建立一個。如需詳細資訊,請參閱 Amazon EKS 使用者指南中的設定要擔任 IAM 角色的 Kubernetes 服務帳戶

    eksctl utils associate-iam-oidc-provider --cluster my-cluster-name --approve
  2. 輸入下列命令以建立 IAM 角色並連結 CloudWatchAgentServerPolicy 政策,然後將代理程式服務帳戶設定為使用 OIDC 擔任該角色。使用您的叢集名稱取代 my-cluster-name,然後用您想要與之關聯的服務帳戶來取代 my-service-account-role。如果角色不存在,eksctl 會為您建立。

    eksctl create iamserviceaccount \ --name cloudwatch-agent \ --namespace amazon-cloudwatch --cluster my-cluster-name \ --role-name my-service-account-role \ --attach-policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy \ --role-only \ --approve
  3. 輸入下列命令來安裝附加元件。使用您的叢集名稱取代 my-cluster-name、使用您的帳戶 ID 取代 111122223333,然後使用之前步驟建立的 IAM 角色取代 my-service-account-role

    aws eks create-addon --addon-name amazon-cloudwatch-observability --cluster-name my-cluster-name --service-account-role-arn arn:aws:iam::111122223333:role/my-service-account-role
Amazon EKS console
透過主控台使用 IAM 服務帳戶角色來安裝 Amazon CloudWatch Observability EKS 附加元件
  1. https://console.aws.amazon.com/eks/home#/clusters 開啟 Amazon EKS 主控台。

  2. 在左側導覽窗格中選擇叢集

  3. 選擇要為其設定 Amazon CloudWatch Observability EKS 附加元件的叢集名稱。

  4. 選擇附加元件索引標籤。

  5. 選擇取得更多附加元件

  6. 選取附加元件頁面上,執行下列動作:

    1. Amazon EKS-addons 區段,選取 Amazon CloudWatch 可觀測性核取方塊。

    2. 選擇下一步

  7. 設定選取的附加元件設定頁面上,執行以下操作:

    1. 選取您要使用的版本

    2. 對於附加元件存取,選取服務帳戶的 IAM 角色 (IRSA)

    3. 附加元件存取方塊中選取 IAM 角色。

    4. (選用) 您可以展開選用組態設定。對於衝突解決方法,如果您選取覆寫,就可以使用 Amazon EKS 附加元件的設定來覆寫現有附加元件的一種或多種設定。若未啟用此選項,而且有設定與現有設定發生衝突,則操作會失敗。您可以使用產生的錯誤訊息對此衝突進行疑難排解。在選取此選項之前,請確認 Amazon EKS 附加元件未管理您需要自我管理的設定。

    5. 選擇下一步

  8. 檢閱並新增頁面上,選擇建立。附加元件安裝完成後,您會看到已安裝的附加元件。

Amazon EKS 混合節點的考量事項

節點層級指標不適用於混合節點,因為 Container Insights 取決於節點層級指標的 EC2 執行個體中繼資料服務 (IMDS) 可用性。叢集、工作負載、Pod 和容器層級指標可用於混合節點。

依照先前章節中的步驟安裝附加元件後,必須更新附加元件資訊清單,以便代理程式可以在混合節點上成功執行。編輯叢集中的 amazoncloudwatchagents 資源新增 RUN_WITH_IRSA 環境變數,以符合下列項目。

kubectl edit amazoncloudwatchagents -n amazon-cloudwatch cloudwatch-agent
apiVersion: v1
       items:
       - apiVersion: cloudwatch.aws.amazon.com/v1alpha1
         kind: AmazonCloudWatchAgent
         metadata:
           ...
           name: cloudwatch-agent
           namespace: amazon-cloudwatch
           ...
         spec:
           ...
           env:
           - name: RUN_WITH_IRSA # <-- Add this
             value: "True" # <-- Add this
           - name: K8S_NODE_NAME
             valueFrom:
               fieldRef:
                 fieldPath: spec.nodeName
                 ...
       

(選用) 額外組態

選擇不收集容器日誌

依預設,附加元件會使用 Fluent Bit,從所有 Pod 中收集容器日誌,然後將日誌傳送至 CloudWatch Logs。如需有關收集哪些日誌的資訊,請參閱 設定 Fluent Bit

注意

附加元件或 Helm Chart 都不會管理叢集中現有的 Fluentd 或 Fluent Bit 資源。您可以在安裝附加元件或 Helm Chart 之前刪除現有的 Fluentd 或 Fluent Bit 資源。或者,若要保留現有設定,並避免讓附加元件或 Helm Chart 同時安裝 Fluent Bit,可以依照本節中的指示將其停用。

若要在使用 Amazon CloudWatch Observability EKS 附加元件時選擇不收集容器日誌,請在建立或更新附加元件時傳遞下列選項:

--configuration-values '{ "containerLogs": { "enabled": false } }'

若要停用容器日誌收集,請在建立或更新附加元件時,使用 Helm Chart 傳遞下列選項:

--set containerLogs.enabled=false

使用自訂 Fluent Bit 組態

從 Amazon CloudWatch Observability EKS 附加元件的 1.7.0 版開始,可以在建立或更新附加元件或 Helm Chart 時修改 Fluent Bit 組態。您可以在附加元件進階組態的 containerLogs 根層級區段中提供自訂 Fluent Bit 組態,或在 Helm Chart 中提供值覆寫。在本節中,您需要在 config 區段 (適用於 Linux) 或 configWindows 區段 (適用於 Windows) 中提供自訂 Fluent Bit 組態。config 會進一步細分為下列子區段:

  • service– 本節提供定義 Fluent Bit 引擎全域行為的 SERVICE 組態。

  • customParsers– 本節提供您希望包含的任何全域 PARSER,能夠取得非結構化日誌項目,並為它們提供結構,使其更容易處理和進一步篩選。

  • extraFiles– 本節可用於提供要包含的其他 Fluent Bit conf 檔案。根據預設,包含以下 3 個 conf 檔案:

    • application-log.conf– 用於將應用程式日誌從叢集傳送至 CloudWatch Logs 中的日誌群組 /aws/containerinsights/my-cluster-name/applicationconf 檔案。

    • dataplane-log.conf– 用於將對應於叢集資料平面元件的日誌 (包括 CRI 日誌、kubelet 日誌、kube-proxy 日誌和 Amazon VPC CNI 日誌) 傳送至 CloudWatch Logs 中的日誌群組 /aws/containerinsights/my-cluster-name/dataplaneconf 檔案。

    • host-log.conf– 用於將日誌從 Linux 上的 /var/log/dmesg/var/log/messages/var/log/secure 以及 Windows 上的系統 winlogs 傳送至 CloudWatch 中的日誌群組 /aws/containerinsights/my-cluster-name/hostconf

注意

即使您只修改子區段中的一個欄位,也請提供這些個別區段的完整組態。我們建議您使用下方的預設組態作為基準,然後進行相應修改,以免停用預設啟用的功能。您可以在修改 Amazon EKS 附加元件的進階組態或者為 Helm Chart 提供值覆寫時,使用下列 YAML 組態。

若要尋找叢集的 config 區段,請參閱 GitHub 上的 aws-observability / helm-charts,並找到與您正在安裝的附加組件或 Helm Chart 版本相對應的版本。然後導覽至 /charts/amazon-cloudwatch-observability/values.yaml,在 containerLogs 下的 fluentBit 區段中找到 config 區段 (適用於 Linux) 和 configWindows 區段 (適用於 Windows)。

例如,您可以在這裡找到 1.7.0 版的預設 Fluent Bit 組態。

當您透過 Amazon EKS 附加元件的進階組態提供此參數時,或當您將其作為 Helm 安裝的值覆寫提供時,建議您提供 config 作為 YAML。請確定 YAML 符合下列結構。

containerLogs: fluentBit: config: service: | ... customParsers: | ... extraFiles: application-log.conf: | ... dataplane-log.conf: | ... host-log.conf: | ...

下列範例 config 會將排清間隔的全域設定變更為 45 秒。即使唯一修改是 Flush 欄位,您仍然必須提供服務子區段的完整 SERVICE 定義。由於此範例未指定其他子區段的覆寫,因此預設值會用於它們。

containerLogs: fluentBit: config: service: | [SERVICE] Flush 45 Grace 30 Log_Level error Daemon off Parsers_File parsers.conf storage.path /var/fluent-bit/state/flb-storage/ storage.sync normal storage.checksum off storage.backlog.mem_limit 5M

下列範例組態包含額外的 Fluent Bit conf 檔案。在此範例中,我們會在 extraFiles 下新增自訂 my-service.conf,除了三個預設的 extraFiles 之外,還會包含它。

containerLogs: fluentBit: config: extraFiles: my-service.conf: | [INPUT] Name tail Tag myservice.* Path /var/log/containers/*myservice*.log DB /var/fluent-bit/state/flb_myservice.db Mem_Buf_Limit 5MB Skip_Long_Lines On Ignore_Older 1d Refresh_Interval 10 [OUTPUT] Name cloudwatch_logs Match myservice.* region ${AWS_REGION} log_group_name /aws/containerinsights/${CLUSTER_NAME}/myservice log_stream_prefix ${HOST_NAME}- auto_create_group true

下一個範例會從 extraFiles 完全移除現有 conf 檔案。這會完全排除 application-log.conf,方法是使用空字串將其覆寫。僅從 extraFiles 省略 application-log.conf 會改為暗示使用預設值,這不是我們要在此範例中嘗試達成的目標。這同樣適用於移除您先前可能已新增至 extraFiles 的任何自訂 conf 檔案。

containerLogs: fluentBit: config: extraFiles: application-log.conf: ""

管理已安裝 Pod 工作負載的 Kubernetes 容差

從 Amazon CloudWatch Observability EKS 附加元件的 1.7.0 版開始,附加元件和 Helm Chart 預設會設定 Kubernetes 容差,以容忍附加元件或 Helm Chart 安裝之 Pod 工作負載上的所有污點。這可確保 CloudWatch 代理程式和 Fluent Bit 等常駐程式集預設可在叢集中的所有節點上排程 Pod。如需關於容差和污點的詳細資訊,請參閱 Kubernetes 文件中的污點和容差

附加元件或 Helm Chart 設定的預設容差如下所示:

tolerations: - operator: Exists

您可以在使用附加元件進階組態時,或使用值覆寫來安裝或升級 Helm Chart 時,在根層級設定 tolerations 欄位,以覆寫預設容差。範例看起來與以下內容相似:

tolerations: - key: "key1" operator: "Exists" effect: "NoSchedule"

若要完全省略容差,可以使用如下所示的組態:

tolerations: []

容差的任何變更都會套用至附加元件或 Helm Chart 安裝的所有 Pod 工作負載。

選擇退出加速運算指標收集

根據預設,具有增強可觀測性的 Container Insights 會收集加速運算監控的指標,包括 NVIDIA GPU 指標、 AWS Trainium 和 AWS Inferentia 的 AWS Neuron 指標,以及 AWS Elastic Fabric Adapter (EFA) 指標。

根據預設,從 EKS 附加元件版本 v1.3.0-eksbuild.1 或者 Helm Chart 和 CloudWatch 代理程式版本 1.300034.0 開始,系統將收集來自 Amazon EKS 工作負載的 NVIDIA GPU 指標。如需收集之指標和先決條件的清單,請參閱NVIDIA GPU 指標

AWS 根據預設,會收集 AWS Trainium 和 AWS Inferentia 加速器的 Neuron 指標,其開頭為 EKS 附加元件或 Helm Chart v1.5.0-eksbuild.1的版本,以及 CloudWatch 代理程式1.300036.0的版本。如需收集之指標和先決條件的清單,請參閱AWS Trainium 和 AWS Inferentia 的 AWS Neuron 指標

AWS 根據預設,會從 Amazon EKS 叢集上的 Linux 節點收集 Elastic Fabric Adapter (EFA) 指標,從 EKS 附加元件v1.5.2-eksbuild.1的版本或 Helm Chart 和 CloudWatch 代理程式1.300037.0的版本開始。如需收集之指標和先決條件的清單,請參閱AWS Elastic Fabric Adapter (EFA) 指標

您可以選擇不收集這些指標,方法是將 CloudWatch 代理程式設定檔中的 accelerated_compute_metrics 欄位設定為 false。此欄位位於 CloudWatch 設定檔 metrics_collected 區段的 kubernetes 區段中。以下是選擇退出組態的範例。如需如何使用自訂 CloudWatch 代理程式組態的詳細資訊,請參閱以下章節:使用自訂 CloudWatch 代理程式組態

{ "logs": { "metrics_collected": { "kubernetes": { "enhanced_container_insights": true, "accelerated_compute_metrics": false } } } }

使用自訂 CloudWatch 代理程式組態

若要使用 CloudWatch 代理程式收集其他指標、日誌或追蹤,您可指定自訂組態,同時保持啟用 Container Insights 和 CloudWatch Application Signals。因此,請在建立或更新 EKS 附加元件或 Helm Chart 時使用的進階組態的代理程式金鑰下,將 CloudWatch 代理程式設定檔內嵌在組態金鑰中。以下表示未提供任何其他組態時的預設代理程式組態。

重要

您使用其他組態設定提供的任何自訂組態會覆寫代理程式使用的預設組態。請注意不要意外停用預設啟用的功能,例如具有增強可觀測性的 Container Insights 和 CloudWatch Application Signals。在需要提供自訂代理程式組態的案例中,建議您使用下列預設組態作為基準,然後進行相應的修改。

  • 使用 Amazon CloudWatch Observability EKS 附加元件時

    --configuration-values '{ "agent": { "config": { "logs": { "metrics_collected": { "application_signals": {}, "kubernetes": { "enhanced_container_insights": true } } }, "traces": { "traces_collected": { "application_signals": {} } } } } }'
  • 使用 Helm Chart 時

    --set agent.config='{ "logs": { "metrics_collected": { "application_signals": {}, "kubernetes": { "enhanced_container_insights": true } } }, "traces": { "traces_collected": { "application_signals": {} } } }'

下列範例顯示 Windows 上 CloudWatch 代理程式的預設代理程式組態。Windows 上的 CloudWatch 代理程式不支援自訂組態。

{ "logs": { "metrics_collected": { "kubernetes": { "enhanced_container_insights": true }, } } }

管理許可 Webhook TLS 憑證

Amazon CloudWatch Observability EKS 附加元件和 Helm Chart 會利用 Kubernetes 許可 Webhook 來驗證和改變 AmazonCloudWatchAgentInstrumentation 自訂資源 (CR) 請求,以及叢集上的 Kubernetes Pod 請求 (如果啟用了 CloudWatch Application Signals)。在 Kubernetes 中,Webhook 需要 API 伺服器設定為信任的 TLS 憑證,以確保安全通訊。

根據預設,Amazon CloudWatch Observability EKS 附加元件和 Helm Chart 會自動產生由此 CA 簽署的自我簽署 CA 和 TLS 憑證,以保護 API 伺服器與 Webhook 伺服器之間的通訊安全。此自動產生的憑證預設有效期為 10 年,且不會在到期時自動續訂。此外,每次升級或重新安裝附加元件或 Helm Chart 時,都會重新產生 CA 服務包和憑證,進而重設到期日。如果您想要變更自動產生的憑證預設到期日,可以在建立或更新附加元件時使用下列其他組態。將 expiry-in-days 取代為您想要的到期時間 (以天為單位)。

  • 將此用於 Amazon CloudWatch Observability EKS 附加元件

    --configuration-values '{ "admissionWebhooks": { "autoGenerateCert": { "expiryDays": expiry-in-days } } }'
  • 將此用於 Helm Chart

    --set admissionWebhooks.autoGenerateCert.expiryDays=expiry-in-days

為了獲得更安全且功能豐富的憑證授權機構解決方案,附加元件可選擇支援 cert-manager,這是在 Kubernetes 中廣泛採用的 TLS 憑證管理解決方案,它可簡化獲取、更新、管理和使用這些憑證的程序。它可確保憑證有效且最新,並嘗試在到期前的設定時間更新憑證。cert-manager 也有助於從各種支援來源 (包括 AWS Certificate Manager 私有憑證授權機構) 發行憑證。

建議您檢閱叢集上的 TLS 憑證管理最佳實務,並建議您選擇使用適合生產環境的 cert-manager。請注意,如果您選擇啟用 cert-manager 來管理許可 Webhook TLS 憑證,則必須先在 Amazon EKS 叢集上預先安裝 cert-manager,然後再安裝 Amazon CloudWatch Observability EKS 附加元件或 Helm Chart。請參閱 cert-manager 文件以進一步了解可用的安裝選項。安裝之後,您可以使用下列額外組態,選擇使用 cert-manager 來管理許可 Webhook TLS 憑證。

  • 如果使用 Amazon CloudWatch Observability EKS 附加元件

    --configuration-values '{ "admissionWebhooks": { "certManager": { "enabled": true } } }'
  • 如果使用 Helm Chart

    --set admissionWebhooks.certManager.enabled=true
--configuration-values '{ "admissionWebhooks": { "certManager": { "enabled": true } } }'

本節中討論的進階組態預設會使用自我簽署發行者。

收集 Amazon EBS 磁碟區 ID

若您想要在效能日誌中收集 Amazon EBS 磁碟區 ID,必須將另一項政策新增至附接到工作節點或服務帳戶的 IAM 角色。新增以下內容作為內嵌政策。如需詳細資訊,請參閱新增和移除 IAM 身分許可

JSON
{ "Version":"2012-10-17", "Statement": [ { "Action": [ "ec2:DescribeVolumes" ], "Resource": "*", "Effect": "Allow" } ] }

收集 Java Management Extensions (JMX) 指標

CloudWatch 代理程式支援在 Amazon EKS 上收集 Java Management Extensions (JMX) 指標。這可讓您從在 Amazon EKS 叢集上執行的 Java 應用程式收集其他指標,以深入了解效能、記憶體用量、流量和其他關鍵指標。如需詳細資訊,請參閱收集 Java Management Extensions (JMX) 指標

啟用 Kueue 指標

從 CloudWatch Observability EKS 附加元件的版本 v2.4.0-eksbuild.1 開始,適用於 Amazon EKS 的 Container Insights 支援從 Amazon EKS 叢集收集 Kueue 指標。如需這些指標的詳細資訊,請參閱 Kueue 指標

如果您使用的是 Amazon SageMaker AI Hyperpod 任務控管 EKS 附加元件,您可以略過先決條件區段中的步驟,並僅遵循 中的步驟啟用組態旗標

先決條件

在 Amazon EKS 叢集中安裝 Kueue 之前,請在資訊清單檔案中進行下列更新:

  1. 為 Kueue 啟用選用的叢集佇列資源指標。為此,請在 kueue-system ConfigMap 中修改內嵌 controller_manager_config.yaml。在 metrics 區段中,新增行 enableClusterQueueResources: true 或取消對其的註解。

    apiVersion: v1 data: controller_manager_config.yaml: | apiVersion: config.kueue.x-k8s.io/v1beta1 kind: Configuration health: healthProbeBindAddress: :8081 metrics: bindAddress: :8080 enableClusterQueueResources: true <-- ADD/UNCOMMENT THIS LINE
  2. 根據預設,所有 k8s 服務在叢集範圍內皆可使用。Kueue 會建立公開指標的服務 kueue-controller-manager-metrics-service。若要防止重複觀測指標,請修改此服務以僅允許從相同節點存取指標服務。為此,請將行 internalTrafficPolicy: Local 新增至 kueue-controller-manager-metrics-service 定義。

    apiVersion: v1 kind: Service metadata: labels: ... name: kueue-controller-manager-metrics-service namespace: kueue-system spec: ports: - name: https port: 8443 protocol: TCP targetPort: https internalTrafficPolicy: Local <-- ADD THIS LINE selector: control-plane: controller-manager
  3. 最後,kueue-controller-manager Pod 會建立 kube-rbac-proxy 容器。此容器目前的記錄詳盡程度較高,當指標抓取器存取 kueue-controller-manager-metrics-service 時,會導致該容器記錄叢集的承載字符。建議您降低記錄詳盡程度。Kueue 分發的資訊清單中的預設值為 10,建議您將其變更為 0。

    apiVersion: apps/v1 kind: Deployment metadata: labels: ... name: kueue-controller-manager namespace: kueue-system spec: ... template: ... spec: containers: ... - args: - --secure-listen-address=0.0.0.0:8443 - --upstream=http://127.0.0.1:8080/ - --logtostderr=true - --v=0 <-- CHANGE v=10 TO v=0 image: gcr.io/kubebuilder/kube-rbac-proxy:v0.8.0 name: kube-rbac-proxy ...

啟用組態旗標

若要啟用 Kueue 指標,必須在附加元件額外組態中啟用 kueue_container_insights。您可以使用 AWS CLI 來設定 EKS 可觀測性附加元件,或使用 Amazon EKS 主控台來執行此操作。

使用下列其中一種方法成功安裝 EKS 可觀測性附加元件後,您可以在 HyperPod 主控台儀表板索引標籤下檢視 Amazon EKS 叢集指標。

AWS CLI
使用 啟用 Kueue 指標 AWS CLI
  • 輸入下列 AWS CLI 命令來安裝附加元件。

    aws eks create-addon --cluster-name cluster-name --addon-name amazon-cloudwatch-observability --configuration-values "configuration_json_file"

    以下為包含組態值的 JSON 檔案範例。

    { "agent": { "config": { "logs": { "metrics_collected": { "kubernetes": { "kueue_container_insights": true, "enhanced_container_insights": true }, "application_signals": { } } }, "traces": { "traces_collected": { "application_signals": { } } } }, }, }
Amazon EKS console
使用 Amazon EKS 主控台啟用 Kueue 指標
  1. 在以下網址開啟 Amazon EKS 主控台:https://console.aws.amazon.com/eks/home#/clusters

  2. 選取叢集的名稱。

  3. 選擇附加元件

  4. 在清單中尋找 Amazon CloudWatch 可觀測性附加元件並進行安裝。執行此操作時,選擇選用組態,並包含下列 JSON 組態值。

    { "agent": { "config": { "logs": { "metrics_collected": { "kubernetes": { "kueue_container_insights": true, "enhanced_container_insights": true }, "application_signals": { } } }, "traces": { "traces_collected": { "application_signals": { } } } }, }, }

附加 OpenTelemetry 收集器設定檔

CloudWatch 代理程式支援補充 OpenTelemetry 收集器設定檔及其自己的設定檔。此功能可讓您透過 CloudWatch 代理程式組態,使用 CloudWatch Application Signals 或 Container Insights 等 CloudWatch 代理程式功能,並使用單一代理程式加入現有的 OpenTelemetry 收集器組態。

為避免與 CloudWatch 代理程式自動建立的管道發生合併衝突,建議您在 OpenTelemetry 收集器組態中的每個元件和管道後方,新增自訂字尾。如此可防止矛盾與合併衝突。

  • 如果使用 Amazon CloudWatch Observability EKS 附加元件

    --configuration-values file://values.yaml

    --configuration-values ' agent: otelConfig: receivers: otlp/custom-suffix: protocols: http: {} exporters: awscloudwatchlogs/custom-suffix: log_group_name: "test-group" log_stream_name: "test-stream" service: pipelines: logs/custom-suffix: receivers: [otlp/custom-suffix] exporters: [awscloudwatchlogs/custom-suffix] '
  • 如果使用 Helm Chart

    --set agent.otelConfig=' receivers: otlp/custom-suffix: protocols: http: {} exporters: awscloudwatchlogs/custom-suffix: log_group_name: "test-group" log_stream_name: "test-stream" service: pipelines: logs/custom-suffix: receivers: [otlp/custom-suffix] exporters: [awscloudwatchlogs/custom-suffix] '

透過 Amazon EKS 叢集的 Application Signals 啟用 APM

根據預設,安裝 CloudWatch 可觀測性 EKS 附加元件 (V5.0.0 或更高版本) 或 Helm Chart 時,透過 Application Signals 啟用 OpenTelemetry (OTEL) 型應用程式效能監控 (APM)。您可以使用 Amazon EKS 附加元件的進階組態或使用 Helm Chart 覆寫值,進一步自訂具體設定。

注意

如果您使用任何 OpenTelemetry (OTEL) 型 APM 解決方案,啟用 Application Signals 會影響您現有的可觀測性設定。在繼續之前,請先檢閱您目前的實作。若要在升級至 V5.0.0 或更新版本後維護現有的 APM 設定,請參閱 選擇不接收 Application Signals

Application Signals 自動監視器

CloudWatch Observability Amazon EKS 附加元件和 Helm Chart 的 5.0.0 版推出新功能。您現在可以透過自動監視器組態,自動為 EKS 叢集中的所有或特定服務工作負載啟用 Application Signals。可以在進階組態 applicationSignals 區段下的 manager 區段中,指定下列 autoMonitor 設定。

  • monitorAllServices:一個布林值旗標,用於啟用 (true) 或停用 (false) 自動監視器對所有服務工作負載的監控。預設為 true。啟用此旗標將確保叢集中映射到 Kubernetes 服務的所有 Kubernetes 工作負載 (Deployments、DaemonSets 和 StatefulSets),在第一次啟動時 (或針對現有工作負載重新啟動時) 將在自動啟用 Application Signals 的範圍內。系統預設會排除 kube-systemamazon-cloudwatch 命名空間中的工作負載。

  • languages:一個字串清單,指定 Application Signals 在 monitorAllServices 啟用時嘗試自動檢測服務使用的語言集。預設為所有支援的語言

  • restartPods:一個布林值旗標,控制工作負載在組態變更後是否重新啟動。預設為 false。將此標記設為 true 可控制自動監視器範圍內的 Kubernetes 工作負載是否會在儲存組態變更時自動重新啟動。任何影響 Kubernetes 工作負載中 Pod 重啟的設定 (例如 updateStrategy) 都將被納入考量。請考慮重新啟動可能導致服務停機。

  • customSelector:為自動監視器選取特定 Kubernetes 命名空間或工作負載的設定。

    • java:指定自動使用 Java 檢測的工作負載

    • python:指定自動使用 Python 檢測的工作負載

    • nodejs:指定自動使用 Node.js 檢測的工作負載

    • dotnet:指定自動使用 .NET 檢測的工作負載

    對於上述每種語言,可以設定下列欄位。

    • namespaces:指定要選取之命名空間的字串清單。預設為空白清單,即 []

    • deployments:指定要選取之部署的字串清單。以 namespace/deployment 格式指定。預設為空白清單,即 []

    • daemonsets:指定要選取之常駐程式集的字串清單。以 namespace/daemonset 格式指定。預設為空白清單,即 []

    • statefulsets:指定要選取之狀態集的字串清單。以 namespace/statefulset 格式指定。預設為空白清單,即 []

  • exclude:從自動監視器排除特定 Kubernetes 命名空間或工作負載的設定。當同個工作負載也在 monitorAllServicescustomSelector 的範圍內時,排除工作負載優先。

    • java:指定要排除在外,不自動使用 Java 檢測的工作負載

    • python:指定要排除在外,不自動使用 Python 檢測的工作負載

    • nodejs:指定要排除在外,不自動使用 Node.js 檢測的工作負載

    • dotnet:指定要排除在外,不自動使用 .NET 檢測的工作負載

    對於上述每種語言,可以設定下列欄位。

    • namespaces:指定要排除之命名空間的字串清單。預設為空白清單,即 []

    • deployments:指定要排除之部署的字串清單。以 namespace/deployment 格式指定。預設為空白清單,即 []

    • daemonsets:指定要排除之常駐程式集的字串清單。以 namespace/daemonset 格式指定。預設為空白清單,即 []

    • statefulsets:指定要排除之狀態集的字串清單。以 namespace/statefulset 格式指定。預設為空白清單,即 []

以下是為叢集上的所有現有和新服務工作負載自動啟用 Application Signals 的組態範例。

manager: applicationSignals: autoMonitor: monitorAllServices: true restartPods: true

以下是為叢集上已啟動的任何新服務工作負載,以及任何明確將重新啟動的現有服務工作負載自動啟用 Application Signals 的組態範例。

manager: applicationSignals: autoMonitor: monitorAllServices: true

以下是使用 Java 為 pet-warehouse 命名空間中某個工作負載對應的所有現有和新 Pod 自動啟用 Application Signals 的組態範例。

manager: applicationSignals: autoMonitor: restartPods: true customSelector: java: namespaces: ["pet-warehouse"]

以下是使用 Python 為叢集上的所有現有和新服務工作負載 (pet-clinic 部署除外) 自動啟用 Application Signals 的組態範例。

manager: applicationSignals: autoMonitor: monitorAllServices: true languages: ["python"] restartPods: true exclude: python: deployments: ["pet-warehouse/pet-clinic"]

以下是使用 Java 為叢集中的所有服務工作負載 (python-apps 命名空間中的服務工作負載除外),以及使用 Python 特別為 python-apps 命名空間中的 sample-python-app 部署自動啟用 Application Signals 的組態範例。

manager: applicationSignals: autoMonitor: monitorAllServices: true languages: ["java"] restartPods: true customSelector: python: deployments: ["python-apps/sample-python-app"] exclude: java: namespaces: ["python-apps"]

Amazon CloudWatch Observability EKS 附加元件或 Helm Chart 疑難排解

可使用以下資訊來協助對 Amazon CloudWatch Observability EKS 附加元件或 Helm Chart 問題進行疑難排解

更新和刪除 Amazon CloudWatch Observability EKS 附加元件或 Helm Chart

如需有關更新或刪除 Amazon CloudWatch Observability EKS 附加元件的相關指示,請參閱管理 Amazon EKS 附加元件。使用 amazon-cloudwatch-observability 作為附加元件的名稱。

如要刪除叢集中的 Helm Chart,請輸入以下命令。

helm delete amazon-cloudwatch-observability -n amazon-cloudwatch --wait

確認 Amazon CloudWatch Observability EKS 附加元件或 Helm Chart 使用的 CloudWatch 代理程式版本

Amazon CloudWatch Observability EKS 附加元件和 Helm Chart 會安裝一種 AmazonCloudWatchAgent 類自訂資源,它可控制叢集上 CloudWatch 代理程式常駐程式集的行為,包括所使用的 CloudWatch 代理程式版本。可以透過輸入下列命令,取得叢集 u 上安裝的所有 AmazonCloudWatchAgent 自訂資源清單:

kubectl get amazoncloudwatchagent -A

在此命令的輸出中,應該可以檢查 CloudWatch 代理程式版本。或者,您也可以描述 amazoncloudwatchagent 資源或叢集上執行的其中一個 cloudwatch-agent-* Pod,以檢查正在使用的映像。

管理附加元件或 Helm Chart 時處理 ConfigurationConflict

當您安裝或更新 Amazon CloudWatch Observability EKS 附加元件時,如果注意到現有資源導致的失敗,很可能是因為您已經在叢集上安裝 CloudWatch 代理程式及其關聯元件,例如 ServiceAccount、ClusterRole 和 ClusterRoleBinding。

附加元件顯示的錯誤將包含 Conflicts found when trying to apply. Will not continue due to resolve conflicts mode

Helm Chart 顯示的錯誤將類似於 Error: INSTALLATION FAILED: Unable to continue with install and invalid ownership metadata.

當附加元件或 Helm Chart 嘗試安裝 CloudWatch 代理程式及其相關元件時,如果偵測到內容有任何變更,則預設情況下,安裝或更新會失敗,以避免覆寫叢集上資源的狀態。

如果您嘗試上載 Amazon CloudWatch Observability EKS 附加元件,但發現此失敗,建議刪除先前安裝在叢集上的現有 CloudWatch 代理程式設定,然後再安裝 EKS 附加元件或 Helm Chart。請務必備份您對原始 CloudWatch 代理程式設定所做的任何自訂設定 (例如自訂代理程式組態),並在下次安裝或更新附加元件時將這些自訂設定提供給附加元件或 Helm Chart。如果之前已安裝 CloudWatch 代理程式以登入 Container Insights,請參閱 刪除 Container Insights 的 CloudWatch 代理程式和 Fluent Bit 以取得詳細資訊。

或者,附加元件也支援衝突解決組態選項,該選項可指定 OVERWRITE。您可以使用此選項覆寫叢集上的衝突來繼續安裝或更新附加元件。如果您使用 Amazon EKS 主控台,則在建立或更新附加元件時選擇可選組態設定,可找到衝突解決方法。如果您使用的是 AWS CLI,您可以將 --resolve-conflicts OVERWRITE 提供給命令,以建立或更新附加元件。

選擇不接收 Application Signals

在 CloudWatch 主控台或使用 SDK 微調您的服務監控偏好設定。

對於 5.0.0 之前的版本,若要停用 Application Signals 自動監控,請遵循下列程序:

使用 CLI 或 SDK

下列組態可以套用為 EKS 附加元件的進階組態,或在使用 Helm Chart 時作為值覆寫。

{ "manager": { "applicationSignals": { "autoMonitor": { "monitorAllServices": false } } } }

重新啟動您的 服務,以使變更生效。

使用主控台

透過 https://console.aws.amazon.com/cloudwatch/ 開啟 CloudWatch 主控台。

  1. 在導覽窗格的 Application Signals (APM) 下,選擇服務

  2. 選擇啟用 Application Signals 以檢視啟用頁面。

  3. 針對您不想監控的每個服務,清除自動監控核取方塊。

  4. 重新啟動您的 服務,以使變更生效。