mos-nabih/aws-cloudwatch-incident-response

GitHub: mos-nabih/aws-cloudwatch-incident-response

AWS云监控与事件响应实验室

Stars: 0 | Forks: 0

# 结算服务可观测性 部署在 AWS 上的结算 API,具有结构化 JSON 日志、自定义业务指标、CloudWatch 仪表板、警报、SNS 通知和记录的延迟事件。 本项目的目标是可观测性,而非应用复杂性。服务故意保持小巧,以便于监控、警报和事件响应工作易于检查。 ## 架构 ``` Client / traffic generator | v Application Load Balancer | +--> AWS/ApplicationELB metrics | v EC2 instance - FastAPI checkout service - systemd service - CloudWatch Agent | +--> structured JSON logs -> CloudWatch Logs +--> custom checkout metrics -> CloudWatch Metrics +--> host metrics -> CloudWatch Metrics | v CloudWatch Dashboard + CloudWatch Alarms -> SNS Email ``` Terraform 管理 EC2 实例、ALB、安全组、IAM 角色、CloudWatch 日志组、仪表板、警报和 SNS 主题。 ## 包含内容 | 区域 | 实现 | | --- | --- | | 工作负载 | 位于应用程序负载均衡器后面的 EC2 上的 FastAPI 结算服务 | | 日志 | 带有关联 ID 的结构化 JSON 请求日志 | | 日志传输 | CloudWatch Agent 将应用程序日志发送到 `/checkout-service/app` | | 标准指标 | ALB 请求计数、延迟、HTTP 状态码、目标健康 | | 自定义指标 | 结算开始、成功、失败、支付拒绝、结算价值 | | 仪表板 | 带有 RED/USE 视图和业务指标的 CloudWatch 仪表板 | | 警报 | 带有 SNS 邮件通知的 CloudWatch 警报 | | 事件 | 结算路径中的支付提供程序延迟,通过 RED/USE 诊断 | ## 仓库结构 ``` app/ FastAPI app, requirements, deployment helper config/ CloudWatch dashboard, alarms, and agent config docs/ Deployment guide, dashboard guide, runbook infra/ Terraform infrastructure presentation/ HTML/PDF slides and demo script scripts/ Traffic generator and repeatable incident runner screenshots/ Final screenshots and incident data for submission ``` ## API 端点 | 端点 | 目的 | | --- | --- | | `GET /health` | 由 ALB 目标组使用的健康检查 | | `POST /checkout` | 正常结算支付路径 | | `POST /checkout/simulate-latency` | 用于事件测试的受控慢支付提供程序路径 | | `POST /checkout/simulate-error` | 受控 500 错误路径 | | `POST /checkout/simulate-cpu` | 受控 CPU 负载路径 | ## 部署 1. 配置 AWS 凭据。 2. 使用区域、密钥对、警报电子邮件和允许的 CIDR 更新 `infra/terraform.tfvars`。 3. 部署: ``` cd infra terraform init terraform apply ``` 4. 确认 SNS 邮件订阅。 5. 使用 Terraform 输出的 `service_url` 进行所有流量生成。 ## 测试流量 生成基线结算流量: ``` python3 scripts/generate_traffic.py \ --url http://ALB_DNS_NAME \ --scenario normal \ --requests 50 \ --sleep 0.5 ``` 运行可重复的事件: ``` python3 scripts/run_incident.py \ --url http://ALB_DNS_NAME \ --baseline-seconds 300 \ --incident-seconds 120 \ --recovery-seconds 300 \ --baseline-concurrency 2 \ --incident-concurrency 8 \ --baseline-interval 0.5 \ --incident-interval 0 \ --timeout 10 ``` 完成后销毁: ``` cd infra terraform destroy ``` ## 关键截图 ### CloudWatch 仪表板 ![CloudWatch 仪表板概览](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/af2b2e6607042632.png) ### 金色信号 ![金色信号仪表板部分](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/ab810da957042632.png) ### 事件延迟峰值 ![事件仪表板延迟峰值](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/af2b2e6607042632.png) ### 日志调查 ![CloudWatch 日志洞察延迟查询](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/01e06d5ff0042633.png) ### 资源利用率 ![资源利用率仪表板部分](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/6a2b54e715042634.png) ### 警报证据 ![高延迟警报图](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/7e265383f5042635.png) ### 业务指标快照 ![业务指标支付拒绝](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/8a4fe0f52d042636.png) ### 业务指标 在事件期间,CloudWatch 业务指标保持可用,并提供了对客户端健康状态的第二视角,超越了基础设施指标。 ## 事件摘要 在 **2026-05-29 从 12:26:37 到 12:38:41 UTC** 期间,服务运行了受控基线 -> 延迟峰值 -> 恢复测试。在峰值期间,结算请求触发了慢支付提供程序路径,327 个请求返回了 `200`,而 18 个客户端请求在等待降级路径时超时。 CloudWatch 检测到问题: - ALB p95 `TargetResponseTime` 在 `12:31 UTC` 达到 `2.079s`,在 `12:32 UTC` 达到 `2.094s`,在 `12:33 UTC` 达到 `2.130s`。 - `checkout-service-HighLatencyWarning` 在 `2026-05-29 12:35:08 UTC` 进入 `ALARM` 状态,并在 `12:37:08 UTC` 返回 `OK`。 - 日志洞察显示 `/checkout/simulate-latency` 请求的延迟约为 `2035ms` 到 `2098ms`。 - EC2 CPU、内存、磁盘和目标健康保持正常,因此问题不是主机饱和。 事件运行者观察到更高的 p95 为 `10110.44ms`,因为降级峰值还产生了 18 个客户端超时,因此客户端观察到的延迟比 ALB 延迟指标(针对完成的响应)更差。 根本原因:结算路径中的支付提供程序行为缓慢。 立即缓解措施:切换到备用结算路径或禁用降级的支付提供程序集成。 长期修复:提供程序超时、提供程序特定延迟警报、回退路由和发布前的性能测试。 ## 文档 | 文件 | 目的 | | --- | --- | | [ARCHITECTURE.md](ARCHITECTURE.md) | 系统设计、组件、数据流 | | [INSTRUMENTATION.md](INSTRUMENTATION.md) | 日志、关联 ID、标准和自定义指标 | | [MONITORING.md](MONITORING.md) | 仪表板设计、RED/USE 方法 | | [ALERTING.md](ALERTING.md) | 警报阈值和响应程序 | | [INCIDENTS.md](INCIDENTS.md) | 事件时间线、根本原因分析、截图、经验教训 | | [docs/runbook.md](docs/runbook.md) | 运营故障排除步骤 | | [docs/dashboard-guide.md](docs/dashboard-guide.md) | 如何阅读仪表板 | | [docs/deployment.md](docs/deployment.md) | 部署和清理说明 |
标签:AV绕过, AWS, CloudWatch, DPI, EC2, ECS, FastAPI, Homebrew安装, IaC, OISF, SNS通知, Terraform, 业务指标, 云服务监控, 仪表盘, 后端开发, 安全告警, 性能监控, 支付处理, 故障诊断, 日志管理, 特权提升, 结构化日志, 自动化部署, 自定义指标, 警报, 负载均衡