首页
›
指南
›
学习路径
›
SRE 岗位学习路径
系统学习
学习路径总入口:先选领域,再建立模型,最后用故障演练验证
→
SRE 岗位学习路径:用 30/60/90 天把值班、SLO、事故指挥、变更与容量串成一条工作流
使用方式
这不是又一条按技术栈排列的学习路径,而是按 SRE 的岗位交付物倒推:第一个月能安全值班,第二个月能用 SLO 和可观测性定义“正常”,第三个月能指挥事故并管住变更,之后能对容量和成本负责。
四个阶段对应 30/60/90 天和一个持续运营阶段。每个阶段先读岗位会用到的页面,再在测试环境或只读权限下完成任务,最后用可验证的结果过关。
先读 :带着“值班时我会怎么用”去读,不做命令收藏。
再做 :前 60 天不碰生产写操作;演练、压测和变更都在测试环境完成。
后测 :每个阶段产出一份可被同事复核的记录:交接单、SLO 草案、事故时间线或容量报告。
建议每周留出一次两小时的复盘:把本周处理的告警按“可行动、可自动恢复、误报”分类,挑一条最常出现的告警补 runbook 或改阈值。到第 90 天,你应该能拿出四份记录和一份自己的值班改进清单,而不是只读完一串页面。
阶段一:第 1–30 天,先能安全值班
目标 :能完成一次完整交接,收到告警后判断影响面、找到负责人并按升级路径推进,而不是先重启或先追根因。
阅读顺序 :
sre-oncall-checklist — 交接、分级、止血和复盘的固定检查项。
on-call — 轮换、备份值班、告警分级和升级时限。
runbook — 让告警真正可执行的 runbook 结构与验证方式。
observability-roadmap — 值班需要的指标、日志、追踪和告警能力。
http-status-cheatsheet — 从状态码判断故障在入口、网关还是上游。
linux-performance-triage — 主机层 CPU、内存、磁盘和网络的第一轮排查。
kubectl-cheatsheet — 现场查看 Pod、事件、日志和发布状态的常用命令。
amtool — 查询告警、创建静默并验证 Alertmanager 路由。
动手任务 :跟一次完整班次,只读参与。交接前整理上一班未闭环告警、进行中变更和风险窗口;对一条测试告警执行查询、静默、解除静默,并记录它最终路由到哪个 receiver。
amtool alert query --alertmanager.url = http://localhost:9093
amtool silence add alertname = TestAlert --duration = 30m --comment = 'drill'
amtool silence query --alertmanager.url = http://localhost:9093
kubectl get pods -A --field-selector= status.phase!= Running
kubectl get events -A --sort-by= .lastTimestamp | tail -20
curl -sS -o /dev/null -w '%{http_code} %{time_total}\n' https://example.com/
过关标准 :
交接单包含未闭环告警、进行中变更、风险窗口、备份值班人和下一班更新时间。
能按“确认影响 → 定级 → 指定负责人 → 止血 → 恢复”说出一次告警的处理顺序。
能独立完成一次告警查询与静默,并解释静默和抑制的区别。
知道哪些操作属于不可逆变更,必须先升级并找第二人确认。
阶段二:第 31–60 天,用 SLO 和可观测性定义“正常”
目标 :能为一个核心服务定义 SLI 和 SLO,算出 28 天错误预算,并把燃烧率告警、看板和发布门禁连起来。
阅读顺序 :
slo — SLI、SLO、SLA 的区别,窗口选择与燃烧率告警。
error-budget — 错误预算的计算、消费和发布冻结策略。
observability-learning-path — 从指标、日志、链路到 SLO 和值班的依赖顺序。
observability-mental-model — 用信号、标签、基数和证据回答未知问题。
prometheus — 指标采集、存储和告警规则的组织方式。
promql-cheatsheet — 编写成功率、错误率和燃烧率查询。
alertmanager — 告警去重、分组、抑制和路由。
grafana — 把 SLO、预算和值班信号放进同一块看板。
loki — 按标签聚合日志,补上指标看不到的错误细节。
logql-cheatsheet — 用 LogQL 从日志中量化错误和延迟分布。
动手任务 :选一个只读服务,写出成功率 SLI 的分子分母,用 recording rule 固化 5 分钟错误率;计算 99.9% SLO 在 28 天窗口的可用分钟数,配置快慢两条燃烧率告警,并用 promtool 校验规则。
awk 'BEGIN {printf "允许不可用: %.2f 分钟\n", 28*24*60*(1-0.999)}'
promtool check rules slo-rules.yml
curl -s localhost:9090/api/v1/query --data-urlencode 'query=job:http_errors:ratio_rate5m'
amtool alert query --alertmanager.url = http://localhost:9093
过关标准 :
SLO 文档写清用户、SLI 口径、窗口、目标值和排除项(重试、探针、4xx 分类)。
能用公式和数字说明当前错误预算还剩多少,而不是只说“错误率有点高”。
燃烧率告警在测试环境触发过一次,并验证了分组、抑制和接收人。
看板能同时看到 SLI 趋势、剩余预算和最近变更,值班人不需要在多个系统之间拼图。
阶段三:第 61–90 天,事故指挥与变更管理
目标 :能在事故中承担 IC 或明确配合角色,冻结变更、组织止损和沟通;在发布前用渐进式交付和回滚预案控制爆炸半径。
阅读顺序 :
incident-response-playbook — 分级、角色、沟通、止损和复盘的完整流程。
incident-command — IC、Ops Lead、Comms Lead 和 Scribe 的职责边界。
postmortem — 无责复盘模板、时间线和改进项闭环。
public-postmortem-index — 按根因对照公开事故,校准自己的判断。
migration-readiness-checklist — 变更前的依赖、回滚和数据兼容检查。
progressive-delivery — 金丝雀、蓝绿和自动回滚的决策依据。
argo-rollouts — 用 Rollout 和 AnalysisTemplate 固化发布步骤。
poddisruptionbudget — 滚动发布和节点维护时的可用性下限。
runbook-k8s-upgrade — 控制面、节点和 addon 的升级顺序与回滚点。
k8s-upgrade-checklist — 升级前的版本、兼容性和容量检查。
chaos-engineering — 用受控实验验证回滚、切流和降级确实有效。
动手任务 :组织一次 45 分钟 game day,模拟“核心 API 错误率 8%”。指定 IC、Ops、Comms 和 Scribe,只允许回滚、切流、扩容、降级四类止血动作;事后产出一条带 UTC 时间的时间线和三条有 owner 的改进项。再为测试服务配置 1% → 5% → 25% 的金丝雀和自动分析。
kubectl argo rollouts get rollout payment -n test --watch
kubectl get pdb -A
kubectl rollout undo deployment/payment -n test
kubectl rollout status deployment/payment -n test
kubectl get events -A --sort-by= .lastTimestamp | tail -30
过关标准 :
事故开始 10 分钟内完成定级、指定 IC、建立单一频道并冻结相关变更。
时间线每条都有 UTC 时间、执行人和结果,能还原“先止血、后根因”的顺序。
发布的每一步都有通过条件、观察时长和自动或手动回滚点。
复盘改进项有 owner、截止时间和验收方式,并回写到 runbook 或告警规则。
能说清数据库 schema 变更与代码回滚的兼容顺序,不把“回滚代码”当成万能方案。
阶段四:90 天后,容量、成本与持续运营
目标 :能用峰值而不是平均值做容量预测,区分 HPA、VPA 和节点扩缩容的职责,并把成本、灾备演练纳入日常运营。
阅读顺序 :
capacity-forecasting — 峰值预测、水位阈值、扩容公式和采购提前期。
capacity-planning — 节点选型、装箱率、资源预留和超卖。
hpa — 按指标扩副本的适用条件、指标链路和扩缩容抖动。
vpa — 调整 request 与 limit,减少资源错配和 OOM。
cluster-autoscaler — 节点层扩容、缩容和 Pending 的关系。
karpenter — 按 Pod 需求快速供给合适规格的节点。
cost-optimization-checklist — 闲置资源、规格、存储和网络成本检查。
finops — 成本分摊、预算告警和优化优先级。
opencost — 按命名空间和工作负载拆分集群开支。
dr-drills — 灾备演练的频率、场景、验收和失败回退。
动手任务 :为一个服务做 90 天容量报告:取至少 6 周峰值 QPS 做线性趋势,按 P99 延迟和安全并发算所需副本;核对单可用区故障后的 N+1 余量;再用 OpenCost 给出该服务前三大成本项和一条可执行的优化建议。
kubectl top nodes
kubectl get hpa -A
kubectl describe hpa < name> -n < namespace>
kubectl get pods -A -o wide --field-selector= status.phase= Pending
kubectl get pdb -A
过关标准 :
容量报告同时给出当前水位、30/60 天预测、扩容触发点和采购提前期。
能解释 request 与 limit 在调度和成本核算中的不同作用。
能区分 HPA 处理分钟级波动、集群自动扩缩容处理节点供给、容量规划处理周月级增长。
成本优化建议量化了预计节省和风险,不是简单“降配”。
灾备演练有场景、成功标准、实际耗时和未通过项,而不是只留一张截图。
常见误区
把值班理解成“接所有告警”,不区分需要立即行动和可以次日处理的告警。
SLO 目标写成 100%,导致没有错误预算,任何发布都变成违规。
只有一个可用性 SLO,忽略延迟、数据新鲜度和异步任务积压。
事故中 IC 亲自钻进日志,没人定级、分工和对外沟通。
先追根因再止血,用户影响持续扩大;或者止血时同时改多个变量,无法判断哪一步生效。
把回滚当成万能方案,忽略数据库 schema 和消息格式的向前兼容。
用平均利用率做容量决策,忽略每天峰值、活动日历和扩容链路本身的延迟。
成本优化只看账单折扣,不看闲置、超配、存储生命周期和跨区流量。
参考链接
读完自测
合上页面,先回答,再展开对照。
为什么 SLO 不应该设成 100%?错误预算耗尽后应该怎么调整发布策略?
事故刚开始时,IC 的第一小时应该做什么,不应该做什么?
容量规划为什么看 request 和峰值,而不能看 limit 和平均值?
答案
100% 目标没有错误预算,任何一次失败都变成违规,团队会倾向于隐瞒问题或冻结所有变更。合理做法是保留小比例预算,并用燃烧率而不是瞬时错误率告警。预算耗尽后应冻结功能发布,只做可靠性改进,直到复盘完成并恢复到阈值以上。
IC 应先确认影响面、定级、指定角色、建立单一频道并冻结相关变更,然后推动回滚、切流、扩容或降级等止损动作,同时安排固定节奏的对外更新。IC 不应亲自查日志或长时间做技术定位,也不应在止血前承诺根因和恢复时间。
Kubernetes 调度按 request 预留资源,limit 只是运行上限,按 limit 估算会高估可调度容量;容量决策要看每天峰值和增长趋势,平均值会掩盖突发流量、活动日历和单区故障后的 N+1 需求。
相关条目
← role-data-platform
runbook-backup-restore-verification →