eamanze/aws-slo-error-budget-dashboard

GitHub: eamanze/aws-slo-error-budget-dashboard

该项目是一个受生产环境启发的 SRE 可观测性平台,通过完整的 SLO 定义、错误预算追踪、多窗口告警和故障演练来监控和保障服务的可靠性。

Stars: 0 | Forks: 0

# AWS SLO 与错误预算仪表板 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/eamanze/aws-slo-error-budget-dashboard/actions/workflows/ci.yml) [![Terraform](https://static.pigsec.cn/wp-content/uploads/repos/cas/ba/badd1977ea0626a6881fb5825b14d2d391877d911fa1ea495b35a4f2007f3580.svg)](https://github.com/eamanze/aws-slo-error-budget-dashboard/actions/workflows/terraform.yml) [![Security](https://static.pigsec.cn/wp-content/uploads/repos/cas/31/3182eccd67715b6b1bf46236ece7b7252dafc1e332af959acd19e63f1f3698a5.svg)](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, 偏差过滤, 可观测性, 多引擎聚合, 安全防御评估, 漏洞利用检测, 监控系统, 自定义请求头, 请求拦截, 运维, 逆向工具