AWS CloudWatch 监控告警实战:从零为 EC2/RDS/Lambda 搭建监控告警体系(2026最新教程)
Meta Description: AWS CloudWatch 监控告警完整教程:EC2/RDS/Lambda 关键指标监控、CPU 高负载自动告警、CloudWatch 费用真相与免费额度、AWS CLI 一键建告警,附价格对比表与 FAQ。
- 前言
- CloudWatch 是什么:一张表看懂监控全家桶
- 费用真相:CloudWatch 哪些免费、哪些悄悄收费
- 实操一:为 EC2 添加 CPU 高负载告警(15 分钟)
- 实操二:采集内存/磁盘指标(CloudWatch Agent 安装)
- 实操三:RDS 与 Lambda 监控告警
- 实操四:CloudWatch Logs 集中收集应用日志
- 方案对比:轻量用户 / 团队 / 企业怎么配
Meta Description: AWS CloudWatch 监控告警完整教程:EC2/RDS/Lambda 关键指标监控、CPU 高负载自动告警、CloudWatch 费用真相与免费额度、AWS CLI 一键建告警,附价格对比表与 FAQ。
关键词:AWS CloudWatch、CloudWatch 告警、EC2 监控、RDS 监控、Lambda 监控、CloudWatch 费用、SNS 告警通知
前言
答案是:CloudWatch 是 AWS 官方自带的监控全家桶,EC2 开箱即用 5 分钟就能配上 CPU 告警,RDS 和 Lambda 的指标全部免费,只有日志和自定义指标才收费——新手按本文的"免费额度内配置法"操作,前 12 个月基本 0 成本。决策口诀:指标用 CloudWatch 原生免费项,告警只建关键的 3~5 条,日志按量精打细算,千万别开全量详细监控。
很多用户上云后第一年没出问题,第二年突然收到一张几百美金的账单,其中很大一部分来自 CloudWatch:EC2 详细监控、海量自定义指标、日志无限量摄入。本文从零开始,带你用最少的花费搭出一套"服务器挂了 10 分钟就收到邮件"的监控体系,并给出价格对比表和避坑清单。
一、CloudWatch 是什么:一张表看懂监控全家桶
CloudWatch 由四块核心能力组成:指标(Metrics)、日志(Logs)、告警(Alarms)、仪表盘(Dashboards)。EC2、RDS、Lambda 等几乎所有 AWS 服务都会自动上报基础指标,不需要装任何东西。
| 组件 | 作用 | 典型用途 | 是否免费 |
|---|---|---|---|
| CloudWatch Metrics | 收集服务指标 | EC2 CPU/网络、RDS 连接数 | EC2/RDS/Lambda 基础指标免费 |
| CloudWatch Alarms | 指标超阈值触发通知 | CPU>80% 连续 10 分钟告警 | 免费 10 条告警/月 |
| CloudWatch Logs | 集中存应用日志 | nginx/Java/Python 日志检索 | 免费 5GB 摄入/月 |
| CloudWatch Dashboards | 可视化面板 | 一屏看全站健康状态 | 免费 3 个面板 |
| CloudWatch Agent | 采集内存/磁盘指标 | 装到 EC2 上采集 mem/disk | Agent 免费,指标按条计费 |
| SNS | 告警通知通道 | 邮件/短信/钉钉回调 | 免费 100 万次请求/月 |
关键认知:EC2 默认的 5 分钟粒度基础监控(CPUUtilization、NetworkIn/Out、DiskRead/Write、StatusCheck)完全免费,这些够 90% 的新手使用。只有内存、磁盘使用率这类"实例内部"指标需要装 CloudWatch Agent 才能采到。
二、费用真相:CloudWatch 哪些免费、哪些悄悄收费
CloudWatch 免费套餐(所有账号通用,12 个月有效):
- 10 个自定义指标、10 个告警(标准分辨率)
- 1,000,000 次 API 请求/月(GetMetricData 等)
- 5GB 日志摄入 + 5GB 归档/月
- 3 个仪表盘,每个最多 50 个指标
超出后的主要收费项(按 2026 年参考价,随区域浮动):
| 收费项 | 参考价 | 容易踩的坑 |
|---|---|---|
| EC2 详细监控(1 分钟粒度) | 约 $3.5/实例/月 | 控制台勾选后自动开启,几十台实例就是大几十刀 |
| 自定义指标 | 约 $0.30/指标/月 | CloudWatch Agent 每台实例默认上报 30+ 指标 |
| 告警 | 约 $0.10/条/月 | 数量多了也是钱,留 10 条以内 |
| 日志摄入 | 约 $0.50/GB/月 | 应用打日志不控制,一个月几百 GB 很正常 |
| 日志存储 | 约 $0.03/GB/月 | 按量累积,建议设 7 天保留期 |
| 仪表盘 | 约 $3/个/月 | 超过 3 个才收费 |
| GetMetricData API | 约 $0.01/千次 | 脚本轮询太频繁会收费 |
省钱的三个铁律:① 不要开启 EC2 详细监控,5 分钟粒度配合 2 个周期评估足够;② CloudWatch Agent 只采集 3~5 个必要指标(mem_used_percent、disk_used_percent),别用默认全量配置;③ 日志保留期设 7 天(aws logs put-retention-policy),不设默认永久保存。
三、实操一:为 EC2 添加 CPU 高负载告警(15 分钟)
控制台方式(最简单):
- 打开 EC2 控制台 → 选中实例 → 底部"监控"标签页,确认能看到 CPUUtilization 图表(免费指标,无需任何配置)
- 左侧菜单进入 CloudWatch → 告警 → 所有告警 → 点"创建告警"
- 选择指标 → 命名空间 AWS/EC2 → 指标名称 CPUUtilization → 勾选你的实例 ID → 选择"平均"
- 条件设置:大于 80%,连续 2 个数据点(每个 5 分钟,即持续 10 分钟高负载才触发,避免误报)
- 通知:新建 SNS 主题 → 添加邮件订阅 → 确认订阅邮件
- 告警名称
ec2-cpu-high→ 创建
先建 SNS 通知主题(只需要一次,后面所有告警复用):
// 创建主题并订阅你的邮箱,然后去邮箱点确认链接
aws sns create-topic --name my-alerts
aws sns subscribe --topic-arn arn:aws:sns:ap-northeast-1:123456789012:my-alerts \
--protocol email --notification-endpoint [email protected]
CLI 一键创建 CPU 告警(推荐,可写进脚本批量部署):
aws cloudwatch put-metric-alarm \
--alarm-name ec2-cpu-high \
--alarm-description "CPU average > 80% for 10 minutes" \
--metric-name CPUUtilization \
--namespace AWS/EC2 \
--statistic Average \
--period 300 \
--evaluation-periods 2 \
--threshold 80 \
--comparison-operator GreaterThanThreshold \
--dimensions Name=InstanceId,Value=i-0123456789abcdef0 \
--alarm-actions arn:aws:sns:ap-northeast-1:123456789012:my-alerts
四、实操二:采集内存/磁盘指标(CloudWatch Agent 安装)
EC2 默认指标不含内存使用率,需要安装 CloudWatch Agent。以 Amazon Linux 2 为例:
// 1. 安装 agent(Ubuntu 用 apt 安装 amazon-cloudwatch-agent 或下载 deb 包)
sudo yum install -y amazon-cloudwatch-agent
// 2. 启动配置向导,按提示只勾选 memory 和 disk 指标,单位选 percent
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
// 3. 启动并设为开机自启
sudo systemctl start amazon-cloudwatch-agent
sudo systemctl enable amazon-cloudwatch-agent
装好后指标会出现在命名空间 CWAgent 下:mem_used_percent、disk_used_percent。注意:CWAgent 的指标属于"自定义指标",免费额度内只有 10 个,务必用向导只勾选需要的项,否则每台实例每月多出约 $10 的指标费。
然后照第三节的流程创建内存告警(命名空间选 CWAgent,指标 mem_used_percent,阈值 85%)。这一步做完,你的服务器"CPU 打满"和"内存耗尽"都会自动发邮件。
五、实操三:RDS 与 Lambda 监控告警
RDS 数据库最该盯的 4 个指标:CPUUtilization(CPU 打满)、DatabaseConnections(连接数接近 max_connections 说明连接泄漏)、FreeStorageSpace(磁盘快满)、ReadLatency/WriteLatency(慢查询)。创建告警时命名空间选 AWS/RDS,维度选 DBInstanceIdentifier。
// 磁盘剩余低于 2GB 告警
aws cloudwatch put-metric-alarm \
--alarm-name rds-storage-low \
--metric-name FreeStorageSpace \
--namespace AWS/RDS \
--statistic Minimum --period 300 --evaluation-periods 2 \
--threshold 2000000000 --comparison-operator LessThanThreshold \
--dimensions Name=DBInstanceIdentifier,Value=mydb \
--alarm-actions arn:aws:sns:ap-northeast-1:123456789012:my-alerts
Lambda 函数:Errors(错误次数)、Duration(执行耗时)、Throttles(限流次数)三个指标全部免费自动上报。控制台 → CloudWatch → 告警 → 创建告警 → 命名空间 AWS/Lambda → 选函数名和 Errors,阈值设 0、大于、1 个周期——只要函数报错就立刻收到通知,排查线上问题效率翻倍。
六、实操四:CloudWatch Logs 集中收集应用日志
把服务器日志接入 CloudWatch Logs,就不用再 ssh 上服务器 tail 了:
// 把 nginx 访问日志实时送入 CloudWatch Logs
aws logs put-log-events \
--log-group-name /nginx/access \
--log-stream-name web-01 \
--log-events timestamp=1700000000000,message="192.168.1.1 GET / 200"
生产环境更常用的做法是装 CloudWatch Agent 后,在 /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json 里配置 logs 段,指定日志文件路径和 log group 名称,Agent 会自动采集。三个省钱设置:保留期设 7 天(aws logs put-retention-policy --log-group-name /nginx/access --retention-in-days 7)、按 log group 区分应用(查问题好定位)、只收应用日志不收系统无关日志(每 GB 0.5 美金,量大惊人)。
七、方案对比:轻量用户 / 团队 / 企业怎么配
| 方案 | 适用对象 | 监控范围 | 月成本参考 | 配置要点 |
|---|---|---|---|---|
| 轻量版 | 个人项目、博客、小站 | EC2 CPU + 状态检查 + 免费额度内 3 条告警 | $0 | 只用原生指标,不装 Agent,SNS 邮件通知 |
| 标准版 | 团队线上业务 | EC2 CPU/内存 + RDS + Lambda + 日志 7 天 | $5~20 | 装 Agent 但只采 5 个指标,告警 10 条内 |
| 企业版 | 多账号/高可用要求 | 全链路指标 + 日志全文检索 + 自定义仪表盘 + 详细监控 | $50+ | 配合 CloudTrail、事件告警,按团队拆分 SNS 主题 |
个人和小团队强烈建议从"轻量版"起步:EC2 原生 CPU 告警 + RDS 磁盘告警 + Lambda 错误告警,三张王牌全部落在免费额度里,等业务真需要了再升级,避免"监控比服务器还贵"的尴尬。
八、五个新手最容易踩的 CloudWatch 坑
- 误开 EC2 详细监控:创建实例时勾了"详细监控",每月每台多 $3.5,几十台就是三位数账单。检查方法:EC2 控制台看实例,监控列显示"启用"即已开启,到 CloudWatch 设置里关掉。
- 告警没配 SNS 或没确认邮件:创建告警后忘了去邮箱点 SNS 订阅确认链接,告警"已触发"但你永远收不到邮件——这是最常见的假告警故障。
- CloudWatch Agent 默认全量指标:向导一路回车,每台实例上报 30+ 自定义指标,轻松冲破 10 个免费额度。
- 日志无限量摄入:应用日志带 debug 级别且不轮转,一个月几百 GB,账单 $150+。务必设保留期 + 日志级别过滤。
- 告警阈值设置过低:CPU 大于 30% 就告警,一天收 50 封邮件,最后把通知静音了,真正出事时反而没人看。阈值按"持续 2 个周期 + 明显异常"来设。
九、常见问题 FAQ
Q: CloudWatch 免费吗? A: 免费套餐内:10 个自定义指标、10 个告警、5GB 日志摄入、3 个仪表盘。EC2/RDS/Lambda 的基础指标本身永久免费,超出免费额度才按量计费。
Q: EC2 监控显示的内存指标在哪里看? A: EC2 默认不采集内存,需要安装 CloudWatch Agent 后到命名空间 CWAgent 下查看 mem_used_percent。
Q: 告警触发了为什么没收到邮件? A: 三个原因按顺序排查:① SNS 订阅邮件没点确认链接;② 告警的 alarm-actions 没绑定 SNS 主题;③ 邮件进了垃圾箱。
Q: 可以监控多台实例吗? A: 可以,每台实例创建一条告警即可(维度 InstanceId 不同);更优雅的做法是用 Auto Scaling 组的维度统一建一条告警,覆盖组内所有实例。
Q: CloudWatch 和第三方监控(Zabbix/Prometheus)怎么选? A: 单账号、AWS 原生服务为主选 CloudWatch,零运维;多云或需要自定义采集就用 Prometheus/Grafana;Zabbix 适合已有传统机房监控体系的团队。
总结
监控的本质是"在故障影响用户之前先通知到你"。按本文路线:免费额度内建好 EC2 CPU/内存告警 + RDS 磁盘告警 + Lambda 错误告警,日志保留 7 天,SNS 邮件统一收通知——一套 0 成本的监控体系 30 分钟就能上线。等业务增长再按"标准版/企业版"升级,每一分钱都花在刀刃上。想进一步省钱,还可以配合预留实例和 Spot 实例降低算力成本(见 AWS EC2 选购教程),并定期用 AWS 账单管理 10 个设置 复盘账单。
⚠️ 文中价格为 2026 年参考价,实际费用随区域和官方调价变动,请以 AWS 官网为准。
🚀 需要 AWS 国际版账号?通过 3.chengzicloud.cloud 获取最新注册教程与专属优惠,助你轻松上云。
本文由 3.chengzicloud.cloud 提供,点击访问首页了解更多