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