土法炼钢 · 系统与基础设施

【可观测性工程】混沌工程:ChaosBlade、Chaos Mesh 与可观测性闭环

文章导航

分类入口
architectureobservability
标签入口
#chaos-engineering#chaosblade#chaos-mesh#litmuschaos#resilience#fault-injection#slo#game-day

目录

混沌工程:ChaosBlade、Chaos Mesh 与可观测性闭环

某团队在生产做第一次「混沌」:kubectl delete pod checkout-xxx。Pod 15 秒内重建,服务恢复。团队欢呼系统高可用。

但 15 秒内 checkout 可用率从 99.95% 降到 99.1%,消耗两周错误预算;告警一条未响——延迟 SLO 的 PromQL 用了 p50 而非 p99。实验证明了自愈,更证明了可观测性盲区

混沌工程的价值:不是找代码 bug,是找「告警与 SLO 能否发现这类故障」。稳态用 SLO 工程 度量;告警是否触发用 告警体系 验证;全链路排障见 事故复盘剧本

混沌工程五步循环
爆炸半径递进模型

一、混沌工程的原则

1.1 起源

Netflix Chaos Monkey(2011)随机终止生产实例,验证容错。原则被归纳进 Principles of Chaos Engineering

1.2 五步循环

步骤 动作 可观测性产出
1 定义稳态 SLO Dashboard 指标 对照组基线
2 提出假设 可判定命题 实验验收标准
3 设计实验 故障类型+半径 注入配置
4 执行观测 注入+看告警 触发时间、漏报
5 分析 预期 vs 实际 Reliability Backlog

1.3 与测试的区别

单元/集成测试 混沌实验
环境 CI/staging staging → 可控 prod
目标 功能正确 可观测性+韧性
失败价值 bug 列表 告警/SLO gap

二、三大开源工具对比

2.1 总览

工具 来源 模型 强项 弱项
ChaosBlade 阿里开源 CLI + Operator 上手快、JVM/主机 K8s 编排弱于 Mesh
Chaos Mesh PingCAP, CNCF CRD K8s 原生、Workflow 学习曲线
LitmusChaos CNCF Hub + GitOps 模板化、Harness CE 重度依赖 K8s

2.2 ChaosBlade

# 网络延迟(主机)
blade create network delay --time 3000 --interface eth0 --offset 100

# K8s Pod CPU 满载
blade create k8s pod-cpu fullload --namespace checkout --names checkout-xxx --cpu-percent 80

# 销毁实验
blade destroy <UID>

中文文档完善,适合国内团队第一个实验。

2.3 Chaos Mesh

apiVersion: chaos-mesh.org/v1alpha1
kind: NetworkChaos
metadata:
  name: delay-checkout
  namespace: chaos-testing
spec:
  action: delay
  mode: one
  selector:
    namespaces: [checkout]
    labelSelectors:
      app: checkout
  delay:
    latency: "200ms"
  duration: "5m"

Workflow 可编排多步实验;Dashboard 可视化。

2.4 LitmusChaos

ChaosHub 提供预置实验模板;与 ArgoCD 集成做 GitOps 混沌。


三、稳态假设与 SLO 判定

3.1 稳态指标示例

3.2 实验假设模板

若对 checkout 单 Pod 注入 200ms 网络延迟 5 分钟,则 p99 延迟 SLO Burn Rate 告警应在 2 分钟内触发,且错误预算消耗 < 1%。

3.3 判定表

观测项 通过 失败 → 行动
SLO 告警触发 调整 Burn Rate 规则
Dashboard 异常可见 补 Panel / Recording rule
Trace 不断裂 修 propagation
自动恢复 < RTO 修 HPA/PDB

四、实验工程设计(四阶段)

4.1 Fault Injection

CPU、内存、网络延迟/丢包、DNS、磁盘 I/O、Pod 删除、AZ 故障。

4.2 Observability

并行观察:SLO Dashboard、告警、Logs trace_id、Traces 采样率是否够。

4.3 Recovery

记录 RTO;是否需人工 kubectl rollout undo

4.4 Analysis

写入 Reliability Backlog:每条 gap 对应 owner 与 due date。

sequenceDiagram
  participant E as 实验编排
  participant F as 故障注入
  participant S as SLI 采集
  participant A as Alertmanager
  participant O as On-call
  E->>F: 注入延迟
  F->>S: 扰动流量
  S->>A: Burn Rate 计算
  alt 告警触发
    A->>O: Page
  else 漏报
    O->>O: 记录盲区
  end

五、爆炸半径控制

5.1 递进策略

单 Pod → 单 Deployment → 单 AZ → Region(极少)。

5.2 Kill Switch

5.3 生产准入

  1. staging 同模板通过
  2. on-call 值守
  3. 变更窗口审批
  4. 回滚/停止演练过一遍

六、驱动可观测性改进的案例

6.1 网络延迟 → 告警盲区

注入 200ms → p99 升无告警 → PromQL 用 p50 → 改为 p99 + Burn Rate。

6.2 Kafka broker → Trace 断裂

杀 broker → 降级无完整 trace → Kafka client 未传播 traceparent → 修 OTel 配置。

6.3 DNS 超时 → 日志缺失

gRPC DNS 错误未打日志 → 补 error log + span event。


七、工程坑点

  1. 未 staging 验证就上生产——违背实验伦理。
  2. 无超时——CPU stress 打满节点。
  3. 不监控实验本身——注入是否成功未知。
  4. 只做自动化不做 Game Day——组合故障只有人才能发现。
  5. 实验未关联 SLO——无法量化用户影响。

八、落地清单


九、关键概念回顾


十、常见误解

误解 事实
混沌=删 Pod 需假设、稳态、观测、分析
通过=系统可靠 通过=本次故障可被观测
只能 QA 做 SRE 主导,研发参与分析

十一、下一步

治理层收束。下一篇 中国可观测性厂商对比

附录 A:实验目录模板

ID 故障 假设 半径 工具
EXP-001 PodKill k8s 验证 PDB/HPA checkout 单 Pod Chaos Mesh
EXP-002 NetworkDelay 200ms 延迟 SLO 告警 单 Deployment 1 副本 Chaos Mesh
EXP-003 CPUStress 80% CPU 不应 Page 除非 SLO 坏 单节点 Chaos Mesh
EXP-004 DNSChaos timeout 日志+Trace 可见 namespace 级 Chaos Mesh
EXP-005 IOChaos latency 块设备 Metrics vs 应用延迟 带 PVC Pod Chaos Mesh
EXP-006 TimeChaos skew 证书/TTL 问题 仅 staging Chaos Mesh
EXP-007 JVMChaos ChaosBlade GC/延迟关联 Java 服务 Chaos Mesh
EXP-008 AZFailure network partition 多 AZ SLO 需审批 Chaos Mesh

参考资料

  1. Principles of Chaos Engineering, https://principlesofchaos.org/
  2. Netflix Chaos Monkey, https://netflix.github.io/chaosmonkey/
  3. Chaos Mesh Documentation, https://chaos-mesh.org/docs/
  4. ChaosBlade Documentation, https://chaosblade.io/docs/
  5. LitmusChaos Documentation, https://litmuschaos.io/docs/
  6. Google SRE Workbook, Alerting on SLOs
  7. 本站 SLO 工程
  8. 本站 告警体系
  9. 本站 事故复盘剧本
  10. 本站 Events 与变更关联

上一篇多租户与安全

下一篇中国可观测性厂商对比

读完这篇,下一步读什么

优先读同系列或同问题的下一篇,把单篇消费变成主题集群。


By .