假设你是一座智慧城市的总指挥。城市的每个角落都藏着传感器:十字路口的车流计数器、变电站的电压表、医院重症监护室的体征监护仪。你坐在中央指挥大厅里,面前是一面巨大的屏幕墙——哪条路开始拥堵,哪个片区电压不稳,哪台设备即将过热,屏幕上全部一目了然。一旦某个指标越过危险线,系统会立刻弹窗报警,甚至自动呼叫维修队。这套“城市感觉神经+中央指挥中枢”,就是 AWS 世界里 CloudWatch 扮演的角色。 CloudWatch 是 AWS 上的“云监控指挥中心”。它负责三件事:收集(把 CPU 使用率、GPU 占用、模型推理延迟等指标汇聚起来)、洞察(把散落的日志变成可查询的数据)、行动(当指标异常时触发告警,通知人或自动修复)。对于做 AI 应用的人来说,模型上线只是开始——推理服务的 GPU 是否过热?API 错误率是否飙升?训练任务有没有卡死?这些问题全都交给 CloudWatch 来盯梢。
对 AI 从业者的价值:掌握 CloudWatch,等于给自己的 AI 应用装了一套“生命体征监护仪”。模型推理卡顿、GPU 过载、日志异常,你都能第一时间感知,从“用户投诉了才知道”升级为“故障发生前就干预”。
可视化演示
展示系统处理流水线、实时性能指标曲线及多方案对比分析,包含数据流转、吞吐延迟监控与方案评估。
本节配有交互动效(进入视口后自动加载,约 3KB)。
系统可视化 处理流程:输入→处理→模型→输出 性能监控:实时指标 P=L×T
核心定位与价值
回到那座城市指挥中心。指挥中心本身不发电、不修路、不救人,但它让市长第一次“看见”整座城市在发生什么。此前各个部门各自为政:电网只知道电压,交通只知道车流,医院只知道床位。CloudWatch 的定位正是如此——它是 AWS 上所有云资源的“总感知层”,统一收集、统一展示、统一报警。
CloudWatch 的职责可以压缩成三个动词:收集(Collect)、洞察(Observe)、行动(Act)。收集指抓取 EC2、Lambda、SageMaker 等服务的指标与日志;洞察指把数据变成趋势图、查询结果、异常信号;行动指触发告警、调用 SNS 发通知、或联动 Auto Scaling 自动扩容。这三步构成一个完整的闭环,相当于指挥中心“看见问题→判断问题→派人处理”。
从产品形态来看,CloudWatch 由四个子模块组成:CloudWatch Metrics(指标)、CloudWatch Logs(日志)、CloudWatch Alarms(告警)、CloudWatch Dashboards(仪表盘)。它们共用一套 IAM 权限体系,也共用“命名空间+维度”的寻址方式。数据默认保留 15 个月,你可以按需查询历史趋势。
所以,学习 CloudWatch 的正确姿势是:先理解它是一套“感知—判断—行动”的神经系统,而不是孤立地背功能列表。当你建立这个整体框架后,后续的指标、日志、告警都只是这个框架里的零件。就像指挥中心的市长不需要亲手修电路,但必须知道哪块屏幕对应哪条街。
- 收集层Metrics 负责定时抓取数值型指标,Logs 负责收集文本型日志,二者构成监控的数据原料。
- 洞察层Dashboards 把指标画成图,Logs Insights 对日志做查询分析,将原始数据翻译成人类能读的信号。
- 行动层Alarms 对指标做阈值判断,超过阈值后通过 SNS 触发通知或自动化动作,形成闭环。
指标监控体系
城市里每个传感器都有一份“档案”。档案上写着:所属区域、安装位置、测量类型。比如“城东区—第三变电站—电压”。若没有这套档案体系,所有传感器数据混在一起,指挥中心根本分不清哪个数据来自哪里。CloudWatch 用同样的方式管理指标——命名空间(Namespace)和维度(Dimension)。
命名空间相当于“所属区域”,它把指标按来源服务归类:EC2 的 CPU 指标放在 AWS/EC2,SageMaker 的模型延迟指标放在 AWS/SageMaker,你自己上报的业务指标放在自定义命名空间如 Custom/MLApp。维度相当于“安装位置+测量类型”,用于进一步区分同一服务下的不同对象。例如 AWS/EC2 命名空间下,用 InstanceId=i-12345 定位某台机器,再用指标名 CPUUtilization 定位具体数据。
AWS 默认提供大量内置指标:EC2 的 CPU 利用率、网络流量、磁盘读写;Lambda 的调用次数、错误率、时长;SageMaker 的推理延迟、GPU 利用率等。但默认指标往往不够用——比如你想监控模型输出中“空结果”的比例,就必须上报自定义指标。通过 PutMetricData API,你可以把业务指标推给 CloudWatch,之后它就像内置指标一样参与告警和绘图。
理解命名空间与维度,就像优化城市传感器档案一样重要。如果你的自定义指标没有规范的命名空间和维度,后续写告警规则时会非常痛苦——找不到数据、分不清环境、甚至把生产环境和测试环境的数据混在一起。建议所有自定义指标都遵循 自定义命名空间/应用名/环境/实例 的层次结构,让指标天生就带着“定位信息”。
- 收集原始值每个采样周期内,CloudWatch 收到若干原始样本 $x_1, x_2, \dots, x_n$。
- 求和把窗口内所有样本加起来,作为聚合的分子。
- 除以样本数除以 $n$ 得到平均值,这就是“平均”统计方式的含义。
日志管理分析
城市里每辆公交车都有一台“黑匣子”,记录每一站的开关门时间、每一次急刹车、每一条乘客投诉。出了事故,交管部门调出黑匣子,就能还原当时发生了什么。CloudWatch Logs 就是 AWS 资源与应用的“黑匣子仓库”。
日志的存储结构分两层:日志组(Log Group)与日志流(Log Stream)。日志组是逻辑容器,通常一个应用一个组;日志流是组内的实际数据通道,通常一个实例或一个容器一个流。例如 SageMaker 端点产生的推理日志,会流入 aws/sagemaker/Endpoints 日志组下的多个日志流,每个流对应一个实例。
光有仓库还不够,还得能快速查案。Logs Insights 提供类 SQL 的查询语法,让你在数亿行日志中快速筛选出 ERROR 级别记录、统计某个错误码出现次数、或分析延迟超过 2 秒的请求占比。更强大的能力是日志指标过滤(Metric Filter):你可以定义一条规则,把日志里出现的关键词转换成数值指标。比如统计 "ERROR" 出现的次数,变成 ErrorCount 指标,进而参与告警。此外,订阅功能可以实时把日志流转发到 Kinesis、Lambda 或 OpenSearch,实现实时日志消费。
日志是故障排查的 “最后证人”。告警只能告诉你“服务出问题了”,日志才能告诉你“为什么出问题”。建议每条日志都包含请求 ID、时间戳、错误码、模型版本号等结构化字段,这样写 Logs Insights 查询时才能真正做到“一键定位”。就像黑匣子如果只录声音不录画面,事故还原就会大打折扣。
- 统计错误数通过日志过滤规则,count 出 ERROR 关键词出现的次数。
- 统计总数相同时间窗口内的所有日志行数。
- 计算比率两者相除再乘以 100,得到百分比形式的错误率。
告警规则管理
城市的每条主干道都有“限速牌”,但光有牌子还不够——需要藏在路边的摄像头自动抓拍超速车辆,并当场通知交警。CloudWatch Alarms 就扮演这个“电子警察”:它盯着指标,一旦越过阈值,就改变状态并触发动作。
一条告警规则的核心参数包括:指标(盯什么)、阈值(超过多少算异常)、周期(每次评估的时间窗口)、评估次数(连续几次超标才算数)。告警有三种状态:OK(正常)、ALARM(越界)、INSUFFICIENT_DATA(数据不足)。状态变化时,可以触发 SNS 通知、调用 Lambda、或执行 Auto Scaling 动作。
实际生产中有一个高频痛点:告警抖动。某个指标在阈值附近反复横跳,导致告警状态不断切换,邮件轰炸让人麻木。解决方案是用更长的评估窗口、更合理的“连续 n 次”设定、或直接使用 CloudWatch 异常检测(Anomaly Detection)。异常检测利用历史数据自动计算“正常波动带”,指标超出波动带才告警,大幅减少无效报警——相当于电子警察学会了“区分超速和正常变道”。
告警规则设计的核心原则是“宁可少而准,不要多而滥”。每一个告警都应该对应一个明确的故障场景和修复动作。如果一条告警触发后,你根本不知道该干什么,这条告警就是噪音。好的告警规则应该像消防报警器——只在真正有火情时才响,而不是炒个菜就响一次。
- 计算差值拿到当前评估窗口的指标值 $x$,减去阈值 $T$。
- 判断符号如果 $\Delta > 0$,说明指标越界,ALARM 标志位置 1。
- 连续判定实际系统中还要求连续 n 次评估都越界,避免瞬时抖动误报。
仪表盘可视化
指挥中心的大屏幕是所有信息的最终汇聚点。它把交通、电网、医疗等几十个系统的数据拼成一块完整的态势图,值班人员扫一眼就知道当前城市是否健康。CloudWatch Dashboards 就是这个大屏幕。
Dashboard 由一个个 Widget(小部件)组成。每个 Widget 可以展示一条指标线、一个数值、或一段告警状态列表。你可以把 EC2 CPU、GPU 利用率、模型延迟、错误率、成本趋势拼在同一个页面上,实现“一屏观全局”。它还支持跨账号、跨区域聚合——通过添加监控账户,把多个 AWS 账号的关键指标汇入一个 Dashboard,非常适合企业级多环境管理。
设计 Dashboard 的要点是“分层展示”:第一层放核心业务指标(错误率、延迟、活跃用户),第二层放系统资源指标(CPU、GPU、内存),第三层放基础设施细节(磁盘、网络)。每一层的观众不同:第一层给业务负责人看,第二层给 AI 工程师看,第三层给运维专家看。不要把一百个 Widget 全塞进一屏,否则和指挥中心满墙乱闪的屏幕没有区别——没人知道该看哪个。
好的 Dashboard 是团队的时间机器——它让你在 5 秒内回答“现在系统健康吗”,在 5 分钟内回答“过去一小时发生了什么”。如果你还在“要监控数据时去 AWS 控制台手动翻各种页面”,相当于市长不看大屏,每天跑到每条街上亲自看电表,效率和准确性都不可接受。
- 选择指标确定要展示哪个指标,如 GPUUtilization。
- 设定统计指定聚合方式为平均或最大。
- 设定周期例如 1 分钟一个数据点,决定曲线平滑度。
- 可视化映射数据点按时间顺序渲染成折线图、柱状图或数字。
与AI服务集成
智慧城市技术升级后,指挥中心不再只是“被动接警”,开始用 AI 预测哪条路要堵、哪个片区要停电。AWS 的 CloudWatch 也在与 AI 服务深度联动,让监控系统变成主动预警系统。
最典型的集成场景是 SageMaker 模型监控。模型上线后,推理延迟、GPU 利用率、错误率、并发数全部通过 CloudWatch 指标暴露出来;同时 SageMaker 内置的 Model Monitor 会把推理数据的分布漂移情况也上报到 CloudWatch,一旦发现线上数据分布与训练集差异过大,立即告警——相当于“模型也在上班打卡,状态异常会被通报”。
另一类集成是联动自动扩缩容。CloudWatch 告警触发时,除了发通知,还能直接调用 Application Auto Scaling 调整 SageMaker 端点实例数。比如 GPU 利用率连续 5 分钟超 80%,就自动加一台实例;连续 15 分钟低于 20%,就自动缩容。这就是“告警不只是通知人,而是直接替人做决策”。此外,CloudWatch 的异常检测功能也能服务于 AI 场景:当你不知道合理阈值是多少时,它自动学习历史趋势,画出正常区间带,帮模型服务自动识别异常抖动。
把 CloudWatch 与 AI 服务集成,本质上是让“监控”从被动记录变成主动治理。AI 服务最大的特点是动态性——请求量随用户行为波动,模型性能随时间衰减,GPU 资源随训练任务伸缩。静态阈值很难覆盖这些动态场景,所以学会用异常检测、自动扩缩容和模型漂移监控,是 AI 运维工程师的进阶必修课。
- 设定期望值记录当前期望的实例数量。
- 触发扩容告警 ALARM 时,目标值增加。
- 触发缩容持续低负载时,目标值减少。
最佳实践演练
城市指挥中心运行一段时间后,市长发现两个新问题:告警太多导致值班员麻木,日志保留太长导致费用膨胀。这就是 CloudWatch 使用中的真实痛点,解决方案需要一套“最佳实践”。
第一,告警降噪合并。把多个细粒度告警合并成一条“汇总告警”。例如 5 台 EC2 各自发 CPU 告警,不如合并成“EC2 集群平均 CPU 超阈值”一条告警。同时设定告警的“沉默周期”,同一告警在恢复前不重复触发。第二,生命周期管理。按日志价值设定不同的保留期:安全审计日志保留 1 年,应用调试日志保留 30 天,临时调试日志只保留 7 天。第三,多环境隔离。用独立的命名空间或账号分离生产、预发、测试环境的指标,避免互相污染。
第四,成本控制要点。CloudWatch 费用与三个因素直接相关:自定义指标数量、API 请求次数、日志存储量。建议用较高采集周期(如 1 分钟而非 5 秒)降低 PutMetricData 成本;用日志过滤只保留关键日志;定期清理废弃的自定义指标和空闲 Dashboard。把监控当成“基础设施的一部分”来做预算,而不是事后看账单才意识到超支。
最后记住一条原则:监控体系不是越复杂越好,而是与团队规模、业务阶段匹配最好。初创期 3 条核心告警就够;成熟期再逐步丰富 Dashboard 和自动化动作。就像城市指挥中心,先保证消防、急救、交通三条热线畅通,再去搭建气象、环保、能源等高级系统。逐步演进,才不会被监控体系本身拖垮。
- 指标成本按自定义指标的数量和精度计费。
- 日志成本按日志接收量、存储量和检索量计费。
- API 成本按 PutMetricData、GetMetricData 等请求次数计费。
AI 应用场景
场景一:SageMaker 模型端点的“生命体征监护”
阶段:模型部署与运维
解决的问题:模型上线后,GPU 利用率过高导致推理延迟飙升,用户大量超时。传统做法是等用户投诉后才登录 EC2 查看,定位慢、被动且低效。CloudWatch 将 SageMaker 端点的 GPUUtilization、Invocations、ModelLatency 指标实时上报并配置告警,异常时自动触发扩容和 SNS 通知。
具体案例:某 AI 绘画应用在晚间高峰期并发暴增,SageMaker 端点 GPU 利用率突破 90%。CloudWatch 告警触发,自动扩展策略在 2 分钟内增加 3 个实例,同时运维收到钉钉机器人推送的告警信息,避免了大规模超时。
场景二:基于日志的错误率自动告警
阶段:模型质量监控
解决的问题:模型推理结果出现大量空返回、超时等异常,传统的日志检索方式是“出事后人工 grep”,效率低且无法实时感知。利用 CloudWatch Logs Metric Filter 把日志中的 ERROR 关键词计数转换为 ErrorRate 指标,再绑定告警阈值,实现秒级感知。
具体案例:某智能客服机器人每天产生数千万条对话日志。通过日志指标过滤统计“意图识别失败”的出现次数,当 5 分钟内错误率超过 2% 时,CloudWatch 自动触发 Lambda 函数把异常的模型版本回滚到上一个稳定版本。
场景三:AI 服务的成本水位监控
阶段:成本优化
解决的问题:GPU 实例按秒计费,训练任务异常滞留会导致巨额费用。传统做法是手动盯账单,往往发现时已经超支。通过 CloudWatch 监控不同类型实例的使用时长与运行状态,设置成本阈值告警,超支前预警。
具体案例:某 AI 公司用 CloudWatch 监控 SageMaker 训练集群的运行时长,当某个训练任务连续运行超过 12 小时且 loss 不再下降时,触发告警并自动暂停任务,每月节省约 30% 的 GPU 费用。
Python 演示
# -*- coding: utf-8 -*-"""CloudWatch 指标与告警流程的本地模拟不依赖 AWS 账号,使用模拟数据演示:1. 上报自定义指标 -> 2. 聚合统计 -> 3. 阈值判断 -> 4. 触发告警通知"""import mathimport randomimport time class MetricRecorder: """模拟一个业务应用, 产生 CPU 类的指标数据点""" def __init__(self, name, base, noise): self.name = name self.base = base self.noise = noise self._samples = [] def generate(self, count): """生成 count 个时间序列数据点, 返回值列表""" for i in range(count): trend = 8 * math.sin(i * 0.35) + random.uniform(-self.noise, self.noise) self._samples.append(round(self.base + trend, 2)) return self._samples class CloudWatchAgent: """模拟 CloudWatch 服务端: 接收指标, 聚合, 评估告警""" def __init__(self, namespace, threshold): self.namespace = namespace self.threshold = threshold self._metric_map = {} self._alarm_sent = False def put_metric_data(self, name, samples): """把业务指标推送给 CloudWatch""" if name not in self._metric_map: self._metric_map[name] = [] self._metric_map[name].extend(samples) def evaluate_alarm(self, name, period=5): """取最近 period 个数据点求平均, 超过阈值则触发告警""" data = self._metric_map.get(name, []) if not data: return None window = data[-period:] avg = sum(window) / len(window) if avg > self.threshold and not self._alarm_sent: self._alarm_sent = True print("ALARM: {} 平均 {:.2f} 超过阈值 {}! SNS 通知已发送".format(name, avg, self.threshold)) return "ALARM" if avg <= self.threshold and self._alarm_sent: self._alarm_sent = False print("OK: {} 平均 {:.2f} 恢复到阈值 {} 以下".format(name, avg, self.threshold)) return "OK" return "OK" if avg <= self.threshold else "ALARM" def main(): recorder = MetricRecorder("GPUUtilization", base=52.0, noise=6.0) samples = recorder.generate(60) agent = CloudWatchAgent(namespace="Custom/MLApp", threshold=80.0) agent.put_metric_data("GPUUtilization", samples) print("=== CloudWatch 模拟监控 ===") for t in range(5, 61, 5): agent.evaluate_alarm("GPUUtilization", period=5) time.sleep(0.3) all_data = agent._metric_map["GPUUtilization"] print("共收集 {} 个数据点, 平均 {:.2f}, 最大 {:.2f}".format( len(all_data), sum(all_data) / len(all_data), max(all_data))) if __name__ == "__main__": main()
class MetricRecorder模拟一个业务应用,反复生成 GPU 利用率数据点。self._samples = []内部存储用_samples避免与方法名冲突。trend = 8 * math.sin(i * 0.35)用正弦波模拟指标的自然波动趋势。self._metric_map = {}模拟 CloudWatch 按指标名存放所有数据点。def evaluate_alarm(self, name, period=5)核心方法:每个周期取最近 5 个点算平均值。window = data[-period:]用列表切片拿到“最近一个评估窗口”的样本。avg = sum(window) / len(window)对应正文中的平均聚合公式。if avg > self.threshold阈值判断,等价于公式中的 Δ > 0。self._alarm_sent = False用布尔标志模拟告警“只触发一次,恢复后重置”。if __name__ == "__main__":保证模块可被 import 时不执行演示逻辑。
常见误区
误区“CloudWatch 和 CloudTrail 不都是监控工具吗?我随便用一个就行。”
正解两者分工完全不同。CloudWatch 监控的是运行状态——CPU 高不高、延迟慢不慢、日志有没有报错;CloudTrail 记录的是操作审计——谁在什么时间调用了什么 API,比如谁删除了 S3 桶。用城市来比喻:CloudWatch 是看“城市现在堵不堵、有没有火灾”的指挥中心;CloudTrail 是查“刚才谁签了拆迁令、谁修改了红绿灯配置”的纪检监察档案室。监控和审计是互补关系,缺一不可。
为何常见:两者都涉及“记录 AWS 活动”,界面上又都长得像日志列表,新手容易按功能合并记忆。
误区“指标一超阈值,我立刻就能收到告警邮件。”
正解告警需要等待评估周期完成才会触发。例如设定 5 分钟周期、连续 2 次超标,意味着指标至少要持续超标 10 分钟才会真正告警。这是为了过滤瞬时抖动,代价是响应延迟。如果业务对延迟敏感,应缩短评估周期,但同时要接受更多的噪声。
为何常见:人脑对“超过即报”的直觉和告警系统“持续超标才报”的设计存在天然偏差。
误区“我在代码里用 PutMetricData 上报了指标,为什么没看到告警?”
正解上报指标只是第一步。还需要创建告警规则、设定阈值和评估周期,指标数据才会被评估、触发通知。另外,自定义指标的组织依赖规范的命名空间与维度,如果维度命名不统一,Dashboard 上会乱成一团,甚至无法精确定位某台实例。相当于传感器装好了,但指挥中心还没给它分配档案编号和限值。
为何常见:内置指标开箱即用,容易让人误以为自定义指标也自带告警能力。
误区“日志是重要资产,全部保留一年以上肯定没错。”
正解CloudWatch Logs 的费用包含存储费和检索费,日志量会随业务增长快速膨胀。正确做法是分级管理:安全与审计日志保留一年,应用错误日志保留 30 天,Debug 日志保留 7 天。同时用日志过滤只保留有价值的信息,降低存储成本。
为何常见:数据安全合规要求强化了“多留总比少留好”的直觉,忽略了云上存储的真实账单。
误区“把 CPU、内存、磁盘、错误码全部配成告警,这样最保险。”
正解告警过多会导致“告警疲劳”——大量低价值通知淹没关键告警,值班人员逐渐麻木,真正出大事时反而没人重视。好的做法是合并告警、设定合理阈值、使用异常检测过滤抖动,确保“每一条告警都有明确的人类可执行的响应动作”。
为何常见:面对不确定性的本能反应是“多收集信息”,但监控的目的是减少决策负担,而不是增加信息噪音。
面试题
Q1. CloudWatch 的核心职责是以下哪一项?
- A.收集、洞察、行动三位一体← 正确答案
- B.只负责收集 EC2 的 CPU 指标
- C.只负责存储 S3 中的对象数据
- D.只负责用户登录认证管理
答案:A。CloudWatch 的核心是收集(Metrics/Logs)、洞察(Dashboards/Insights)、行动(Alarms/SNS)闭环。B 只提到部分功能,C 是 S3 的职责,D 是 IAM 的职责。
Q2. 在 CloudWatch 中,定位一个指标需要哪两个核心概念?
- A.命名空间与维度← 正确答案
- B.日志组与日志流
- C.可用区与区域
- D.角色与策略
答案:A。命名空间表示指标来源(如 AWS/EC2),维度进一步细分对象(如 InstanceId),两者组合才能唯一定位一个指标。B 是日志的结构概念,C 是 AWS 物理区域概念,D 是权限体系。
Q3. 下列哪项数据可以上报为 CloudWatch 自定义指标?
- A.模型推理返回的空结果比例← 正确答案
- B.EC2 实例的 CPU 利用率
- C.S3 桶的存储用量
- D.IAM 用户的权限列表
答案:A。自定义指标指用户通过 PutMetricData 上报的业务指标,如推理空结果比例。B 和 C 都是 AWS 内置指标,D 属于配置信息而非监控指标。
Q4. “指标 CPUUtilization 在 5 分钟内连续 2 次超过 80% 触发告警”中的“5 分钟”是什么?
- A.告警评估周期← 正确答案
- B.指标数据保留期
- C.日志事件延迟
- D.自动扩容间隔
答案:A。评估周期决定每次评估窗口的长度,5 分钟周期加连续 2 次超阈值意味着至少持续超标 10 分钟才会告警。B 是数据保存时长,C 是日志处理延迟,D 与扩缩容冷却时间相关。
Q5. 下列哪些方法可以有效减少 CloudWatch 告警抖动?
- A.延长告警评估周期← 正确答案
- B.增加“连续 n 次”判定← 正确答案
- C.使用异常检测波动带← 正确答案
- D.把阈值直接设为 0
答案:ABC。延长周期、连续判定、异常检测都是过滤抖动的经典手段。D 设置阈值 0 只会让告警永远触发,属于错误做法。
Q6. 某应用每分钟产生百万级日志,需要实时统计 ERROR 出现次数,应使用哪个功能?
- A.日志指标过滤← 正确答案
- B.日志手动下载
- C.控制台日志搜索
- D.导出到 S3 手工分析
答案:A。日志指标过滤能把日志中的关键词实时转换为指标并聚合统计,适合对海量日志做计数。B、C 不适合实时统计,D 的延迟和人工成本都过高。
Q7. 异常检测(Anomaly Detection)与传统固定阈值告警的最大区别是什么?
- A.它能自动学习历史波动范围← 正确答案
- B.它完全不产生告警
- C.它只能用于 EC2 指标
- D.它不需要收集任何指标
答案:A。异常检测基于历史数据自动计算正常波动带,适合阈值不确定的业务指标。B 错误,它也会告警;C 错误,它支持多种指标;D 错误,它必须有历史数据作为学习基础。
Q8. 下列关于 CloudWatch 与 SageMaker 集成的说法正确的有哪些?
- A.可监控 GPU 利用率和推理延迟← 正确答案
- B.告警可触发自动扩缩容← 正确答案
- C.可监控模型数据漂移← 正确答案
- D.无法监控自定义训练指标
答案:ABC。SageMaker 的 GPU/延迟指标可由 CloudWatch 收集(A),告警可联动 Application Auto Scaling(B),Model Monitor 可上报数据漂移(C)。D 错误,训练脚本也可以通过 PutMetricData 上报自定义指标。
Q9. 在 CloudWatch 中,日志的默认最长保留周期是多少?
- A.15 个月← 正确答案
- B.3 天
- C.1 年
- D.永久
答案:A。CloudWatch 默认按数据保留策略最多保存 15 个月的指标数据。这也是为什么说 CloudWatch 可以支持长期趋势分析。
Q10. 哪些做法符合 CloudWatch 成本控制最佳实践?
- A.适当降低自定义指标采集频率← 正确答案
- B.为不同日志设定差异化保留期← 正确答案
- C.定期清理废弃 Dashboard← 正确答案
- D.对每个实例单独创建高精度告警
答案:ABC。降低采集频率、差异保留期、清理废弃资源都能有效控制成本。D 反而会增加自定义指标数量和告警噪音,不符合最佳实践。