aws-doc/课程/第五阶段-监控与运维/第33天-CloudWatch监控.md

202 lines
6.3 KiB
Markdown
Raw Normal View History

2026-05-08 10:24:39 +08:00
# 第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 Streaminstance-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 应用的监控体系
```
第一层:基础设施监控
├── EC2CPU、内存、磁盘、网络
├── 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 的定价模型、省钱技巧,以及如何设置预算告警避免意外花费。