CloudWatch Container Insights Addon Configuration 與成本優化¶
概念概覽
記錄 Amazon CloudWatch Observability EKS Addon 的 configuration-values 三個關鍵開關、三階段成本優化執行順序,以及 disable_metric_extraction 只能接受 boolean 而非 object 格式的關鍵陷阱(object 格式會觸發 CrashLoopBackOff)。
核心知識¶
Addon Configuration-Values 結構¶
configuration-values 為 JSON 格式,可部分覆蓋,未指定欄位維持預設值:
{
"containerLogs": {
"enabled": false
},
"agent": {
"config": {
"logs": {
"metrics_collected": {
"kubernetes": {
"enhanced_container_insights": true,
"disable_metric_extraction": true
}
}
}
}
}
}
三個開關說明¶
| 設定 | 作用 | 影響範圍 |
|---|---|---|
containerLogs.enabled=false |
停用 Fluent Bit DaemonSet,不再收集 container logs | 所有 application log groups |
enhanced_container_insights=true |
啟用增強版 Container Insights | 更豐富的 metrics 維度 |
disable_metric_extraction=true |
停用所有 container/pod 層級 metrics extraction | 無法選擇性停用,v1.0 schema 設計限制 |
disable_metric_extraction:只能是 boolean¶
CloudWatch Agent v1.0 schema 下**只接受 boolean**,傳入 object 格式會讓所有 cloudwatch-agent pods 進入 CrashLoopBackOff,v4.9.0 與 v4.10.1 兩個版本都會踩到:
# ❌ 錯誤:object 格式
disable_metric_extraction:
container: true
pod: true
# ✅ 正確:boolean
disable_metric_extraction: true
診斷指令:
限制:
disable_metric_extraction: true會停用**所有** container/pod 層級的 metric extraction,無法選擇性停用特定層級,這是 v1.0 schema 的設計限制。
三階段成本優化執行順序¶
按以下順序執行,每步驟後確認狀態再繼續,避免多個問題同時出現難以診斷:
Phase 1:Log Group Retention¶
# 查詢所有未設定 retention 的 log group
aws logs describe-log-groups \
--query 'logGroups[?retentionInDays==`null`].[logGroupName]' \
--output table
RetentionDays=None表示永久保留,需補設(建議 7 天)dataplane和hostlog group 容易在設定時遺漏,需特別確認
Phase 2:停用 Fluent Bit¶
透過 addon configuration 停用,不可直接 kubectl delete daemonset:
aws eks update-addon \
--cluster-name <cluster> \
--addon-name amazon-cloudwatch-observability \
--configuration-values '{"containerLogs":{"enabled":false}}'
停用前需確認有其他日誌路徑(self-managed Fluent Bit 或 Loki)。
Phase 3:停用細粒度 Metrics¶
aws eks update-addon \
--cluster-name <cluster> \
--addon-name amazon-cloudwatch-observability \
--configuration-values '{"agent":{"config":{"logs":{"metrics_collected":{"kubernetes":{"disable_metric_extraction":true}}}}}}'
停用後需等待一個計費週期才能看到費用變化。
Addon 更新通用流程¶
# 1. 先查現有設定,避免覆蓋
aws eks describe-addon \
--cluster-name <cluster> \
--addon-name amazon-cloudwatch-observability \
--query 'addon.configurationValues'
# 2. 更新 addon
aws eks update-addon \
--cluster-name <cluster> \
--addon-name amazon-cloudwatch-observability \
--configuration-values '<json>'
# 3. 追蹤狀態(UPDATING → ACTIVE)
aws eks describe-addon \
--cluster-name <cluster> \
--addon-name amazon-cloudwatch-observability \
--query 'addon.status'
# 4. 確認 DaemonSet 狀態變化
kubectl get ds -n amazon-cloudwatch
經驗教訓¶
-
disable_metric_extraction 在 CloudWatch Agent v1.0 下只能是 boolean(true/false),傳入 object 格式(如 {container: true, pod: true})會觸發 CrashLoopBackOff,v4.9.0 和 v4.10.1 兩個版本都有此問題,錯誤訊息需翻 pod logs 才能找到
-
三階段成本優化(Log Retention → Fluent Bit → Metrics)要按順序執行,每步驟後確認狀態再繼續,避免多問題同時出現難以診斷
-
describe-log-groups 查 RetentionDays=None 是找出遺漏 retention 設定的標準方法;dataplane 和 host log group 容易遺漏,需特別補設
-
configuration-values 是 JSON 格式,可部分覆蓋,未指定的欄位保持預設值,更新前應先 describe 取得現有設定
-
addon 狀態轉換需要等待(UPDATING → ACTIVE),不是即時生效
-
停用 metrics 後需等待一個計費週期才能看到費用實際變化
常見陷阱¶
-
disable_metric_extraction 使用 object 格式導致 CrashLoopBackOff,錯誤訊息 'Expected: boolean, given: object' 需手動翻 pod logs 才能找到,不直觀
-
直接 kubectl delete daemonset 停用 Fluent Bit 是錯誤做法,必須透過 addon configuration 的 containerLogs.enabled=false 控制
-
dataplane 和 host log group 容易在設定 retention 時遺漏,需特別確認
-
多階段優化同時進行時問題交疊,難以定位根因
最佳實踐¶
-
永遠使用 boolean 格式:disable_metric_extraction 只能設 true 或 false,不可使用 object
-
修改 addon 設定前先 describe 取得現有 configuration-values,避免覆蓋已有設定
-
用 describe-log-groups 查 RetentionDays=None 找出所有未設定 retention 的 log group,包含 dataplane 和 host
-
按 Log Retention → Fluent Bit → Metrics 三階段順序執行,每步驟後驗證再繼續
-
停用 Fluent Bit 前確認有其他日誌收集路徑(self-managed Fluent Bit 或 Loki)
相關概念¶
- eks-auto-mode-nodepool----dangling---
- EKS CloudWatch Cost Optimization
- eks-node-group----dangling---
- fluent-bit-log-collection----dangling---
來源 Sessions¶
| 日期 | Session | 貢獻摘要 |
|---|---|---|
| - | 423fd9da-802c-452a-8e2f-03de575f2126 | 融合自原始頁面 amazon-cloudwatch-observability-addon |