CalcGuide · 技术博客主页 / 一页纸学习计划
🟠

可观测性与 SRE:从 SLI/SLO 到事故响应与混沌工程

分类:工程技术 · 路径:docs/topics/observability-and-sre/README.md

#observability#sre#slo#sli#monitoring#incident

用 6~10 周从 Prometheus / Grafana 到能定义 SLI/SLO、设计告警分级、主导事故响应与 Postmortem

父主题

顶层主题

子主题(4)

可观测性与 SRE:从 SLI/SLO 到事故响应与混沌工程

0. 元信息

1. 学习路线

Metrics / Logs / Traces 三支柱 + OpenTelemetry 采集
  → SLI / SLO / 错误预算 / 告警分级
  → Prometheus / Grafana / Loki / Tempo / Alertmanager 实战
  → 混沌工程 / 容量规划 / Runbook / SOP / 事故响应与 Postmortem

按「先观测 → 再 SLI/SLO → 再告警 → 最后混沌与事故」的顺序学。每个子主题对应一段能力,最后用综合项目把可观测、SLO、混沌、Postmortem 串起来。

2. 阶段周数分配

阶段6 周方案10 周方案备注
1. 三支柱 + OpenTelemetry1.52Metrics / Logs / Traces + OTLP
2. SLI / SLO / 错误预算11.5SLI 选择、4 个 9、错误预算
3. Prometheus / Grafana / Loki / Tempo1.52指标 + 日志 + Trace 一站式
4. 告警分级、Incident Response、Postmortem12值班、Runbook、SOP
5. 混沌工程与容量规划12.5Chaos Mesh / Litmus、USL、SLO 推容量

6 周方案只跑通最小闭环;10 周方案多出时间做混沌演练与容量压测。综合项目占最后一周。

3. 九阶段表

阶段核心知识实践产出可观察学会标准
1. 三支柱Metrics / Logs / Traces 定义与差异一份三支柱对比表 + 采集方案能解释高基数、低基数、采样与上下文传播
2. OpenTelemetryOTLP、Collector、SDK、自动注入与手动埋点一个 OTel Collector + 3 个服务的 Trace 串联traceid 串联前后端与服务
3. SLI / SLO选 SLI、4 个 9 反推、错误预算一份 SLO 文档 + 预算看板能用 SLI 公式推导月度错误预算
4. PrometheusPromQL、Recording Rule、Alert Rule、Remote Write一份 PromQL 查询集 + 5 条告警能用 PromQL 算 P99 与 burn rate
5. Grafana仪表盘、变量、Explore、告警联动一份 RED / USE 看板 JSON能讲清 RED vs USE
6. Loki + Tempo日志标签、TraceQL、Grafana 联动日志 → Trace → 指标三向跳转能用 traceid 反查日志与指标
7. 告警分级与值班Sev 1~4、轮值、噪声抑制、抑制规则一份告警分级表 + Runbook能用 burn rate 多窗口告警
8. Incident Response 与 PostmortemIC / Comm / Ops / Postmortem、blameless、action items1 次模拟事故 + 1 份 Postmortem能主持 30 分钟 IC 会议
9. 混沌工程与容量Chaos Mesh / Litmus、USL、SLO 推容量1 次预发故障演练 + 容量压测能用 steady-state hypothesis 设计演练

关键陷阱:把 Metrics 当 Logs;告警只看阈值不分类;Postmortem 写成追责报告;混沌只在测试环境做一次;SLO 设完不看板。

4. 第一周任务

Day 1 约定:本计划以 Linux + Docker + 一台 8G 内存的机器为最小实验环境。所有实验记录版本、容器镜像 tag、抓取时间与数据集。

任务当天交付
Day 1装 Docker / docker-compose / kind / minikube;用 docker --versiondocker compose version 自检环境清单
Day 2起一个 Prometheus + Grafana + Alertmanager 的 Compose 栈;接入一个 node_exporter一份 Compose YAML + Grafana 看板
Day 3写一个最小 Flask / FastAPI 服务,暴露 /metrics;用 prometheus_client 暴露 RED 指标一个 Python 服务 + RED 指标
Day 4client_golang 暴露 Go 服务指标;对比 Python 指标差异Go 服务指标
Day 5装 OpenTelemetry Collector,配置 OTLP gRPC / HTTP receiver;接入 Python / Go SDKCollector 配置 + 双语言 SDK
Day 6在 Flask / FastAPI 接入 Loki;写一条结构化日志;用 Grafana 查日志一份 Loki 数据源 + 日志查询
Day 7步骤 A:跑通「最小可观测闭环」(指标 + 日志 + Trace + Grafana 看板 + Alertmanager 邮件);步骤 B:补齐 4 类边界(指标抓取失败 / Collector 重启 / 日志丢 / traceid 断链)一份闭环 Compose + 故障演练记录

Day 7 步骤 A 只求链路完整:服务 → SDK → Collector → Prometheus / Loki / Tempo → Grafana。步骤 B 每次只改变一个条件(关掉服务 / kill Collector / 清空 Loki / 关闭 SDK)。

5. 阶段通用验收

  1. 不看答案独立重写一个三支柱 Collector 配置;
  2. 用自己的话解释 SLI / SLO / Error Budget 各自解决什么问题;
  3. 画一张图:服务 → SDK → Collector → 后端 → Grafana;
  4. 测试正常路径、Collector 重启、抓取失败、日志丢、traceid 断链四类边界;
  5. 至少准备 3 组自定义指标 / 日志 / Trace 数据;
  6. 记录 P50 / P95 / P99、错误率、饱和度、SLI 命中率 4 个核心指标;
  7. 能修改既有服务加 OTel、加告警、加 Runbook,并验证。

6. 最终验收

7. 综合项目

首选:用 docker-compose / kind 起一个 3 服务微服务(API / Worker / DB)+ Prometheus + Grafana + Loki + Tempo + OTel Collector + Alertmanager,定义 3 个 SLO、配置 5 条分级告警、跑一次混沌演练(kill 一个服务 / 注入 30% 延迟 / 把 DB 切到只读)、写 1 份 Postmortem。

备选:用 Kubernetes(kind)做同一份需求。
备选:把一个生产事故日志(脱敏后)按本计划走一遍 IR + Postmortem。
备选:用 eBPF + Prometheus 做基础设施可观测。

任何综合项目都必须包含:

  1. 需求与 SLO(可用性 / 延迟 / 错误率);
  2. 三支柱 + OTel 采集架构图;
  3. SLI 公式与 SLO 文档;
  4. Grafana 看板 JSON(RED + USE + SLO 预算);
  5. Prometheus 告警规则(含 burn rate 多窗口);
  6. Runbook 与 SOP(Sev 1~4);
  7. 一次故障演练录像与记录;
  8. Postmortem(时间线、影响、根因、action items);
  9. 复盘 notes/retrospective.md

8. 推荐开源资料

阶段角色资料链接用法
1, 2三支柱Google SRE Bookhttps://sre.google/sre-book/table-of-contents/第 14 章 + 第 811 章
1, 2可观测工程Charity Majors Observability Engineeringhttps://www.oreilly.com/library/view/observability-engineering/9781492076438/第 4~6 章
2SLO 落地Rob Ewaschuk Implementing Service Level Objectiveshttps://www.oreilly.com/library/view/implementing-service-level/9781492073918/短而实用
3, 4PrometheusPrometheus 官方文档https://prometheus.io/docs/PromQL 与 Recording Rule
3, 4GrafanaGrafana 官方文档https://grafana.com/docs/看板与告警
5OpenTelemetryOTel 官方文档https://opentelemetry.io/docs/SDK / Collector / OTLP
6, 7Loki / TempoGrafana Loki / Tempohttps://grafana.com/oss/loki/日志与 Trace 后端
8混沌工程Chaos Engineering(O’Reilly)https://www.oreilly.com/library/view/chaos-engineering/9781492043867/概念 + 案例
8混沌工具Chaos Meshhttps://chaos-mesh.org/k8s 故障注入
8容量方法Brendan Gregg Systems Performancehttps://www.brendangregg.com/books.htmlUSE / USL
全部事故响应Incident Response Site Reliability Workbookhttps://sre.google/workbook/table-of-contents/IR 与 Postmortem 章节
全部容量USL 论文(Neil Gunther)https://www.perfdynamics.com/Manifesto/USLscalability.html可扩展性定量分析

默认使用顺序:先读 SRE Book 第 1~4 章建立 SLO 思维 → 装 Prometheus / Grafana / Loki / Tempo 起一个最小栈 → 接入 OTel SDK 与 Collector → 定义 SLO 与告警 → 写 Runbook → 做混沌演练 → 模拟事故 → 写 Postmortem → 复盘到 notes/retrospective.md

9. 学习资料汇聚(v0.3 自包含)

本节由本计划生成。链接指向原始材料或作者公开内容。规范与版本会演进,实验记录必须写明版本与日期。

9.1 背景与动机

可观测性(Observability)这个词来自控制论。系统越复杂、内部越不可见,越需要从外部输出反推内部状态。分布式系统从单机能解决到多机协作,监控从「ping + uptime」升级到「Metrics + Logs + Traces」三支柱。

2003 年 Google 成立 SRE 团队,把运维工程化:Service Level Objective(SLO)、Error Budget、Toil、Incident Response、Postmortem 成为行业模板。2014 年 Prometheus 借鉴 Borgmon 思路发布,把 pull-based 时序数据库、PromQL、多维标签写成事实标准。2017 年 OpenTelemetry 把 Metrics / Logs / Traces 三件套合并到同一 SDK 与协议。2019 年 Grafana Labs 推出 Loki(日志)与 Tempo(Trace),与 Prometheus 组成 Grafana Stack。

今天一个中等规模系统每天产生 TB 级日志、百万级指标 span、千亿级 Trace。可观测不是「装上 Prometheus」,而是「用 SLI/SLO 量化服务、用三支柱快速定位、用混沌主动验证、用 Postmortem 持续改进」的工程闭环。

9.2 概念地图

flowchart LR
  Service[微服务] --> SDK[OTel SDK / Prometheus client]
  SDK --> Collector[OTel Collector]
  SDK --> Prom[Prometheus scrape]
  Prom --> PromDB[(Prometheus TSDB)]
  Collector --> Loki[(Loki)]
  Collector --> Tempo[(Tempo)]
  PromDB --> Grafana
  Loki --> Grafana
  Tempo --> Grafana
  Grafana --> Alert[Alertmanager]
  Alert --> PagerDuty[PagerDuty / OpsGenie]
  SLO[SLI/SLO] --> Prom
  SLO --> Burn[Burn Rate 告警]
  Burn --> Alert
  Chaos[Chaos Mesh / Litmus] -.故障注入.-> Service
  IR[Incident Response] --> IC[IC / Comms / Ops]
  IC --> PM[Postmortem]
  PM -.action items.-> Service

核心关系:服务通过 SDK 与 exporter 把数据送到 Collector / Prometheus;Grafana 把数据可视化并触发告警;SLO 是告警阈值与预算来源;混沌验证 SLO 是否真实可达;事故与 Postmortem 形成反馈环。

9.3 基础知识讲解

9.3.1 经典论文 / 规范

资料影响建议读法
Google, SRE Book(O’Reilly, 2016)SLO / Error Budget / Toil / IR 整套第 14 章必读;第 811 章事故复盘
Google, SRE Workbook(O’Reilly, 2018)SLO 落地、IR、Postmortem 实战与 SRE Book 对照
Rob Ewaschuk, Implementing Service Level Objectives(O’Reilly, 2020)SLO 反推 4 个 9 与预算短而精
Brendan Gregg, Systems Performance(2nd ed., 2020)USE 方法、USL、内核观测第 2 章 + 第 6 章 + 第 12 章
Charity Majors et al., Observability Engineering(O’Reilly, 2022)可观测工程化第 4~6 章
OpenTelemetry SpecificationMetrics / Logs / Traces 数据模型1.x 版本
Prometheus 查询规范PromQL / Recording Rule与 OpenMetrics 对照
USL 论文(Neil Gunther)可扩展性定量分析与 Little’s Law 对照

9.3.2 经典书籍

影响用法
Betsy Beyer et al., Site Reliability Engineering(O’Reilly, 2016)SRE 圣经第 14 + 第 811 章
Niall Murphy et al., Site Reliability Workbook(O’Reilly, 2018)SRE 实战全书
Rob Ewaschuk, Implementing Service Level ObjectivesSLO 落地短而精
Brendan Gregg, Systems Performance性能与观测方法第 2 + 6 + 12 章
Charity Majors et al., Observability Engineering可观测工程第 4~6 章
Casey Rosenthal et al., Chaos Engineering(O’Reilly, 2017)混沌概念全书
Michael Nygard, Release It!(2nd ed., 2018)稳定性反模式第 6~8 章

9.3.3 优秀博客

资料特点用法
Google SRE BlogSRE 一手材料选 5 篇 Postmortem 与 SLO
Grafana BlogLoki / Tempo / Mimir 实战选 5 篇三支柱案例
Prometheus BlogPromQL / 集成选 3 篇 burn rate 与远端写
OpenTelemetry BlogOTel SDK 与 Collector选 5 篇实战
Charity Majors可观测工程化配合 Observability Engineering
Brendan Gregg性能与 USL选 5 篇
Netflix Tech Blog混沌与事故选 3 篇
GitHub EngineeringSLO 与告警选 3 篇
AWS Builder’s Library避坑文章选 5 篇

9.3.4 核心人物

人物主要影响建议追踪的材料
Ben Treynor SlossGoogle SRE 创始人SRE Book 前言
Betsy BeyerSRE Book 编辑SRE 后续书籍
Charity MajorsHoneycomb / 可观测工程Observability Engineering
Lorin HochsteinChaos EngineeringChaos Engineering
Casey RosenthalNetflix Chaos MonkeyChaos Engineering
Rob EwaschukSLO 反推 4 个 9Implementing SLOs
Brendan Gregg性能方法Systems Performance
Björn RabensteinPrometheus 核心Prometheus 文档与博客
Frederic BranczykPrometheus / OpenMetrics推文与博客
Bryan BorehamGrafana Pyroscope / FaroGrafana 博客

9.3.5 开发方法

方法具体动作何时用
SLI-first先选 SLI(延迟 / 错误率 / 饱和度)再设 SLO任何服务上线
Multi-window burn rate1h + 6h + 24h + 3d 多窗口告警Prometheus 告警
RED for servicesRate / Errors / Duration 三件套服务可观测
USE for resourcesUtilization / Saturation / Errors资源可观测
Steady-state hypothesis注入故障前后定义稳态指标混沌演练
Blameless Postmortem不追责人,追责系统任何 P0/P1
Action items with DRI每条 action item 有负责人与 deadlinePostmortem
Single-variable chaos一次只注入一种故障任何演练
Trace as contracttraceid 进入日志与告警跨服务排障
Runbook as codeRunbook 放进 Git / wiki值班必备

9.3.6 重点训练材料

9.4 经典问题与经典案例

#问题为什么会重要最简答案或图示
1SLI / SLO / SLA 区别SLI 是指标;SLO 是目标;SLA 是合同SLI 用 latency / error_rate;SLO 用 99.9%
24 个 9 怎么反推月度 99.9% = 43.2 分钟预算(1 - SLO) × 月分钟数
3burn rate 怎么算短窗口反映事故;长窗口反映趋势多窗口(1h/6h/24h/3d)
4RED vs USE服务 vs 资源RED(Rate/Errors/Duration);USE(Utilization/Saturation/Errors)
5高基数指标为什么危险Prometheus TSDB 索引膨胀用日志 / Trace 替代;避免 user_id 作 label
6Trace context 怎么传播W3C Trace Context / B3OpenTelemetry 自动注入
7告警分级怎么做噪声会让人麻木Sev 1/2/3/4 + 优先级 + 抑制规则
8噪声抑制怎么做同源告警淹没信号route / inhibit / silence
9Postmortem 怎么写不写成追责报告时间线 + 影响 + 根因 + action items
10混沌演练怎么起步爆炸半径与稳态假设先预发 + 单变量 + 短时长
11capacity plan 怎么算DAU × 读写比 × 峰值倍数 × 对象大小USL 反推最优节点数
12IR 中 IC 谁当第一次 IC 谁来按服务 ownership 轮值
13on-call 怎么不疲劳告警过多Sev 1 值班轮值;Sev 2/3 邮件
14告警阈值怎么设不能凭感觉用 SLI + burn rate 反推
15错误预算耗尽怎么办必须停 feature用 budget policy 决定暂停发版

9.5 学习难点

概念难点

难点为什么会卡突破路径
SLI vs SLO vs SLA概念混用用具体数字写三个定义
高基数 vs 低基数label 选错看 Prometheus 文档 + 实战采样
wide events vs metrics习惯窄事件读 Honeycomb 博客
Burn rate 多窗口公式复杂用 Google SRE Workbook 案例

思维难点

难点为什么会卡突破路径
从监控到可观测「告警正常」≠「服务正常」用 unknown-unknowns 视角
告警噪声治理阈值随手设用 SLO + burn rate 反推
事故定位跨服务慢用 traceid 串联
Postmortem 不追责文化blameless 训练 + action items 跟 DRI

工程难点

难点为什么会卡突破路径
Collector 调优batch / memory / retry 不平衡看官方 tuning 文档 + 监控 Collector 自身
Prometheus 远端写本地存储不够接 Mimir / Thanos / Cortex
Trace 采样策略全采样成本高head sampling + tail sampling
告警路由复杂路由树混乱用 Alertmanager 分组 + 抑制
混沌平台接入生产不敢注入先在预发演练;用 blast radius 控制

9.6 技术标准与接口

9.6.1 Entity

名称版本 / 文档发布组织状态许可证 / 可访问性
Prometheus2.xPrometheus 社区活跃Apache-2.0
Grafana10.xGrafana Labs活跃AGPL-3.0
Loki2.xGrafana Labs活跃AGPL-3.0
Tempo2.xGrafana Labs活跃AGPL-3.0
Mimir2.xGrafana Labs活跃AGPL-3.0
OpenTelemetry1.xCNCFGAApache-2.0
OpenTelemetry CollectorcontribCNCFGAApache-2.0
Alertmanager0.27+Prometheus 社区活跃Apache-2.0
Chaos Mesh2.xCNCF活跃Apache-2.0
LitmusChaos3.xCNCF活跃Apache-2.0
GremlinSaaSGremlin Inc.商用闭源
USL论文Neil Gunther经典公开

9.6.2 Scope

9.6.3 Structure

9.6.4 Ecosystem

9.6.5 Depth Tiers

层级能力可观测性主题的可观察标准
L0知道存在知道 Metrics / Logs / Traces 与 SLI / SLO 各自解决什么问题
L1看得懂示例能读懂 Grafana 看板、PromQL 查询、Postmortem
L2能正确调用能装 Prometheus / Grafana / Loki / Tempo 与 OTel Collector,定义 SLO
L3能解释与排错能用三支柱定位跨服务事故,设计 burn rate 告警,写 Postmortem
L4能设计与扩展能为大型系统设计可观测平台、设计混沌演练、设计容量规划

本计划目标:L3。综合项目可触及局部 L4,但不作为 6~10 周的硬门槛。

9.6.6 Source

10. 常见误区

11. 所有知识点分类(统一规则)

  1. 编程语言
  2. 数据结构与算法
  3. 计算机基础
  4. 工程技术
  5. Web 与后端
  6. 前端与客户端
  7. 数据与人工智能
  8. 项目与职业能力
  9. 安全与可靠性

本计划归属:工程技术 主 + 安全与可靠性 辅。


直接依赖(3)

查看知识图谱