eamanze/aws-slo-error-budget-dashboard
GitHub: eamanze/aws-slo-error-budget-dashboard
该项目是一个受生产环境启发的 SRE 可观测性平台,通过完整的 SLO 定义、错误预算追踪、多窗口告警和故障演练来监控和保障服务的可靠性。
Stars: 0 | Forks: 0
# AWS SLO 与错误预算仪表板
[](https://github.com/eamanze/aws-slo-error-budget-dashboard/actions/workflows/ci.yml)
[](https://github.com/eamanze/aws-slo-error-budget-dashboard/actions/workflows/terraform.yml)
[](https://github.com/eamanze/aws-slo-error-budget-dashboard/actions/workflows/security.yml)
一个受生产环境启发的 SRE 作品集项目,将 HTTP 可靠性转化为可衡量的服务等级目标(SLO)。它构建了完整的本地可观测性路径,检测快速和持续的 error-budget 耗尽情况,捕获故障证据,并提供经过加固的 AWS ECS/Fargate 部署。
## 本项目展示的内容
- 使用 Blackbox Exporter 独立衡量的以用户为中心的可用性
- 从容器化的 Flask 服务中导出的请求成功率和延迟 SLI
- 99.5% 的 28 天滚动可用性 SLO 和明确的 error-budget 策略
- 通过 Alertmanager 路由的多窗口、多燃烧率告警
- 以代码形式配置的 Grafana 仪表板和数据源
- 确定性的故障注入、负载生成、runbook 和事件报告
- 位于多可用区 ALB 后的私有 ECS/Fargate 任务,且无 SSH 访问权限
- 用于测试、配置、Terraform、镜像、依赖项和安全报告的 CI
## 架构
```
flowchart LR
Client --> App[Demo API]
Prom[Prometheus] -->|metrics| App
Prom -->|target URL| BB[Blackbox Exporter]
BB -->|independent probe| App
Prom --> AM[Alertmanager]
AM --> IR[Incident receiver]
IR --> Evidence[Alert evidence]
Grafana --> Prom
```
独立探测很重要:当进程宕机时,应用程序计数器会消失,而用户可见的可用性 SLI 必须记录该停机时间。请参阅[架构决策](docs/architecture.md)。
## 快速开始
环境要求:Docker 及 Compose、Python 3 和 Make。
```
make up
make load-test
open http://localhost:3000
```
Grafana 使用 `.env` 中的凭据,`make up` 会从 `.env.example` 创建该文件。在共享环境之前请修改它们。本地服务绑定到 `127.0.0.1`:
| Service | URL |
|---|---|
| Demo API | |
| Grafana | |
| Prometheus | |
| Alertmanager | |
运行检查:
```
make test
make validate
```
## 可靠性演练
注入确定性故障并保持流量持续流动:
```
make fault-errors
python3 load-tests/load.py || true
make fault-clear
```
如需进行运行时间足够长以测试告警时机的自动化演练:
```
make incident
```
Alertmanager 将 webhook 事件存储在命名卷中;演练会将它们复制到 `artifacts/alert-events.jsonl` 并创建带有时间戳的草案报告。请补充你观察到的 MTTD/MTTR 和调查结果,而不是直接将生成的模板当作已完成的事件报告。
其他受控实验:
```
make fault-latency
make fault-clear
docker compose stop app # black-box availability records a total outage
docker compose start app
```
## SLO
| 用户体验 | 目标 | 窗口 | 来源 |
|---|---:|---:|---|
| 成功的外部 HTTP 探测 | 99.5% | 滚动 28d | Blackbox Exporter |
| `GET /` 在 500 ms 内完成 | 99% | 滚动 28d | 应用直方图 |
仪表板还会将请求成功率和 p95 延迟显示为诊断指标。告警规则结合了 14.4x 燃烧率下的 5m/1h 窗口和 3x 燃烧率下的 30m/6h 窗口。完整的定义和限制请参见 [docs/slo.md](docs/slo.md);发布策略请参见 [docs/error-budget-policy.md](docs/error-budget-policy.md)。
## AWS 部署
Terraform 创建:
- 跨越两个可用区的 VPC
- 公有 ALB 子网和私有 ECS 任务子网
- 包含两个任务、健康检查、回滚和自动伸缩的 ECS/Fargate 服务
- 最小权限任务角色、受限安全组、ECR 扫描和不可变标签
- CloudWatch 日志/告警和可选的 AWS Budget 通知
- 使用 ACM 证书的可选 TLS 1.2/1.3
部署前请查阅 [terraform/README.md](terraform/README.md)。NAT 网关、ALB 和 Fargate 任务会产生持续费用。CI 不会自动应用任何基础设施。
## 仓库结构图
| 路径 | 用途 |
|---|---|
| `app/` | API、Prometheus 监测代码、测试和加固镜像 |
| `monitoring/` | Prometheus、Alertmanager、Blackbox Exporter 和 Grafana 配置 |
| `load-tests/` | 无依赖负载生成器 |
| `scripts/` | 可重复的故障与事件演练 |
| `runbooks/` | 与告警关联的运维响应流程 |
| `terraform/` | AWS ECS/Fargate 基础设施 |
| `docs/` | 架构、SLO、策略、安全和事件材料 |
| `.github/` | CI、安全扫描、依赖项更新和贡献模板 |
## 设计限制
- 这是受生产环境启发的,而非声称达到了生产级别。该应用程序没有数据库或业务依赖。
- 使用单个 NAT 网关是为了控制实验成本,但无法提供多可用区容错能力。
- 本地 Prometheus 提供完整的 SLO 演示;AWS 使用 CloudWatch 进行基线运维监控。生产环境的扩展方案应使用 Amazon Managed Service for Prometheus 和 Amazon Managed Grafana。
- 长窗口指标需要时间才能成熟。因此,演练仪表板特意包含了短窗口数据。
- 故障 API 仅在本地 Compose 环境中启用,在 AWS 中将返回 404。
## 文档
- [架构与决策](docs/architecture.md)
- [SLO 规范](docs/slo.md)
- [Error-budget 策略](docs/error-budget-policy.md)
- [安全模型](docs/security.md)
- [关键燃烧率 Runbook](runbooks/high-error-budget-burn.md)
- [原始学习指南](docs/original-implementation-guide.md)
## 清理
```
make down # retain local metric volumes
make clean # delete local metric volumes
terraform -chdir=terraform destroy # only after reviewing the destroy plan
```
## 许可证
[MIT](LICENSE)
标签:API集成, AWS, Docker, DPI, ECS, SRE, Terraform, 偏差过滤, 可观测性, 多引擎聚合, 安全防御评估, 漏洞利用检测, 监控系统, 自定义请求头, 请求拦截, 运维, 逆向工具