aws-doc/课程/第五阶段-监控与运维/第33天-CloudWatch监控.md
2026-05-08 10:24:39 +08:00

202 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 第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 的定价模型、省钱技巧,以及如何设置预算告警避免意外花费。