其他
何时用 SRE 实践及如何定义 SLO、错误预算、监控告警…
适用于需要提升生产系统可靠性、定义 SLI/SLO、管理错误预算、设计告警、减少 toil、进行事故复盘与混沌工程的场景。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 48/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 55/100 ×0.15
适用场景
何时用 SRE 实践及如何定义 SLO、通用
解决思路
- 评估可靠性:审查架构、SLOs、事故记录和 toil 水平。
- 定义 SLOs:识别有意义的 SLIs 并设置适当的目标。
- 验证对齐:在继续之前确认 SLO 目标反映用户期望。
- 实施监控:构建黄金信号仪表盘和告警。
- 自动化 toil:识别重复任务并构建自动化。
- 测试弹性:设计和执行混沌实验;在标记实验完成前验证恢复满足 RTO/RPO 目标;端到端验证恢复行为。
- 按上下文加载参考指南:定义 SLOs/计算错误预算时加载 references/slo-sli-management.md;管理预算、燃尽率、策略时加载 references/error-budget-policy.md;黄金信号、告警设计、仪表盘时加载 references/monitoring-alerting.md;toil 减少、自动化模式时加载 references/automation-toil.md;事故响应、混沌工程时加载 references/incident-chaos.md。
- 必须定义量化 SLOs(例如 99.9% 可用性)。
- 根据 SLO 目标计算错误预算。
- 监控黄金信号(延迟、流量、错误、饱和度)。
- 为所有事故编写无指责事后复盘。
- 度量 toil 并跟踪减少进度。
- 自动化重复运维任务。
- 用混沌工程测试故障场景。
- 平衡可靠性与功能迭代速度。
- 禁止在没有用户影响依据的情况下设置 SLOs。
- 禁止对症状告警却没有可操作的 runbook。
- 禁止容忍 >50% 的 toil 而没有自动化计划。
- 禁止跳过事后复盘或分配责任。
- 禁止对重复任务实施手动流程。
- 禁止在没有容量规划的情况下部署。
- 禁止忽略错误预算耗尽。
- 禁止构建无法优雅降级的系统。
- 输出 SLO 定义及 SLI 测量和目标。
- 输出监控/告警配置(Prometheus 等)。
- 输出自动化脚本(Python、Go、Terraform)。
- 输出带明确修复步骤的 runbook。
- 输出简要说明可靠性影响。
- 计算示例:99.9% 可用性 SLO 在 30 天窗口的允许停机时间为 (1 - 0.999) * 30 * 24 * 60 = 43.2 分钟/月;基于请求的错误预算为 0.001 * total_requests;例如 10M 请求/月 → 10,000 错误预算请求;如果第 1 周消耗 5,000 错误 → 在 25% 窗口内消耗 50% 预算 → 触发错误预算策略:冻结非关键发布。
- Prometheus 多窗口燃尽率告警规则:快速燃尽——1 小时内消耗 2% 预算(14.4x 燃尽率),警报 HighErrorBudgetBurn,expr 中使用 sum(rate(http_requests_total{status=~"5.."}[1h])) / sum(rate(http_requests_total[1h])) > 0.014400 和 5m 窗口同样条件,for 2m,severity critical,annotations 包含 summary 和 runbook;慢速燃尽——6 小时内消耗 5% 预算(持续 1x 燃尽率),警报 SlowErrorBudgetBurn,expr 使用 sum(rate(http_requests_total{status=~"5.."}[6h])) / sum(rate(http_requests_total[6h])) > 0.001,for 15m,severity warning,annotations 包含 summary 和 runbook。
- PromQL 黄金信号查询:延迟——histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[5m])) by (le, service));流量——sum(rate(http_requests_total[5m])) by (service);错误——sum(rate(http_requests_total{status=~"5.."}[5m])) by (service) / sum(rate(http_requests_total[5m])) by (service);饱和度——sum(rate(container_cpu_cfs_throttled_seconds_total[5m])) by (pod) / sum(rate(container_cpu_cfs_periods_total[5m])) by (pod)。
- Toil 自动化脚本(Python):设置 ERROR_THRESHOLD = 0.05;用 get_error_rate(service) 查询 Prometheus 当前错误率;用 restart_deployment(namespace, deployment) 执行 kubectl rollout restart deployment/{deployment} -n namespace;主程序接受 service、namespace、deployment 参数,查询错误率,若大于阈值则重启,否则不操作。
适用边界 · 注意事项
- 当系统没有可测量的用户流量或无法定义有意义的 SLI 时,不宜强行设置 SLO。
- 当团队没有基本监控/告警基础设施且无法短期建立时,不宜直接套用多窗口燃尽率告警等高级配置。
- 当业务要求绝对可靠且没有任何错误预算空间时,错误预算冻结发布策略不适用。