View a markdown version of this page

Amazon EKS 上 OTel Container Insights 的進階組態 - Amazon CloudWatch

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

Amazon EKS 上 OTel Container Insights 的進階組態

本主題涵蓋 Amazon EKS 上 OTel Container Insights 的進階組態案例。使用這些組態來自訂指標收集、篩選日誌、跨帳戶收集遙測、新增自訂維度,以及調整大型叢集的資源配置。

先決條件

設定進階設定之前,請確認您符合下列要求。

  • 在 Amazon EKS 叢集上安裝並處於 ACTIVE 狀態的 OTel Container Insights

  • 執行 Kubernetes 1.28 版或更新版本的 Amazon EKS 叢集

  • AWS CLI 2.15.0 版或更新版本

  • kubectl 設定為與您的目標叢集通訊

  • IAM 許可:eks:UpdateAddoneks:DescribeAddoniam:AttachRolePolicy(跨帳戶組態需要)

一般組態模式

所有進階組態都遵循相同的模式。您可以使用 aws eks update-addon命令將 JSON 組態傳遞至amazon-cloudwatch-observability附加元件。

aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values 'JSON-configuration' \ --resolve-conflicts OVERWRITE
重要

--resolve-conflicts OVERWRITE 旗標會取代任何現有的附加元件組態。若要保留現有的設定,請先將它們與您的新組態合併,再執行 命令。

日誌篩選

您可以透過排除符合特定條件的日誌來降低 CloudWatch Logs 成本。在代理程式將日誌傳送至 CloudWatch 之前,使用日誌篩選來捨棄偵錯層級或詳細日誌。

設定日誌篩選
  1. 執行下列命令,以日誌篩選條件組態更新附加元件。使用 Amazon EKS 叢集的名稱取代 cluster-name

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{ "otelContainerInsights": { "enabled": true }, "agent": { "config": { "logs": { "metrics_collected": { "kubernetes": { "enhanced_container_insights": true } }, "exclude_filters": [ { "type": "log_level_filter", "log_level": "DEBUG" } ] } } } }' \ --resolve-conflicts OVERWRITE
  2. 確認附加元件狀態在更新ACTIVE之後。

    aws eks describe-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text

exclude_filters 組態會移除符合指定日誌層級的日誌項目,然後再將它們傳送到 CloudWatch Logs。這可減少您的日誌擷取量和相關聯的成本。

多帳戶集合

您可以透過設定跨帳戶 IAM 角色假設,將遙測從工作負載帳戶傳送至中央監控帳戶。此方法可讓您單一檢視來自不同 AWS 帳戶中多個 Amazon EKS 叢集的指標和日誌。

設定多帳戶集合

在監控帳戶中建立跨帳戶角色
  1. 在中央監控帳戶中,建立具有信任政策的 IAM 角色,允許工作負載帳戶擔任該角色。將 workload-account-id 取代為工作負載 AWS 帳戶的帳戶 ID。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::workload-account-id:root" }, "Action": "sts:AssumeRole" } ] }
  2. CloudWatchAgentServerPolicy受管政策連接至跨帳戶角色。

設定跨帳戶交付的附加元件
  1. 在工作負載帳戶中,更新附加元件以擔任跨帳戶角色。將 cluster-name 取代為 Amazon EKS 叢集的名稱,並將 monitoring-account-id 取代為中央監控 AWS 帳戶的帳戶 ID。

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{ "otelContainerInsights": { "enabled": true }, "agent": { "config": { "credentials": { "role_arn": "arn:aws:iam::monitoring-account-id:role/CrossAccountCWObservabilityRole" } } } }' \ --resolve-conflicts OVERWRITE
  2. 確認附加元件狀態在更新ACTIVE之後。

    aws eks describe-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text

自訂指標維度

您可以將衍生自 Kubernetes 標籤的自訂維度新增至 Container Insights 指標。自訂維度可讓您更精細地篩選和分組指標,例如依團隊、環境或應用程式層。

從 Kubernetes 標籤新增自訂維度
  1. 執行下列命令來設定自訂維度。將 cluster-name 取代為 Amazon EKS 叢集的名稱,並將 label-key 取代為 Kubernetes 標籤,以用作維度。

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{ "otelContainerInsights": { "enabled": true }, "agent": { "config": { "logs": { "metrics_collected": { "kubernetes": { "enhanced_container_insights": true, "metric_dimensions": { "custom_dimensions": ["label-key"] } } } } } } }' \ --resolve-conflicts OVERWRITE
  2. 確認附加元件狀態在更新ACTIVE之後。

    aws eks describe-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text

組態生效後,指定的 Kubernetes 標籤會在 CloudWatch 中的 Container Insights 指標上顯示為維度。

大型叢集的資源調校

對於大型叢集,您可能需要提高 CloudWatch 代理程式 DaemonSet 的 CPU 和記憶體限制。預設資源配置適用於小型叢集,但較大的叢集會產生更多遙測資料,並需要額外的客服人員資源。

下表根據叢集大小提供調整大小準則。

叢集大小 CPU 請求 CPU 限制 記憶體請求 Memory limit (記憶體限制)
小型 (20 個節點或更少) 100 公尺 200 m 128Mi 256Mi
中型 (21–100 個節點) 200 m 400 公尺 256Mi 512Mi
大型 (100 個以上的節點) 300 公尺 500 公尺 384Mi 768Mi
超大 (500 個以上的節點) 500 公尺 1000 m 512Mi 1Gi
設定代理程式 DaemonSet 的資源限制
  1. 執行下列命令來設定資源請求和限制。將 cluster-name 取代為 Amazon EKS 叢集的名稱,並將資源值取代為上表中的值。

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{ "otelContainerInsights": { "enabled": true }, "agent": { "resources": { "requests": { "cpu": "cpu-request", "memory": "memory-request" }, "limits": { "cpu": "cpu-limit", "memory": "memory-limit" } } } }' \ --resolve-conflicts OVERWRITE
  2. 確認附加元件狀態為 ,ACTIVE且代理程式 Pod 會以新的資源配置重新啟動。

    aws eks describe-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text
  3. 確認代理程式 Pod 以新的資源限制執行。

    kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent -o jsonpath='{.items[0].spec.containers[0].resources}'

驗證組態變更

套用任何進階組態後,請確認附加元件運作狀態良好,且代理程式 Pod 已成功重新啟動。

驗證組態變更
  1. 檢查附加元件狀態是否為 ACTIVE。使用 Amazon EKS 叢集的名稱取代 cluster-name

    aws eks describe-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --query "addon.{Status:status,ConfigValues:configurationValues}" \ --output table
  2. 確認代理程式 Pod 已重新啟動且處於 Running 狀態。

    kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent

    所有代理程式 Pod 必須顯示最近重新啟動時間Running的狀態。

疑難排解

使用以下指引來解決進階組態的常見問題。

ConfigurationConflict 的附加元件更新失敗

徵狀:aws eks update-addon命令會傳回ConfigurationConflict錯誤。

原因:您提供的 JSON 組態格式不正確或包含無效的金鑰。

解決方案:完成下列步驟以解決此問題。

  1. 使用 JSON linter 或執行下列命令來驗證您的 JSON 組態。

    echo 'your-json-configuration' | python3 -m json.tool
  2. 確認所有組態金鑰對amazon-cloudwatch-observability附加元件都有效。

  3. 使用更正的 JSON 重試更新。

監控帳戶中未出現的跨帳戶指標

徵狀:設定多帳戶集合之後,指標不會出現在中央監控帳戶中。

原因:跨帳戶 IAM 角色信任政策或許可不正確。

解決方案:完成下列步驟以解決此問題。

  1. 確認監控帳戶中的信任政策允許工作負載帳戶擔任該角色。

  2. 確認跨帳戶角色已連接 CloudWatchAgentServerPolicy受管政策。

  3. 檢查代理程式日誌是否有AssumeRole錯誤。

    kubectl logs -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent --tail=100 | grep -i "AssumeRole\|AccessDenied"
  4. 確認工作負載帳戶中的代理程式 IAM 角色具有跨帳戶角色 ARN 的sts:AssumeRole許可。