examlab .net 用最有效率的方法,考取最有價值的認證
Vol. I
本篇導覽 約 36 分鐘

CloudWatch Metrics、Alarms 與 Dashboards

7,100 字 · 約 36 分鐘閱讀 ·

SOA-C02 實戰指南:Amazon CloudWatch metrics、alarms 與 dashboards 全覽 — namespaces 與 dimensions、預設 vs 詳細監控、用於記憶體與磁碟的 CloudWatch agent、metric math、alarm 狀態(OK/ALARM/INSUFFICIENT_DATA)、treatMissingData 各模式、anomaly detection、composite alarms、dashboard widgets,以及 SysOps 疑難排解模式。

立即做 20 題練習 → 免費 · 不用註冊 · SOA-C02

Amazon CloudWatch 是所有 AWS 工作負載的運維神經中樞,在 SOA-C02 中也是考試比重最高的單一服務。Domain 1(監控、日誌與補救)佔全卷 20%——高於其他任何 domain——而 Task Statement 1.1 明確要求考生「使用 CloudWatch 實作 metrics、alarms 與 filters」。SAA-C03 考的是設計階段「要對哪個 metric 設 alarm」,SOA-C02 考的則是「凌晨三點 alarm 觸發後該怎麼辦」:threshold 設定錯誤、instance 終止後 alarm 卡在 INSUFFICIENT_DATA、因為從未安裝 CloudWatch agent 導致記憶體 metrics 消失,以及需要橫跨三個帳號和兩個 region 才能完成事故回顧的 dashboard。

本指南從 SysOps 角度走過 CloudWatch 全流程:metrics 如何進入 CloudWatch、EC2 預設 metrics 為何永遠不含記憶體或磁碟、alarm 狀態如何轉換以及 treatMissingData 對各狀態的實際影響、何時選擇 anomaly detection 而非靜態 threshold、composite alarms 如何在故障切換期間降低 alarm 噪音,以及各類 dashboard widget 適合哪種運維視角。你也會看到反覆出現的 SOA-C02 場景:agent 未發布 metrics 的診斷流程、Auto Scaling 縮減後出現的 INSUFFICIENT_DATA、調整 datapoints-to-alarm 以阻止 ASG 反覆震盪、透過 CloudWatch 串接 Service Quotas 通知,以及作為 CloudWatch alarms 補充訊號的 AWS Health Dashboard 事件。

為什麼 CloudWatch 是 SOA-C02 的核心

官方 SOA-C02 Exam Guide v2.3 在 Task Statement 1.1 下列出六項技能,其中五項出現 CloudWatch:從 CloudWatch Logs 與 Logs Insights 收集日誌、使用 CloudWatch agent 收集 metrics 與日誌、建立 CloudWatch alarms、建立 metric filters、建立 CloudWatch dashboards,以及透過 SNS、Service Quotas、CloudWatch alarms 和 AWS Health events 設定通知。Task Statement 1.2 則在上層疊加補救動作——alarm 觸發後,EventBridge 或 SNS 將其路由,再由 Systems Manager Automation 或 Lambda 執行修正動作。CloudWatch 是所有這些流程的唯一事實來源。

在 SysOps 層級,問題的框架是運維而非架構設計。SAA-C03 問「應該對 Auto Scaling group 的哪個 CloudWatch metric 設 alarm?」SOA-C02 問「ASG 正在反覆震盪——instance 每五分鐘就啟動再終止,alarm 不斷在 OK 與 ALARM 之間振盪,你要改什麼?」答案很少是換一個 metric;而是 Datapoints to alarm、evaluation periods、scaling cooldown 或 treatMissingData。CloudWatch Metrics、Alarms 與 Dashboards 是所有後續 SOA-C02 主題的插槽:ELB health checks(Domain 2)、Auto Scaling target tracking policies(Domain 2)、CloudFormation stack 事件監控(Domain 3)、KMS key 使用量追蹤(Domain 4)、VPC Flow Log metric 萃取(Domain 5)、EBS BurstBalance 與 RDS Performance Insights 基準(Domain 6)。

  • Metric:發布到 CloudWatch 的時序資料點集合,歸屬於某個 namespace,可選擇以 dimensions 標記。AWS 原生服務的 metrics 由服務自動發布;自訂 metrics 透過 PutMetricData 推送。
  • Namespace:隔離不同服務或應用程式的 metrics 的容器(例如 AWS/EC2AWS/RDSCWAgent、自訂的 MyApp/Prod)。即使名稱相同,不同 namespace 的 metrics 也永不衝突。
  • Dimension:識別某個 metric 特定實例的名稱-值對(InstanceId=i-0abc...LoadBalancer=app/...)。不同 dimensions 組合的 metric 是不同的時間序列。
  • Resolution:資料點的儲存粒度——standard(60 秒間隔)或 high-resolution(自訂 metrics 可用 1、5、10 或 30 秒間隔)。
  • Alarm:監看單一 metric(或 metric math 表達式)一段時間視窗的監視器,根據 M-of-N 規則判斷 threshold 是否被突破,並在 OK、ALARM、INSUFFICIENT_DATA 之間轉換。
  • Period:計算統計值的時間長度(60s、300s 等),與 evaluation period 數量無關。
  • Evaluation period:CloudWatch 檢查最近幾個 periods 來決定 alarm 狀態的數量。
  • Datapoints to alarm:M-of-N 規則——在最近 N 個 evaluation periods 內需要 M 個突破點才能觸發 alarm。
  • Composite alarm:狀態由其他 alarms 的 Boolean 表達式計算而來的 alarm(ALARM("a") AND ALARM("b"))。
  • Dashboard:可自訂的 CloudWatch widgets 首頁,用於跨帳號、跨 region 視覺化 metrics、alarms 和 logs。
  • 參考:https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html

白話文解釋 CloudWatch Metrics, Alarms, and Dashboards

CloudWatch 的術語堆疊很快。三個類比能讓這些概念變得具體好記。

類比一:醫院急診分診中心

CloudWatch 是你 AWS 工作負載的醫院急診分診中心Metrics生命徵象——心跳(CPU)、血壓(NetworkOut)、呼吸頻率(DiskWriteOps)——從每位病患(resource)持續串流而來。Namespaces病房,將相似病患分門別類:心臟科(AWS/RDS)、外科(AWS/EC2)、兒科(AWS/Lambda)。Dimensions病患識別手環,精確標記這組生命徵象屬於哪個人。Alarms床邊監視器,預先設定 threshold——若心跳連續三次超過 120 下,護理站就會被呼叫。Alarm 狀態對應急診分診顏色:綠色(OK,病患穩定)、紅色(ALARM,需立即介入)、灰色(INSUFFICIENT_DATA,監視器停止回報——也許接線鬆了,也許病患暫時離開,但我們無從判斷)。treatMissingData 設定是灰色病患的常備醫囑:是假設他們安然無恙(notBreaching)、假設他們處於危急狀態(breaching)、維持上一次的狀態(ignore)、還是把這段空缺視為 threshold 評估時的缺失資料(missing)?Dashboards中央指揮監控牆,一眼盡覽所有病患的生命徵象。Composite alarms主治醫師的臨床判斷——只有在心跳過快而且血氧偏低時才通知家屬,單一指標異常隨時都會發生。

類比二:智慧型恆溫器與 Anomaly Detection

靜態 threshold alarm老式壁掛溫度計——房間超過 28 度就開冷氣,不分季節、不論時段。CloudWatch anomaly detection alarm現代智慧恆溫器——它學習「這棟公寓在平日下午,室溫通常在 26 到 29 度之間漂移,但週末早上冷氣關著、32 度也屬正常」,只有當現實偏離學習出來的正常區間才發出警示。對 SOA-C02 考生而言,這就是每週一早上九點固定收到誤報(靜態 threshold 誤判流量高峰)和只在週一高峰看起來異常地不同於過去才收到通知(anomaly detection band)之間的差異。

類比三:社區管委會的火警系統

CloudWatch dashboard社區管委會辦公室的火警總盤Metric widget 是其中一個煙霧偵測器指示燈,顯示當前感測器讀數。附迷你趨勢圖的單值 widget指示燈加上最近五分鐘的微型圖表Alarm status widget一排狀態燈,任何住戶一觸發就立刻從綠轉紅。內嵌 Logs Insights 查詢的 log widget列印出最近 50 條感測器訊息的紙帶跨帳號跨 region dashboard保全公司的多社區指揮中心——保全公司在一個螢幕上監看數十個社區,他們與每棟大樓的管委會簽署了分享協議(CloudWatch-CrossAccountSharingRole),才能從遠端看到各社區的總盤。

對 SOA-C02 而言,當題目將 alarm 狀態與 treatMissingData 混合考測時,急診分診類比最實用。instance 終止後,metric 停止發布;alarm 現在是一位灰色病患。是否應該觸發 alarm 完全取決於你寫下的那份常備醫囑——如果 alarm 用來驅動 Auto Scaling,通常應設為 notBreaching,以免已終止的 instance 觸發新的替換;如果 alarm 用來驅動資安呼叫器,通常應設為 breaching,將靜默視為可疑。參考:https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html

CloudWatch Metrics 基礎:Namespaces、Dimensions 與 Resolution

在理解 alarms 之前,你需要對 metric 如何進入 CloudWatch 以及如何被識別有一個精確的心智模型。

Namespaces — 頂層容器

Namespace 是 metrics 的第一層分組。AWS 保留 AWS/ 前綴給服務發布的 metrics——AWS/EC2AWS/RDSAWS/ApplicationELBAWS/LambdaAWS/S3,以及更多。自訂 metrics 住在你自選的任何 namespace;CloudWatch agent 預設發布到 CWAgent。Namespaces 是隔離的:AWS/EC2 中名為 CPUUtilization 的 metric 與 MyApp/Prod 中同名的 metric 是不同的時間序列,即使兩者描述同一件事。

Dimensions — metric 上的識別標籤

Dimension 是將 metric 固定到特定 resource 的名稱-值對。AWS/EC2InstanceId=i-0abc123AutoScalingGroupName=web-asgInstanceType=m5.large 等 dimensions 公開 CPUUtilization。每個唯一的 dimensions 組合就是一條獨立的 metric——可獨立設定 alarm 和繪圖。CloudWatch 每個 metric 最多支援 30 個 dimensions,但每個唯一組合都算作一個獨立的 metric 並分別計費,因此 SysOps 工程師必須謹慎規劃。

Resolution — standard vs high-resolution

Standard-resolution metrics 以 60 秒粒度儲存。所有 AWS 發布的 metrics 預設都是 standard resolution,但有一個例外,下文會說明。High-resolution metrics 是以 StorageResolution 為 1 秒發布的自訂 metrics;可以接受 1、5、10 或 30 秒間隔的資料點,並能以最短 10 秒的 period 設定 alarm。High-resolution metrics 費用較高,應僅保留給一分鐘延遲就會掩蓋問題的工作負載(即時交易、遊戲 session 品質、IoT telemetry)。

Metric 保留期

CloudWatch 自動將較舊的 metric 資料捲成更粗粒度的 buckets:

  • Sub-minute(high-resolution)資料保留 3 小時
  • 1-min 資料保留 15 天
  • 5-min 資料保留 63 天
  • 1-hour 資料保留 15 個月(455 天)

超過 15 個月後,metric 資料不再保存。若你的 SysOps 職責需要更長的保留期用於容量規劃,可透過 metric streams 匯出到 S3,或排程呼叫 GetMetricData 後自行儲存。

  • EC2 預設監控:5-minute(300 秒)period——每 5 分鐘一次,免費。
  • EC2 詳細監控:1-minute(60 秒)period——額外付費,須明確啟用。
  • 多數非 EC2 AWS 服務:預設 1-minute period 且免費(ALB、RDS、Lambda 等)。
  • High-resolution 自訂 metric:最快 1 秒間隔;alarm period 最短 10 秒。
  • 每個 metric 最多 dimensions 數:30(每個唯一組合 = 一個獨立 metric)。
  • Metric 保留期:3h(sub-minute)/ 15d(1-min)/ 63d(5-min)/ 15 個月(1-hour);超過 15 個月後全數刪除。
  • Metric 攝入延遲:AWS 發布的 metrics 通常在事件發生後 1–2 分鐘內可見;自訂 PutMetricData 幾秒內可見。
  • 參考:https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html

CloudWatch Agent:在 EC2 與地端主機安裝以取得 OS 層級 Metrics

SOA-C02 上最常考的運維陷阱,就是 EC2 預設由 hypervisor 發布的 metrics 永遠不包含作業系統內部的記憶體或磁碟用量。Hypervisor 無法看到 guest OS 如何使用已分配的 RAM。若要收集記憶體、swap、磁碟已用量和行程層級的 metrics,你必須在每個 instance 內部安裝 CloudWatch agent,並授予其呼叫 cloudwatch:PutMetricData 的權限。

Agent 提供的功能

統一版 CloudWatch agent 可在 Amazon Linux 2 / 2023、Ubuntu、RHEL、SUSE、Windows Server,以及地端 Linux/Windows 主機上執行。它收集:

  • Linux metricsmem_used_percentswap_used_percent、每個掛載點的 disk_used_percentprocesses_running、透過 procstat 取得的網路與 TCP 狀態計數器、collectd 整合。
  • Windows metrics:對等的 Performance Counter——Memory % Committed Bytes In UseLogicalDisk % Free SpacePaging File % Usage、自訂 counter sets。
  • 自訂應用程式 metrics——透過 StatsD(UDP)或 collectd 整合。
  • Log 檔案——應用程式日誌、系統日誌、IIS 日誌——推送到 CloudWatch Log Groups(詳見 Logs 主題)。

Agent 預設發布到 CWAgent namespace(可自訂)。預設 dimensions 包含 InstanceId,以及依 metric 而定的 hostcpudevicepath

安裝路徑

三條運維安裝路徑:

  1. AWS Systems Manager State Manager + Run Command + AWS 管理的 AmazonCloudWatch-ManageAgent document 是 SOA-C02 認可的艦隊規模安裝與設定更新路徑。
  2. EC2 Image Builder 將 agent 烘焙進 golden AMI,適合情境強調「每個新 instance 在首次開機時就必須具備監控」的答案。
  3. User-data script 呼叫平台專屬安裝程式,適合臨時或非 Systems Manager 環境。

IAM 需求(最常見的失敗點)

Instance 需要一個 IAM instance profile,授予 agent 兩組權限:

  • CloudWatchAgentServerPolicy——管理型政策,授予 cloudwatch:PutMetricDataec2:DescribeVolumesec2:DescribeTagslogs:PutLogEventslogs:CreateLogGrouplogs:CreateLogStreamlogs:DescribeLogStreamsssm:GetParameter(用於從 Parameter Store 取得 agent 設定)。
  • AmazonSSMManagedInstanceCore——若你希望 Systems Manager Run Command 和 State Manager 管理 agent 生命週期,則需要此政策。

若缺少任一政策,agent 會執行但靜默地無法發布——你預期的 metric 永遠不會出現在 console 上。SOA-C02 例行考測這個確切的模式。

::warning

SysOps 考生看到 AWS/EC2 中有 CPUUtilizationNetworkInNetworkOutDiskReadOpsDiskWriteOpsStatusCheckFailed_SystemStatusCheckFailed_Instance,便以為「DiskWriteOps」涵蓋磁碟滿載監控。事實並非如此——該 metric 只計算 EBS volume 的 I/O 操作次數。若要對檔案系統達到 90% 設定 alarm,你必須安裝 CloudWatch agent,並對 CWAgent namespace 的 disk_used_percent 設 alarm。記憶體使用率根本不由 hypervisor 公開。參考:https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html ::

地端主機

同一個 agent 可在透過 Systems Manager 以混合式受管 instance 形式登錄的地端伺服器上執行。主機需要一個 IAM 服務角色(不是 instance profile,因為它不是 EC2)和一個 Systems Manager 啟動碼。登錄後,相同的 cloudwatch:PutMetricData 權限適用,metrics 以你選擇的 namespace 和 dimensions 進入 CloudWatch。SOA-C02 可能會問「在單一 CloudWatch dashboard 上同時監控一批地端 Linux 伺服器和 EC2」——答案就是統一版 CloudWatch agent + SSM hybrid activation。

EC2 預設 vs 詳細監控:5-Minute vs 1-Minute 粒度

即使在 agent 加入之前,EC2 本身就能以兩種節奏發布 hypervisor 層級的 metrics。

預設(基本)監控

預設監控自動啟用且免費。它以 5-minute(300 秒)period 發布七個核心 EC2 metrics:CPUUtilizationNetworkInNetworkOutNetworkPacketsInNetworkPacketsOutDiskReadOpsDiskWriteOpsDiskReadBytesDiskWriteBytes,以及 1-minute 的 StatusCheckFailed_System / StatusCheckFailed_Instance / StatusCheckFailed(這些狀態檢查是例外——即使在預設監控下也永遠是 1-minute)。

詳細監控

詳細監控以 1-minute(60 秒)period 發布標準 EC2 metrics。它是按 instance 選擇加入、按 metric 按月計費,並在以下情況時必須開啟:

  • Auto Scaling target tracking 或 step scaling policies 使用 1-minute period——多數生產環境的 scaling 設定都希望 metric 來源 instance 開啟詳細監控。
  • Alarm 需要 1 分鐘或更短的 evaluation period。
  • Dashboard 需要 1-minute 粒度的近即時圖表用於 SLO 審查。

詳細監控可透過 EC2 console、launch template、RunInstances API 或標籤式補救按 instance 啟用。它不會新增記憶體、磁碟使用率或任何新 metric——它只改變現有 hypervisor 層級 metrics 的 period。對未安裝 CloudWatch agent 的 instance 啟用詳細監控,對記憶體和磁碟用量仍是盲目的。

SOA-C02 常見干擾選項:「SysOps 團隊需要對記憶體使用率設 alarm——應該啟用詳細監控還是安裝 CloudWatch agent?」這題看似在考成本取捨,但陷阱在於詳細監控根本不會產生記憶體 metric。詳細監控只改變 hypervisor 發布 metrics 的 period。取得記憶體資料的唯一方式是 CloudWatch agent。將「detailed = 更多 metrics」混淆的考生會白白丟掉簡單分數。參考:https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-metrics-basic-detailed.html

Metric Math:以表達式組合 Metrics

Metric math 讓你無需發布自訂 metrics,就能組合、轉換並從既有 CloudWatch metrics 衍生新值。Metric math 表達式在伺服器端評估,因此不額外計費,並在 alarm 或 dashboard 時隨需執行。

常用 metric math 模式

  • 錯誤率(errors / requests) * 100 從兩個計數器計算百分比。ALB 的經典模式為 100 * (m_5xx + m_target_5xx) / m_request_count
  • 跨 instance 加總SUM(METRICS()) 將 Auto Scaling group 中每個 instance 的 CPUUtilization 聚合,解決 per-instance dimension 造成的視角破碎問題。
  • 剩餘可用容量100 - mem_used_percent 對可用記憶體而非已用記憶體設 alarm。
  • Anomaly bandANOMALY_DETECTION_BAND(m1, 2) 以兩個標準差為 metric 包上一個學習出來的上下限帶。
  • 填補缺失值FILL(m1, 0) 以零替代缺失資料(有時是稀疏 metric 的正確選擇)。
  • 變化率RATE(m1) 計算計數器的每秒變化量。

在 alarms 中使用 metric math

CloudWatch alarm 可監看原始 metric 或 metric math 表達式。Alarm 引用你定義的 metric IDs(m1m2),再設定 ThresholdMetricId: e1 指向表達式。兩個常見的 SOA-C02 模式:

  • SLO 的 composite metric alarm——錯誤率在 5 分鐘內超過 1% 時觸發 alarm。表達式 (m1 / m2) * 100 > 1,其中 m1 = HTTPCode_Target_5XX_Countm2 = RequestCount
  • 批次艦隊的容量型 alarm——當艦隊整體(加總)的可用 CPU 低於 threshold 時觸發。

當運維團隊需要「錯誤率」或「可用記憶體百分比」等衍生值時,SysOps 工程師的第一反應應該是 metric math,而非自訂 metric。自訂 metrics 按 metric 按 dimension 計費,而 metric math 免費且在查詢時即時計算。自訂 metrics 仍然適合無法從現有 metrics 衍生的值(例如佇列中最舊訊息的存放時間)——但對於現有 metrics 的比率和聚合,metric math 是更佳選擇。參考:https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html

Alarm 狀態:OK、ALARM、INSUFFICIENT_DATA 與 treatMissingData

CloudWatch alarms 任何時刻都精確地處於三種狀態之一。

  • OK — 最近幾個 evaluation periods 有資料,且 metric 依 M-of-N 規則未突破 threshold。
  • ALARM — 最近幾個 evaluation periods 依 M-of-N 規則突破了 threshold。
  • INSUFFICIENT_DATA — 資料不足以做出判斷:alarm 剛建立,或 metric 在 evaluation 視窗內停止發布。

狀態轉換會觸發 alarm actions——OK -> ALARM 呼叫 AlarmActionsALARM -> OK 呼叫 OKActions,進入 INSUFFICIENT_DATA 則呼叫 InsufficientDataActions。每組都是可獨立設定的 action ARN 列表(通常是 SNS topics,但也包含 EC2 stop/reboot/recover、Auto Scaling policies、Systems Manager,以及透過 EventBridge 的 Lambda)。

Period vs evaluation periods vs datapoints to alarm

三個數值設定決定何時發生狀態轉換:

  • Period(例如 60 秒):CloudWatch 為 metric 計算單一統計值(Average、Sum、p99、Max、Min)的 bucket 大小。
  • Evaluation periods(常縮寫為 N):CloudWatch 檢查多少個最近的 periods。
  • Datapoints to alarm(常縮寫為 M):那 N 個 periods 中需要有多少個突破 threshold 才能觸發 alarm(M-of-N 規則)。

常見的 SysOps 層級設定是 Period = 60Evaluation periods = 5Datapoints to alarm = 3——意思是當最近 5 個 1-minute 資料點中有 3 個突破時才觸發 alarm。這比 M = N = 1(單一突破期就 alarm)抗震盪得多,但仍能在五分鐘內偵測到持續性問題。

treatMissingData 模式

當某個 period 完全沒有資料點(metric 未發布)時,CloudWatch 必須決定怎麼做。四種模式:

  • missing(預設)——缺失的 period 從 M-of-N 評估中排除。若太多 periods 缺失,alarm 轉換到 INSUFFICIENT_DATA。
  • notBreaching——缺失的 period 被視為未突破的值。Alarm 傾向維持在 OK。
  • breaching——缺失的 period 被視為突破的值。Alarm 傾向觸發。
  • ignore——alarm 狀態鎖定在當前值;缺失資料不改變它。

正確選擇取決於 alarm 驅動的動作:

  • Auto Scaling scale-out alarm:通常應設為 notBreaching。instance 終止後 metric 停止發布;你不希望把靜默解讀為「CPU 高,需要 scale out」。
  • 應用程式 heartbeat alarm:應設為 breaching。靜默表示應用程式停止發布 heartbeat——那就是你想偵測的故障。
  • EC2 recovery 的 status check failed alarmmissing(預設)即可——如果 instance 消失了就沒有東西可以復原,INSUFFICIENT_DATA 不會呼叫 recover action。
  • 長時間執行的批次工作 alarm:有時 ignore 是正確的,讓 alarm 在預期的資料空缺期間維持 OK 狀態。

多道 SOA-C02 題目的答案取決於選擇正確的 treatMissingData 模式。典型模式:Auto Scaling instance 終止,per-instance CPU metric 停止發布,alarm 轉換到 INSUFFICIENT_DATA,考生必須選出正確模式,以(a)讓 alarm 保持安靜、不要觸發替換 instance(notBreaching),或(b)呼叫值班人員,因為 metric 來源意外消失(breaching)。錯誤的預設值會毀掉生產環境中所有的 Auto Scaling group 和所有的健康監控器。參考:https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html#alarm-evaluation

Anomaly detection alarms

靜態 threshold 不適合具有每日或每週季節性的流量。CloudWatch anomaly detection 會在 metric 的歷史資料(通常 14 天)上訓練一個機器學習模型,並產生一個 anomaly band——每個時段的預期值學習包絡線。Alarms 可在 metric:

  • 向任一側越出 band 時觸發(GreaterThanUpperThreshold OrLowerThanLowerThreshold)。
  • 僅超過上限時觸發(典型用於延遲或錯誤數)。
  • 僅跌破下限時觸發(典型用於請求量——沉默就是故障)。

Band 寬度以標準差設定(預設 2)。更寬的 band 減少誤報但提高偵測延遲。Anomaly detection 按 metric 啟用,可以標記排除期間,讓模型學到已排程的高峰(大特賣、週一早上九點流量)不是異常。

當 metric 有絕對意義時,使用靜態 threshold alarmdisk_used_percent > 905xx error count > 100)。當 metric 的意義隨時段或星期幾而變化時,使用 anomaly detection(公共網站的 RequestCount、電商結帳的 OrderCount)。SOA-C02 的暗示用語是「團隊厭倦了早晨高峰期的誤報」——那就是 anomaly detection。參考:https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Anomaly_Detection.html

Composite Alarms:組合多個子 Alarms

Composite alarm 是一個由其他 alarms 的 Boolean 表達式計算狀態的 alarm。一般 alarm 監看 metric,composite alarm 則監看 ALARM("alarm-name")OK("alarm-name")INSUFFICIENT_DATA("alarm-name") 謂詞,以 AND、OR 和 NOT 組合。

Composite alarms 存在的原因

真實工作負載會產生 alarm 風暴:當可用區發生故障時,數十個 per-instance alarms 同時觸發,值班人員的收件匣爆炸。Composite alarms 將噪音折疊成單一的高層級訊號:

  • ALARM(asg-cpu-high) AND ALARM(asg-error-rate-high)——只有在運算飽和度和錯誤率都升高時才呼叫;任一單獨升高都是正常流量。
  • (ALARM(rds-cpu) OR ALARM(rds-iops)) AND ALARM(rds-replica-lag)——只有在資料庫同時承受壓力且開始落後時才呼叫,忽略短暫高峰。
  • NOT OK(maintenance-window)——排程維護期間抑制呼叫。

設定機制

Composite alarm 以 ARN 或名稱在同一個帳號和 region 內引用子 alarms。子 alarms 本身也可以是 composite(最多巢狀 10 層)。Composite alarm 有自己的 AlarmActionsOKActionsInsufficientDataActions ARNs——通常是高保真呼叫用的 SNS topic。關鍵在於,你可以設定 composite alarm 在其處於 ALARM 狀態時抑制子 alarm actions,讓值班人員只收到一則通知而非五十則。

Suppressor alarms

Composite alarm 可指定一個 suppressor alarm 和一個等待期。當 suppressor 處於 ALARM 狀態時,composite alarm 不管規則如何都不會轉換到 ALARM。常見模式:在計畫性視窗期間翻轉到 ALARM 的 MaintenanceWindow alarm,抑制所有運維 composite alarms,讓修補週期不會呼叫任何人。

當 SOA-C02 情境描述「SysOps 團隊在每次 AZ 故障時被呼叫 30 次」或「值班人員只應在 Load Balancer 不健康應用程式同時回傳 5xx 時才被通知」,答案就是帶有 ALARM(...) AND ALARM(...) 的 composite alarm,加上子 alarms 的 action 抑制。參考:https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Create_Composite_Alarm.html

CloudWatch Dashboards:Widgets、跨帳號、跨 Region 與分享

CloudWatch dashboard 是一個可自訂、JSON 為底的 widgets 頁面,視覺化跨帳號、跨 region 的 metrics、alarms、logs 和 metric math 表達式。Dashboard 是 SysOps 團隊的情境感知工具——事故發生時值班人員打開的那個 URL。

Widget 類型

  • Line widget——一個或多個 metrics 的經典時間序列圖;支援左右 Y 軸和覆蓋標註。
  • Stacked area widget——與 line 相同但堆疊,適合艦隊層級的視覺化。
  • Number widget(單值)——當前值加上迷你趨勢圖;適合「現在有多少 active alarms」。
  • Gauge widget——圓形儀表顯示值在定義範圍內的位置;適合 SLO 消耗速率。
  • Bar / pie——類別比較。
  • Alarm status widget——依當前狀態色彩標記的 alarm 列表;事故 dashboard 最重要的 widget。
  • Text widget——Markdown 格式的 runbook 連結和擁有者標籤。
  • Logs widget——在 dashboard 中嵌入 CloudWatch Logs Insights 查詢結果。
  • Custom widget(Lambda-backed)——由 Lambda 函數回傳的任意內容(表格、圖片、JSON)。適合按標籤分類的成本面板或 AWS Health 事件摘要。

跨帳號、跨 region dashboards

單一 dashboard 可顯示來自多個 AWS 帳號和 regions 的資料。需要先完成兩個前提:

  1. 分享帳號(持有來源 metrics 的帳號)安裝 CloudWatch-CrossAccountSharingRole IAM role,信任政策允許監控(查看)帳號來承擔它。這在 CloudWatch console 的 Settings 中一鍵完成。
  2. 監控帳號在 Settings → "Manage source accounts" 下登錄分享帳號。

設定完成後,新增 widget 時只需從下拉選單選擇帳號。SOA-C02 常問「將 12 個帳號的 metrics 整合到一個運維 dashboard」——答案是透過 sharing role 的跨帳號 dashboards,而非自訂 Lambda 聚合。

跨 region widgets 的 dashboard JSON 每個 widget 包含 region 欄位;同一個 metric 圖表可以並排顯示 us-east-1eu-west-1。跨 region 如果帳號間已互信,則不需要額外的 IAM。

對外分享 dashboards

Dashboard 可透過三種選項分享給沒有 AWS console 存取權的使用者:

  • 公開連結(可選擇加上電子郵件/Google/SAML SSO 登入)——適合給高階主管查看。
  • 特定電子郵件地址加上登入。
  • 透過 Cognito identity pools 的第三方 SSO

分享出去的 dashboards 是唯讀的,遵循來源帳號的資料權限。

SOA-C02 的最佳實踐是將 dashboards 作為 JSON 儲存在 Git 儲存庫中,透過 CloudFormation AWS::CloudWatch::Dashboard 部署,並在 pull requests 中 review 變更。手動建立的 dashboards 會產生偏移、可能被意外刪除,且無法跨環境移植。考題偏好 managed-IaC 答案;臨時在 console 點選會失分。參考:https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html

Service Quotas 通知:將 CloudWatch 與 Service Quotas 整合

AWS Service Quotas 是顯示帳號中 AWS 服務當前用量和限制的服務。SOA-C02 明確考測在用量接近配額時設定通知。

運作方式

對於支援的配額(多數服務配額均支援,包含 EC2 vCPUs、EBS volume 數量、Lambda concurrent executions、VPC 數量、每個 VPC 的 security groups),Service Quotas 會在 AWS/Usage namespace 中向 CloudWatch 發布 metric。你接著對該用量 metric 建立一個 CloudWatch alarm,threshold 以配額百分比表示——通常 80% 作為黃色警示,95% 作為紅色警示。

Alarm action 是一個通知 SysOps 團隊的 SNS topic。團隊隨後(a)透過 Service Quotas 申請配額增加、(b)清理未使用的資源以釋放配額,或(c)重構至不消耗該配額的不同服務。

配額申請流程

配額增加申請由 Service Quotas 本身或 AWS Support 處理。運維成熟度要求你在 80% 時就設定 alarm,讓你有時間在飽和前提交申請,而不是在 100% 時生產環境已經出問題才行動。

Service Quotas vs Trusted Advisor

Trusted Advisor 的「Service Limits」檢查涵蓋較少、較舊的一組配額,且每日更新一次。Service Quotas 是現代、即時、可程式化的來源。SOA-C02 對所有「在接近服務限制時發出警示」的問題偏好 Service Quotas。

運維成熟度意味著 SysOps 團隊在客戶受影響之前就收到通知。在 SOA-C02 中,當題目問「在 EC2 vCPU 配額耗盡前通知團隊」,正確答案是 Service Quotas + CloudWatch alarm 設在 80% threshold + SNS topic + 值班人員的 runbook(申請增加、清理未使用的 instances 或遷移工作負載)。在 100% 設定 alarm 保證造成服務中斷。參考:https://docs.aws.amazon.com/servicequotas/latest/userguide/configure-cloudwatch.html

Health Dashboard 整合:AWS Health Events vs CloudWatch Alarms

CloudWatch alarms 偵測的是你的運維問題。AWS Health Dashboard 事件告訴你的是影響你帳號的 AWS 運維問題——計畫性維護、服務中斷、安全公告,以及生命週期異動(例如即將淘汰的 AMI 退役)。成熟的監控策略會疊加這兩種訊號。

兩種 AWS Health 介面

  • Service Health Dashboard(前身為 status.aws.amazon.com):公開、依 region、所有客戶均可見。
  • AWS Health Dashboard(前身為 Personal Health Dashboard):按帳號、帳號專屬,包含針對你的資源的排程事件(例如:instance ID i-0abc123 的 EC2 instance 將於下週二退役)。

SOA-C02 考試所說的「Health events」指的是 AWS Health Dashboard。

將 AWS Health 接入 alarm pipeline

AWS Health 以 aws.health 事件來源將事件發布到 EventBridge。SysOps 團隊建立 EventBridge rules 來匹配事件類別(scheduledChangeissueaccountNotification),並路由到:

  • 用於人工通知(電子郵件、SMS、聊天)的 SNS topic
  • 開立 Jira 工單或執行 Systems Manager Automation runbook 的 Lambda function
  • 在 CloudWatch alarms 旁邊呈現當前 Health 事件的 CloudWatch dashboard custom widget

若要取得整個組織的可見性,可啟用 AWS Health Organizational View(需要 AWS Organizations),讓每個成員帳號的事件聚合在管理帳號或委派管理員帳號中。

何時使用哪個

訊號來源 偵測對象 主要工具
CloudWatch alarms 你的工作負載 metric 突破 threshold CloudWatch + SNS / EventBridge
AWS Health events 影響你帳號的 AWS 端問題 EventBridge aws.health rule
AWS Health Organizational View 影響所有組織帳號的 AWS 端問題 管理帳號 / 委派管理員帳號
AWS Service Health Dashboard AWS 全球服務問題 公開 RSS / 狀態頁面

在 SOA-C02 中,當情境描述「團隊不知道 AWS 正在對資料庫執行計畫性維護,凌晨兩點被 failover 通知叫醒」——缺口是 AWS Health Dashboard 事件沒有被路由到值班人員。修法是對 aws.health 事件類別 scheduledChange 建立 EventBridge rule,篩選受影響的服務,發布到與重要 CloudWatch alarms 相同的 SNS topic,讓值班人員同時看到兩種訊號。參考:https://docs.aws.amazon.com/health/latest/ug/getting-started-health-dashboard.html

場景模式:EC2 記憶體使用率從未出現在 CloudWatch Console

這是 SOA-C02 的典型疑難排解場景。操作手冊如下:

  1. 確認 namespace。 記憶體 metrics 位於 CWAgent namespace,而非 AWS/EC2。如果 SysOps 工程師在搜尋 AWS/EC2,永遠找不到它。
  2. 確認 agent 已安裝並執行中。 透過 SSH 或 Session Manager 登入 instance:sudo systemctl status amazon-cloudwatch-agent(Linux)或 Get-Service AmazonCloudWatchAgent(Windows)。如果服務不存在,表示 agent 從未安裝——使用 Systems Manager Run Command 搭配 AWS-ConfigureAWSPackage 安裝 AmazonCloudWatchAgent
  3. 確認 agent 有設定檔。 Agent 沒有設定就不會做任何事。設定為 /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json 的 JSON,或從 SSM Parameter Store 取得。使用精靈 amazon-cloudwatch-agent-config-wizard 互動式建立,或從 Parameter Store 推送。
  4. 確認 IAM instance profile。 Instance 必須有附加 CloudWatchAgentServerPolicy 的角色。透過 EC2 console → Instance → Security 標籤 → IAM Role 確認。若缺少,附加它(不需要重新啟動 instance,但 agent 可能需要重啟:sudo systemctl restart amazon-cloudwatch-agent)。
  5. 確認 agent log。 /opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log 會顯示發布失敗。尋找 AccessDenied(IAM 問題)、NetworkUnreachable(security group / NACL / VPC endpoint)或 ConfigError(格式錯誤的 JSON)。
  6. 確認網路路徑。 若 instance 位於沒有 NAT gateway 的私有子網路,你需要 monitoring.region.amazonaws.com(CloudWatch metrics)的 VPC endpoint,讓 agent 能私下存取 API。

依頻率排列的最常見根本原因:IAM role policy 缺失、agent 設定 JSON 缺失或錯誤、agent 已安裝但未啟動,以及私有子網路缺少 VPC endpoint。

場景模式:Instance 終止後 Alarm 卡在 INSUFFICIENT_DATA

另一個 SOA-C02 典型場景。Auto Scaling group 在縮減時終止一個 instance。監看該 instance 的 per-instance CPU alarm 進入 INSUFFICIENT_DATA 並停在那裡,因為再也沒有資料點到來。Alarm 的 treatMissingData 模式決定接下來會發生什麼:

  • missing(預設) — alarm 永久停留在 INSUFFICIENT_DATA。對診斷用 alarms 通常可接受。
  • notBreaching — alarm 轉換回 OK。適合 Auto Scaling scale-out alarms,讓已終止的 instance 不會持續觸發 scale-out actions。
  • breaching — alarm 轉換到 ALARM。僅在靜默真的代表故障時才適用(例如 heartbeat metric)。
  • ignore — alarm 維持在之前的狀態。

修法很少是「刪除 alarm」。正確答案通常是:

  1. 確認 alarm 的用途(診斷用、驅動動作,或呼叫人員)。
  2. 據此選擇 treatMissingData
  3. 若 alarm 針對的是穩定資源(ASG 層級的 metric 如 GroupInServiceInstances,而非 per-instance metric),改用 ASG 層級的 metric,讓 alarm 不因 instance 終止而成為孤兒。

對於 ASG,標準模式是:以 AWS/EC2 CPUUtilization 搭配 dimension AutoScalingGroupName=web-asg(而非 InstanceId)設 alarm,如此 metric 就能在整個艦隊上聚合,並在 instance 流動中存活。

常見陷阱:標準 EC2 Metrics 與詳細監控混淆

SOA-C02 的持續性混淆:考生把「詳細監控」與「更多 metrics」混為一談,因為詳細這個詞暗示更多。它不是。詳細監控只是把現有 hypervisor metrics 的發布 period 從 5 分鐘改為 1 分鐘。它新增零個 metric 類型。記憶體、swap、磁碟已用百分比和行程數,完全來自 CloudWatch agent,不論是否開啟詳細監控都一樣。詳細監控還按 metric 按月計費,因此在 200 個 instance 的艦隊上啟用它會產生你應該能說明的帳單影響。

清楚的心智區隔:

  • 更頻繁地取得現有 metrics 的資料 → 啟用詳細監控
  • 更多 metric 類型(記憶體、磁碟使用量、行程) → 安裝 CloudWatch agent
  • 自訂應用程式 metrics(佇列深度、業務 KPI) → 透過 PutMetricData API 或透過 agent 的 StatsD/collectd 發布。

常見陷阱:High-Resolution 自訂 Metric 的費用

High-resolution metrics 很誘人——1 秒粒度、10 秒 alarms——但費用明顯較高。每個 high-resolution metric 按 per-metric 費率計費,high-resolution alarms 也比 standard alarms 貴(10 秒 alarm SKU vs 60 秒 SKU)。把每個 metric 都設為 high-resolution 以「保留選項」的 SysOps 工程師,可能讓 CloudWatch 帳單暴增 10 到 60 倍。考試正確規則:high-resolution 僅用於一分鐘延遲就會掩蓋問題的 metrics——即時交易、遊戲、IoT telemetry——其他地方一律使用 standard resolution。

常見陷阱:Metric 發布延遲

CloudWatch 不是即時的。AWS 發布的 metrics 通常在底層事件發生後 1–2 分鐘才到達。自訂 PutMetricData 幾秒內到達,但 alarm 評估引擎仍需等 period 關閉才進行評估。1-minute period 加 1 evaluation period 的 alarm,通常在突破條件出現後 60–120 秒才觸發,而非立即。SOA-C02 有時會問「團隊需要在 30 秒內偵測到故障並觸發補救」——誠實的答案是 CloudWatch alarms 無法保證 30 秒以內的偵測;需要那種速度就得使用應用程式層級的 health checks、ELB health checks(有自己獨立於 CloudWatch 的 threshold),或 Route 53 health checks,視架構而定。

SOA-C02 vs SAA-C03:運維視角的差異

SAA-C03 和 SOA-C02 都考 CloudWatch,但視角不同。

問題類型 SAA-C03 視角 SOA-C02 視角
選擇 metric 「架構師應對 ALB 延遲的哪個 CloudWatch metric 設 alarm?」 TargetResponseTime 的 alarm 每五分鐘震盪一次——修法是什麼?」
預設 vs 詳細監控 「為開發環境選擇符合成本效益的監控選項。」 「Auto Scaling target tracking 反應太慢;period 是 5 分鐘——要做什麼改變?」
treatMissingData 很少考。 大量考測——為 alarm 的用途選擇正確的模式。
Composite alarms 「哪個功能能降低多個 metrics 的 alert 噪音?」 「為維護視窗設定帶有 action 抑制的 composite alarm。」
CloudWatch agent 「架構應監控記憶體使用率。」 「記憶體 metrics 在 CloudWatch console 中消失了——列出每個診斷步驟。」
Anomaly detection 「哪個 CloudWatch 功能能處理季節性流量模式?」 「設定一個採用 14 天學習模型並排除大特賣的 anomaly detection alarm。」
Dashboards 「使用 CloudWatch dashboard 進行視覺化。」 「使用 CloudWatch sharing role 建立跨帳號、跨 region dashboard。」

SAA 考生選擇 metric;SOA 考生正確設定 alarm、在出問題時疑難排解,並在事故期間操作 dashboard。

考試訊號:如何辨識 Domain 1.1 的題目

SOA-C02 的 Domain 1.1 題目遵循可預測的模式。認出它們後,每題的作答時間會大幅縮短。

  • 「metric 消失了」 — 答案涉及 CloudWatch agent、IAM 權限缺口或 VPC endpoint 缺失。記憶體和磁碟 metrics 幾乎必定是 agent 問題。
  • 「alarm 觸發太頻繁 / 太不靈敏」 — 答案調整 Datapoints to alarmEvaluation periods 或 period 本身。有時答案是以 anomaly detection 取代靜態 threshold。
  • 「alarm 卡在 INSUFFICIENT_DATA」 — 答案是 treatMissingData 設定,通常是 ASG alarms 的 notBreaching
  • 「值班人員被 alarms 淹沒」 — 答案是帶有子 alarm action 抑制的 composite alarms。
  • 「運維需要跨帳號和 region 的可見性」 — 答案是透過 sharing role 的跨帳號跨 region CloudWatch dashboards。
  • 「接近服務限制」 — 答案是 Service Quotas + CloudWatch alarm 設在 80% + SNS 通知。
  • 「錯過了 AWS 端的維護」 — 答案是對 aws.health 事件設 EventBridge rule 路由到 SNS / dashboard。
  • 「計算衍生值(錯誤率、可用容量)」 — 答案是 metric math,而非自訂 metric。

Domain 1 佔 20%,Task Statement 1.1 涵蓋 CloudWatch 的大部分,預計在這個領域會有 10 到 13 道題。掌握本節的模式,是 SOA-C02 備考中效益最高的單一學習活動。參考:https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html

決策矩陣 — 各 SysOps 目標對應的 CloudWatch 構件

考試期間使用這份速查表。

運維目標 主要構件 備註
對記憶體或磁碟用量設 alarm CloudWatch agent + 對 CWAgent namespace 設 alarm EC2 預設 metrics 從未公開記憶體或磁碟使用量。
以 1-minute 粒度對 EC2 CPU 設 alarm 詳細監控 + 以 60 秒 period 設 alarm 預設 5-minute 對快速 scaling 太粗糙。
從兩個 metrics 計算錯誤率 Metric math 表達式 比發布自訂比率 metric 更便宜。
排程維護期間抑制 alarm Composite alarm 搭配 suppressor alarm 或排程 Lambda action 停用 alarms。
減少短暫故障的呼叫次數 Datapoints to alarm M-of-N 例如 3 of 5 而非 1 of 1。
停止 instance 終止後的誤報 treatMissingData=notBreaching 特別針對 Auto Scaling 驅動的 alarms。
偵測遺失的 heartbeat treatMissingData=breaching 靜默即故障。
適應流量季節性 Anomaly detection alarm 預設 band 為兩個標準差。
對服務配額用量設 alarm Service Quotas 用量 metric + 80% alarm AWS/Usage namespace。
跨多個帳號聚合 透過 CloudWatch-CrossAccountSharingRole 的跨帳號 dashboards Console settings 一鍵設定。
回應 AWS 端維護 EventBridge rule 監聽 aws.health 加上 SNS、加上 dashboard custom widget。
自動復原 EC2 instance CloudWatch alarm 監控 StatusCheckFailed_System → EC2 recover action 內建 alarm action,不需要 SNS。
觸發 Auto Scaling CloudWatch alarm → Auto Scaling action 或使用 target tracking(由其內部管理 alarms)。
執行補救腳本 CloudWatch alarm → SNS → Lambda 或 alarm → EventBridge → SSM Automation EventBridge 路徑較佳,具備重試 / 解耦。
以程式碼管理 dashboards CloudFormation AWS::CloudWatch::Dashboard 版本控制在 Git,在 PRs 中 review。
集中化地端伺服器的 logs CloudWatch agent + SSM hybrid activation 一個 agent、一個 namespace、一個 dashboard。

常見陷阱總整理 — CloudWatch Metrics、Alarms 與 Dashboards

每次 SOA-C02 考試都會出現其中兩三個干擾選項。

陷阱 1:詳細監控新增新的 metrics

它只改變現有 hypervisor metrics 的 period。記憶體、磁碟使用量和行程 metrics 仍需要 CloudWatch agent。

陷阱 2:treatMissingData=missing 讓 alarm 維持有用

missing 只是從 M-of-N 評估中排除缺失 periods;若所有 periods 都缺失,alarm 就停在 INSUFFICIENT_DATA,永遠不會到達 OK 或 ALARM。對於驅動動作的 alarms,請刻意選擇 notBreachingbreaching

陷阱 3:每個 instance 一個 alarm 能夠擴展

Per-instance alarms 在 instance 終止後會成為孤兒 alarm。改用 ASG 層級的 dimensions(AutoScalingGroupName),讓 metric 在整個艦隊上聚合。

陷阱 4:Alarm period 等於 evaluation period

兩者是獨立的。Period 是統計值的 bucket 大小;evaluation periods 是檢查的 bucket 數量。混淆兩者會產生觸發太快或太慢的 alarms。

陷阱 5:衍生值使用自訂 metric

如果值能從現有 metrics 計算,使用 metric math。自訂 metrics 按 metric 按 dimension 計費,對比率和聚合來說是不必要的。

陷阱 6:以 Console 建立的 dashboards 作為事實來源

Console dashboards 會產生偏移、可能被意外刪除,且無法被 review。改用 Git 中的 CloudFormation AWS::CloudWatch::Dashboard JSON 管理 dashboards。

陷阱 7:所有 metrics 都使用 high-resolution

費用是 standard 的 10x 到 60x。僅保留給真正需要 sub-minute 的 metrics。

陷阱 8:在服務配額的 100% 設定 alarm

突破 100% 時,生產環境已經故障。在 80% 設定 alarm,留時間提交增加申請。

陷阱 9:預期 CloudWatch 在幾秒內偵測到故障

AWS metrics 在事件發生後 1–2 分鐘才到達;alarm 評估還要加上 period 長度。Sub-minute 偵測需要應用程式層級、ELB 或 Route 53 health checks。

陷阱 10:忘記 AWS Health Dashboard

CloudWatch 只知道你的工作負載說了什麼。AWS 端的維護和服務問題來自透過 EventBridge aws.health 事件的 AWS Health。

FAQ — CloudWatch Metrics、Alarms 與 Dashboards

Q1:Period 與 Evaluation Periods 有什麼差別?

Period 是 bucket 大小——CloudWatch 在計算 metric 的單一統計值(Average、Sum、Max、Min、p99)前要等多久。常用值為 60、300 或更高的秒數。Evaluation periods 是計數 N,是 alarm 與 Datapoints to alarmM)一起用來套用 M-of-N 規則的最近 buckets 數量。所以 Period = 60Evaluation periods = 5Datapoints to alarm = 3 表示:每分鐘,檢查最近 5 個 1-minute 平均值中是否有 3 個突破。Period 設定解析度;evaluation periods 設定規則套用的視窗。混淆兩者是 SOA-C02 上最常見的 alarm 調整錯誤。

Q2:我的 CloudWatch alarm 為何永遠停在 INSUFFICIENT_DATA?

INSUFFICIENT_DATA 表示 alarm 因 evaluation 視窗內的 metric 資料不足而無法判斷。三個典型原因:(a)metric 完全未發布——安裝 CloudWatch agent、修正 IAM role,或確認 VPC endpoint;(b)metric 是稀疏的——對 scale-out alarms 設定 treatMissingDatanotBreaching,對 heartbeat alarms 設為 breaching;(c)來源資源已終止——改用 ASG 層級或服務層級的 dimension 取代 per-instance dimension,讓 metric 在 instance 流動中存活。正確的修法取決於 alarm 的用途,沒有一體適用的預設值。

Q3:如何在跨帳號 dashboards 和自訂 Lambda 聚合器之間選擇?

大多數情況使用跨帳號 dashboards——一鍵設定、無需維護 Lambda 程式碼、同一設定支援跨 region,且與跨帳號 metric math 相容。僅在需要將聚合資料推送到第三方 SaaS(Datadog、Grafana Cloud)、套用 AWS 原生不支援的業務邏輯(例如跨帳號的加權 SLO),或需要儲存超過 CloudWatch 15 個月保留期的長期摘要時,才使用自訂 Lambda 聚合器。SOA-C02 偏好 AWS 原生答案;只在題目明確排除跨帳號 dashboards 時才選自訂 Lambda。

Q4:anomaly detection 何時勝過靜態 threshold,反之亦然?

Anomaly detection 在 metric 具有每日或每週季節性時勝出——公共網站流量、電商結帳量、登入率。模型學習「週一早上九點的正常和週日凌晨三點的正常不同」,只對脫離學習正常值的情況發出 alarm。靜態 threshold 在 metric 有不隨時段變化的絕對意義時勝出——disk_used_percent > 90replication lag seconds > 605xx error count > 100。SOA-C02 的暗示用語是「厭倦了預期高峰的誤報」→ anomaly detection;「SLO 要求延遲低於 200ms」→ threshold 設在 200 的靜態 alarm。

Q5:M-of-N 規則(Datapoints to alarm)實際如何評估?

CloudWatch 檢查最近的 N 個 evaluation periods,計算其中有多少個突破 threshold。如果至少 M 個突破,alarm 轉換到 ALARM(或維持在那裡)。如果最近 N 個 periods 中突破的少於 M 個,alarm 轉換到 OK。缺失 periods 依 treatMissingData 處理。M-of-N 規則將靈敏度(低 M)與持續條件偵測(高 N)解耦:M=3, N=5 意味著「在過去幾分鐘內突破相當頻繁」,能抵抗單分鐘高峰;M=1, N=1 意味著「在下一次突破時立即 alarm」,僅適合 status checks 等二元訊號。

Q6:將 alarm 傳送到 Lambda function 的最清晰方式是什麼?

兩條路徑。(a)簡單方式:alarm action → SNS topic → Lambda subscription。(b)健壯方式:alarm action → SNS topic,加上 EventBridge rule 監聽 aws.cloudwatch 事件來源中的 CloudWatch Alarm State Change → Lambda target。EventBridge 路徑提供重試、死信佇列和解耦,無需自行管理 SNS subscription。SOA-C02 對任何「自動化補救」答案偏好 EventBridge 路徑,因為它能自然地與 Systems Manager Automation、Step Functions 和跨帳號 event buses 組合。Alarm 直接觸發 Lambda 的 action 雖然也可行,但緊耦合且缺乏內建重試。

Q7:單一 alarm 能監看另一個帳號或 region 的 metric 嗎?

不能直接做到。CloudWatch alarm 永遠在它被定義的帳號和 region 中評估,並監看同一範圍內的 metrics。若要對跨帳號或跨 region 的 metric 設 alarm,有三個選項:(a)以 Lambda + PutMetricData 將 metric 複製到 alarm 所在的帳號/region;(b)使用 CloudWatch metric streams 將 metrics 傳送到中央帳號;(c)將 alarm 本身部署到每個來源帳號/region,並將 alarm 狀態異動事件路由到中央 EventBridge bus。選項(c)是 SOA-C02 建議的組織範圍監控模式——alarms 保持靠近 metric,聚合發生在 event-bus 層。

Q8:對 AWS Health Dashboard 設 alarm 的正確方式是什麼?

AWS Health 事件不是 CloudWatch metrics——它們是 EventBridge 上 aws.health 事件來源的事件。建立 EventBridge rule 匹配你關心的事件類別和服務(scheduledChangeissueaccountNotification,針對相關服務),然後路由到:用於人工通知的 SNS topic、更新 Jira/ServiceNow 工單的 Lambda function,以及在 CloudWatch alarms 旁邊呈現持續 Health 事件的 CloudWatch dashboard custom widget。若要多帳號覆蓋,啟用 AWS Health Organizational View,讓每個成員帳號的事件在進入你的 EventBridge pipeline 前聚合到管理帳號或委派管理員帳號。

Q9:CloudWatch 會保留我的 metric 資料多長時間?

CloudWatch 自動將 metric 資料捲成更粗粒度的 buckets:high-resolution(sub-minute)資料 3 小時、1-minute 資料 15 天、5-minute 資料 63 天、1-hour 資料 15 個月(455 天)。超過 15 個月後,資料消失。若你的 SysOps 職責需要更長的保留期用於容量規劃、稽核或合規,你必須匯出——透過 metric streams 到 S3/Firehose/第三方,或透過排程的 GetMetricData 呼叫進入你自己的資料湖。考試可能直接考這個數字:「CloudWatch 在不手動匯出的情況下最長保留 metric 多久?」——15 個月。

Q10:組合訊號時應該使用 composite alarm 還是 metric math?

當組合訊號是一個——錯誤率、可用容量、加權平均——且你想對計算值設 alarm 時,使用 metric math。Alarm 是單一個 metric-math alarm。當組合訊號是跨 alarm 狀態的 Boolean 運算——「只有在 A 和 B 都處於 ALARM 時才呼叫」或「維護視窗 alarm 啟動時抑制呼叫」——時,使用 composite alarm。Composite alarms 還讓你抑制子 alarm actions,這是 metric math 做不到的。SOA-C02 常見的陷阱是在正確答案是 composite(狀態組合)時提供 metric math,或在正確答案是 metric math(值組合)時提供 composite;閱讀情境時注意它討論的是還是 alarm 狀態

延伸閱讀與相關運維模式

Metrics 就位後,接下來的運維層次是:CloudWatch Logs 和 Logs Insights,用於應用程式與系統日誌分析(SOA-C02 Domain 1 中 metrics 之後自然延伸的主題);EventBridge rules 和 SNS 通知,用於將 alarms 路由進自動化補救 pipeline;CloudTrail 和 AWS Config,用於稽核與設定合規訊號,這些訊號會輸入同一套 alarm 和 dashboard 架構;以及 EC2 Auto Scaling 和 ELB 高可用性,用於這些 alarms 所監控的工作負載層。

官方資料來源

更多 SOA-C02 主題