6.3 KiB
6.3 KiB
第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 天)。
今天的小测验
- CloudWatch 的四大功能分别是什么?
- 什么是 CloudWatch 告警?它可以触发哪些动作?
- 为什么需要安装 CloudWatch Agent?它能收集什么默认看不到的指标?
- 如何设计一个合理的告警分级体系?
延伸阅读
明天预告
明天学习成本管理——如何控制你的 AWS 账单。了解 AWS 的定价模型、省钱技巧,以及如何设置预算告警避免意外花费。