本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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:UpdateAddon、eks:DescribeAddon和iam:AttachRolePolicy(跨帳戶組態需要)
一般組態模式
所有進階組態都遵循相同的模式。您可以使用 aws eks update-addon命令將 JSON 組態傳遞至amazon-cloudwatch-observability附加元件。
aws eks update-addon \ --cluster-namecluster-name\ --addon-name amazon-cloudwatch-observability \ --configuration-values 'JSON-configuration' \ --resolve-conflicts OVERWRITE
重要
--resolve-conflicts OVERWRITE 旗標會取代任何現有的附加元件組態。若要保留現有的設定,請先將它們與您的新組態合併,再執行 命令。
日誌篩選
您可以透過排除符合特定條件的日誌來降低 CloudWatch Logs 成本。在代理程式將日誌傳送至 CloudWatch 之前,使用日誌篩選來捨棄偵錯層級或詳細日誌。
設定日誌篩選
-
執行下列命令,以日誌篩選條件組態更新附加元件。使用 Amazon EKS 叢集的名稱取代
cluster-name。aws eks update-addon \ --cluster-namecluster-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 -
確認附加元件狀態在更新
ACTIVE之後。aws eks describe-addon \ --cluster-namecluster-name\ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text
exclude_filters 組態會移除符合指定日誌層級的日誌項目,然後再將它們傳送到 CloudWatch Logs。這可減少您的日誌擷取量和相關聯的成本。
多帳戶集合
您可以透過設定跨帳戶 IAM 角色假設,將遙測從工作負載帳戶傳送至中央監控帳戶。此方法可讓您單一檢視來自不同 AWS 帳戶中多個 Amazon EKS 叢集的指標和日誌。
設定多帳戶集合
在監控帳戶中建立跨帳戶角色
-
在中央監控帳戶中,建立具有信任政策的 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" } ] } -
將
CloudWatchAgentServerPolicy受管政策連接至跨帳戶角色。
設定跨帳戶交付的附加元件
-
在工作負載帳戶中,更新附加元件以擔任跨帳戶角色。將
cluster-name取代為 Amazon EKS 叢集的名稱,並將monitoring-account-id取代為中央監控 AWS 帳戶的帳戶 ID。aws eks update-addon \ --cluster-namecluster-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 -
確認附加元件狀態在更新
ACTIVE之後。aws eks describe-addon \ --cluster-namecluster-name\ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text
自訂指標維度
您可以將衍生自 Kubernetes 標籤的自訂維度新增至 Container Insights 指標。自訂維度可讓您更精細地篩選和分組指標,例如依團隊、環境或應用程式層。
從 Kubernetes 標籤新增自訂維度
-
執行下列命令來設定自訂維度。將
cluster-name取代為 Amazon EKS 叢集的名稱,並將label-key取代為 Kubernetes 標籤,以用作維度。aws eks update-addon \ --cluster-namecluster-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 -
確認附加元件狀態在更新
ACTIVE之後。aws eks describe-addon \ --cluster-namecluster-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 的資源限制
-
執行下列命令來設定資源請求和限制。將
cluster-name取代為 Amazon EKS 叢集的名稱,並將資源值取代為上表中的值。aws eks update-addon \ --cluster-namecluster-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 -
確認附加元件狀態為 ,
ACTIVE且代理程式 Pod 會以新的資源配置重新啟動。aws eks describe-addon \ --cluster-namecluster-name\ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text -
確認代理程式 Pod 以新的資源限制執行。
kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent -o jsonpath='{.items[0].spec.containers[0].resources}'
驗證組態變更
套用任何進階組態後,請確認附加元件運作狀態良好,且代理程式 Pod 已成功重新啟動。
驗證組態變更
-
檢查附加元件狀態是否為
ACTIVE。使用 Amazon EKS 叢集的名稱取代cluster-name。aws eks describe-addon \ --cluster-namecluster-name\ --addon-name amazon-cloudwatch-observability \ --query "addon.{Status:status,ConfigValues:configurationValues}" \ --output table -
確認代理程式 Pod 已重新啟動且處於
Running狀態。kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent所有代理程式 Pod 必須顯示最近重新啟動時間
Running的狀態。
疑難排解
使用以下指引來解決進階組態的常見問題。
ConfigurationConflict 的附加元件更新失敗
徵狀:aws eks update-addon命令會傳回ConfigurationConflict錯誤。
原因:您提供的 JSON 組態格式不正確或包含無效的金鑰。
解決方案:完成下列步驟以解決此問題。
-
使用 JSON linter 或執行下列命令來驗證您的 JSON 組態。
echo 'your-json-configuration' | python3 -m json.tool -
確認所有組態金鑰對
amazon-cloudwatch-observability附加元件都有效。 -
使用更正的 JSON 重試更新。
監控帳戶中未出現的跨帳戶指標
徵狀:設定多帳戶集合之後,指標不會出現在中央監控帳戶中。
原因:跨帳戶 IAM 角色信任政策或許可不正確。
解決方案:完成下列步驟以解決此問題。
-
確認監控帳戶中的信任政策允許工作負載帳戶擔任該角色。
-
確認跨帳戶角色已連接
CloudWatchAgentServerPolicy受管政策。 -
檢查代理程式日誌是否有
AssumeRole錯誤。kubectl logs -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent --tail=100 | grep -i "AssumeRole\|AccessDenied" -
確認工作負載帳戶中的代理程式 IAM 角色具有跨帳戶角色 ARN 的
sts:AssumeRole許可。