# 第33天:CloudWatch——监控一切 ## 今天你将学到什么 今天学习 CloudWatch——AWS 的监控核心服务。它收集指标、展示仪表板、设置告警、收集日志。是你了解系统运行状态的"眼睛"。 --- ## 为什么需要监控 ### 没有监控的世界 - 用户打电话来:"你们网站打不开了!"——你才知道出了问题 - 数据库磁盘满了,应用崩溃——事后才发现 - 月底账单暴涨——不知道是哪个服务在烧钱 - 应用变慢了——不知道是哪个环节的问题 ### 有监控的世界 - CPU 使用率超过 80%——自动告警,还没出问题就提前处理 - 磁盘使用率达到 70%——自动扩容或清理 - API 错误率突然上升——立刻通知开发团队 - 响应时间变慢——精确定位到是数据库查询慢了 **类比**:CloudWatch 就像汽车的仪表盘。没有仪表盘你也能开车,但你不知道油还剩多少、发动机温度是否正常、时速多少。有了仪表盘,一切尽在掌握。 --- ## CloudWatch 的四大功能 ### 1. 指标(Metrics)——数字化的运行状态 指标是一个随时间变化的数值。AWS 服务自动发送指标到 CloudWatch。 **常见指标举例**: | 服务 | 指标 | 含义 | |------|------|------| | EC2 | CPUUtilization | CPU 使用率 | | EC2 | NetworkIn/Out | 网络流入/流出字节数 | | RDS | DatabaseConnections | 数据库连接数 | | RDS | FreeStorageSpace | 剩余磁盘空间 | | ALB | RequestCount | 请求总数 | | ALB | TargetResponseTime | 后端响应时间 | | Lambda | Invocations | 调用次数 | | Lambda | Errors | 错误次数 | | Lambda | Duration | 执行时间 | | SQS | ApproximateNumberOfMessages | 队列中的消息数 | **自定义指标**:你也可以发送自己的业务指标,比如"每分钟注册用户数"、"订单金额"等。 ### 2. 告警(Alarms)——自动预警 当指标超过阈值时,自动触发动作。 **告警的三种状态**: - OK:一切正常 - ALARM:超过阈值,触发告警 - INSUFFICIENT_DATA:数据不足,无法判断 **告警可以触发的动作**: - 发送通知(SNS → 邮件/短信/Slack) - 自动扩展(Auto Scaling 加机器) - 执行 Lambda 函数(自动修复) - 停止/终止 EC2 实例 **常见告警设置**: | 告警 | 条件 | 动作 | |------|------|------| | CPU 过高 | CPU > 80% 持续 5 分钟 | 通知 + Auto Scaling 扩展 | | 磁盘快满 | 剩余空间 < 20% | 通知运维团队 | | 错误率上升 | 5xx 错误 > 1% 持续 3 分钟 | 通知开发团队 | | 响应变慢 | P99 延迟 > 2 秒 | 通知 + 自动排查 | | 账单异常 | 预估月费 > 预算 | 通知管理层 | ### 3. 日志(Logs)——详细的运行记录 CloudWatch Logs 集中收集和存储所有日志。 **日志来源**: - EC2 实例的应用日志(需要安装 CloudWatch Agent) - Lambda 函数的输出(自动发送) - ECS 容器的日志(配置日志驱动) - API Gateway 的访问日志 - VPC Flow Logs **日志的组织结构**: ``` 日志组(Log Group):/app/order-service └── 日志流(Log Stream):instance-1/2024-01-15 └── 日志事件:[2024-01-15 10:30:15] ERROR: Database connection timeout ``` **Logs Insights**:用类 SQL 语法查询日志。 比如查找最近 1 小时内所有错误: ``` fields @timestamp, @message | filter @message like /ERROR/ | sort @timestamp desc | limit 50 ``` ### 4. 仪表板(Dashboards)——可视化大屏 把多个指标和日志组合成一个可视化页面。 **典型的运维仪表板包含**: - 请求量趋势图 - 错误率曲线 - 响应时间分布 - CPU/内存使用率 - 数据库连接数 - 队列积压情况 一眼就能看出系统整体健康状况。 --- ## 实际监控方案 ### 一个 Web 应用的监控体系 ``` 第一层:基础设施监控 ├── EC2:CPU、内存、磁盘、网络 ├── RDS:连接数、查询延迟、磁盘空间 ├── ElastiCache:内存使用、命中率 └── ALB:请求量、错误率、延迟 第二层:应用监控 ├── API 响应时间(P50、P95、P99) ├── API 错误率(4xx、5xx) ├── 业务错误日志 └── 依赖服务调用延迟 第三层:业务监控 ├── 每分钟注册用户数 ├── 每分钟订单数 ├── 支付成功率 └── 用户活跃度 ``` ### 告警分级 | 级别 | 条件 | 响应 | |------|------|------| | P1 紧急 | 服务完全不可用 | 立刻通知所有人,5 分钟内响应 | | P2 严重 | 部分功能受影响 | 通知值班人员,30 分钟内响应 | | P3 警告 | 性能下降但可用 | 通知开发团队,当天处理 | | P4 信息 | 需要关注但不紧急 | 记录,下次迭代处理 | --- ## CloudWatch Agent 默认情况下,CloudWatch 只能看到 EC2 的 CPU、网络、磁盘 IO 等外部指标。要看内存使用率、磁盘空间等内部指标,需要安装 CloudWatch Agent。 **CloudWatch Agent 能收集**: - 内存使用率(默认看不到!) - 磁盘空间使用率 - 应用日志文件 - 自定义指标 --- ## 成本注意事项 | 功能 | 免费额度 | 超出后费用 | |------|----------|-----------| | 基本指标 | AWS 服务自带指标免费 | - | | 自定义指标 | 前 10 个免费 | $0.30/指标/月 | | 告警 | 前 10 个免费 | $0.10/告警/月 | | 日志存储 | 5GB 免费 | $0.50/GB/月 | | 仪表板 | 前 3 个免费 | $3/仪表板/月 | **建议**:学习阶段用免费额度完全够用。生产环境注意日志量,设置日志保留期限(比如保留 30 天)。 --- ## 今天的小测验 1. CloudWatch 的四大功能分别是什么? 2. 什么是 CloudWatch 告警?它可以触发哪些动作? 3. 为什么需要安装 CloudWatch Agent?它能收集什么默认看不到的指标? 4. 如何设计一个合理的告警分级体系? --- ## 延伸阅读 - [CloudWatch 用户指南](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/) - [CloudWatch Logs Insights 语法](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html) - [CloudWatch Agent 配置](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html) --- ## 明天预告 明天学习成本管理——如何控制你的 AWS 账单。了解 AWS 的定价模型、省钱技巧,以及如何设置预算告警避免意外花费。