1. 全书概览

一句话总结:这本书从腾讯云微服务平台 TSF 的实战经验出发,系统拆解了云原生可观测系统的设计方法论——覆盖日志、链路追踪、指标监控、事件和诊断五大支柱,给出可以直接落地的开源架构方案和大规模数据处理策略。

全书结构:

| 章节 | 主题 | 一句话概括 | |------|------|-----------| | 第1章 | 可观测性概述 | 从单体到微服务的演进,讲清楚"监控"和"可观测性"到底有什么区别 | | 第2章 | 开源架构设计 | 三套完整方案(Grafana+Prometheus+Tempo+Loki、Elastic Stack、大规模优化),直接照着搭 | | 第3章 | 日志系统 | Elasticsearch 全文检索 + ClickHouse 列式存储的双引擎实战,索引和分片策略讲得很透 | | 第4章 | 链路追踪 | 分布式系统的"显微镜",从 OTLP 协议到采样策略到根因定位 | | 第5章 | 监控系统 | 指标的采集、存储、告警全链路,业务指标和系统指标的分层设计 | | 第6章 | 事件系统 | 事件驱动的可观测性补充,告警关联和事件编排 | | 第7章 | 诊断系统 | 从"发现问题"到"定位问题"再到"解决问题"的闭环 | | 第8章 | 实践案例 | 真实业务场景下的可观测系统落地经验 |


2. 逐章要点

第1章:可观测性概述

这一章回答了一个很多人搞混的问题:可观测性和监控到底是不是一回事?书里的观点很明确——监控是可观测性的子集。监控告诉你"系统挂了",可观测性告诉你"为什么挂了、挂在哪里、影响范围多大"。

书里把可观测技术的演进分了三个阶段:感知系统状态 → 追踪问题位置 → 定位问题根因。这个分层思路很实在,大部分团队其实还卡在第一阶段,只会看 CPU 和内存的仪表盘。

可观测系统存在的三大不足:覆盖不全、不同数据无法关联、计算存储分析海量数据难度大。

书里还提了一个容易被忽略的视角:从业务角度看可观测性。不是所有指标都有用,关键是业务指标(订单数、订单成功率、支付延迟),而不是大而全无目的的系统指标。高并发分布式系统中通常会运行成百上千个微服务,每个微服务又有几个到几百个不等的实例——如果缺乏好的可观测性,排查一个线上问题可能要翻几十个服务的日志。

| 关键概念 | 说明 | |---------|------| | 可观测性 vs 监控 | 监控关注"是什么",可观测性关注"为什么" | | 三大支柱 | 指标(Metrics)、日志(Logs)、链路(Traces) | | 业务可观测性 | 从用户视角定义关键业务指标,而非技术视角 | | 数据生命周期 | 采集 → 处理 → 分析 → 存储 → 展示 → 告警 |

行动清单:

  • [ ] 梳理当前系统的可观测性成熟度,判断处于哪个阶段
  • [ ] 区分"监控指标"和"业务指标",列出前 5 个关键业务指标
  • [ ] 评估现有可观测系统的覆盖盲区

第2章:开源架构设计

这是全书最实用的章节之一,直接给了三套可以落地的架构方案。

第一套方案基于 Grafana + Prometheus + Tempo + Loki,是目前云原生社区最主流的组合。Prometheus 负责指标采集和存储,Loki 做日志聚合(轻量级,和 Prometheus 共用标签体系),Tempo 做链路追踪存储,Grafana 统一可视化。这套方案的优点是组件之间标签体系统一,关联查询非常方便。

第二套方案基于 Elastic Stack(Elasticsearch + Logstash + Kibana),优势是全文检索能力强,日志查询灵活度更高,但对存储资源的要求也更大。

第三套方案专门解决大规模数据计算问题——当数据量达到 PB 级别,前面两套方案都会遇到瓶颈。书里给出了分片策略、冷热数据分离、预计算等优化手段。

统一的可观测架构需要做到三点:统一的数据语义、统一的数据处理平台、统一的可视化系统。

| 方案 | 适用场景 | 优势 | 劣势 | |------|---------|------|------| | Grafana+Prometheus+Tempo+Loki | 中小规模、云原生原生 | 标签统一、资源占用低 | 全文检索能力弱 | | Elastic Stack | 日志分析需求强 | 全文检索强大、生态成熟 | 存储成本高 | | 大规模优化方案 | PB 级数据量 | 水平扩展能力强 | 架构复杂度高 |

行动清单:

  • [ ] 评估当前团队规模和数据量,选择合适的架构方案
  • [ ] 搭建一套 Grafana+Prometheus+Tempo+Loki 的测试环境
  • [ ] 制定统一的标签规范(Label Convention)

第3章:日志系统

日志是最古老也最被低估的可观测性数据源。书里花了大量篇幅讲日志系统的工程实践,而不是停留在"打个 log 就行"的层面。

存储引擎的选择是核心问题。Elasticsearch 适合全文检索场景,书里详细讲了索引模块、Shard 和 Segment 的配置策略——多少分片、多大 Segment、什么时候做 merge,这些直接决定了查询性能和存储成本。ClickHouse 作为新生代列式存储,在聚合统计场景下表现更好,写入吞吐量和压缩比都有优势。

日志不是越多越好。没有结构化的日志就是电子垃圾,只会浪费存储空间和查询时间。

书里还强调了日志结构化的重要性:统一的 JSON 格式、规范的字段命名、合理的日志级别。很多团队的日志系统之所以不好用,根本原因是日志本身质量太差。

| 存储引擎 | 适用场景 | 查询特点 | 存储特点 | |---------|---------|---------|---------| | Elasticsearch | 全文检索、复杂查询 | 灵活但较慢 | 存储膨胀大(约 3-5 倍) | | ClickHouse | 聚合统计、时序分析 | 列式扫描快 | 压缩比高(约 10 倍) |

行动清单:

  • [ ] 制定日志格式规范,统一 JSON 结构和字段命名
  • [ ] 根据查询模式选择存储引擎(全文检索 → ES,聚合统计 → ClickHouse)
  • [ ] 建立日志采样策略,非核心业务日志按比例采集

第4章:链路追踪

链路追踪是分布式系统的"显微镜"。一个请求从前端发起到数据库返回,中间可能经过 API 网关、认证服务、业务服务、缓存、消息队列等十几个节点,没有链路追踪,根本不知道时间花在了哪里。

书里讲了多种链路采集协议:OTLP(OpenTelemetry Protocol)是当前的标准,SkyWalking 在 Java 生态里用得多,ZipkinJaeger 是老牌方案,Spring Cloud Sleuth 适合 Spring Boot 项目直接集成。

采样策略是链路追踪工程实践中的难点。100% 采样在大流量场景下不现实——一个日活百万的应用,每秒可能产生上万条链路数据。书里讨论了多种采样策略:固定比例采样、自适应采样(基于错误率和延迟动态调整)、尾部采样(先缓存再决定是否保留)。

链路追踪的核心价值不是"看到调用链",而是"快速定位问题发生在哪一层"。

行动清单:

  • [ ] 引入 OpenTelemetry SDK,统一链路追踪的接入标准
  • [ ] 设计采样策略,正常流量按比例采样,错误流量全量采集
  • [ ] 建立链路追踪与日志的关联机制(通过 TraceID)

第5章:监控系统

监控系统的老生常谈,但书里的视角不只是 Prometheus 怎么配,而是从"指标设计"的角度出发。

书里把指标分成了几个层次:基础设施层(CPU、内存、磁盘、网络)、中间件层(Redis 命中率、MySQL 连接数、Kafka Lag)、应用层(QPS、错误率、P99 延迟)、业务层(订单量、支付成功率)。这个分层思路值得每个团队参考——大部分团队只有第一层和第三层,缺了中间件层和业务层。

告警设计也是重点。书里批评了"告警风暴"的问题:一条线上故障触发几百条告警,值班人员根本看不过来。解决方案包括告警聚合、告警抑制、告警分级(P0-P3)、告警升级机制。

好的告警系统应该让值班人员看到告警就能行动,而不是看到告警还要去查文档才知道怎么办。

行动清单:

  • [ ] 梳理四个层次的监控指标,补齐中间件层和业务层
  • [ ] 制定告警分级标准(P0 立即响应、P1 30 分钟内、P2 当天、P3 下次迭代)
  • [ ] 每条告警附带 Runbook(处理手册),不允许"裸告警"

第6章:事件系统

事件是可观测性三大支柱之外的补充维度。指标告诉你"系统有多慢",日志告诉你"哪里出了错",事件告诉你"发生了什么变更"。

书里把事件分为几类:部署事件(发布、回滚)、配置变更事件、基础设施事件(扩缩容、节点故障)、业务事件(促销开始、流量突增)。这些事件往往和故障直接相关——很多线上问题不是系统 bug,而是某次变更引发的。

事件系统的设计要点:事件的时间线展示、事件与告警的关联、事件的自动化响应。比如检测到某次发布后错误率飙升,系统自动触发回滚。

80% 的线上故障和变更有关。如果不对变更进行追踪,事故分析就是瞎猜。

行动清单:

  • [ ] 建立变更事件追踪机制,所有发布和配置变更自动记录
  • [ ] 实现事件与告警的时间线关联
  • [ ] 制定关键变更的审批和回滚流程

第7章:诊断系统

诊断是可观测性的最终目标——从"发现问题"到"定位问题"再到"解决问题"。前几章讲的是数据采集和展示,这一章讲的是怎么用这些数据来诊断问题。

书里提出了诊断的几个关键能力:根因分析(RCA)、影响面评估、自动化修复建议。根因分析不是简单的"看日志找异常",而是需要把指标、日志、链路、事件四类数据关联起来,才能还原故障的完整链条。

诊断系统的成熟度决定了 MTTR(平均故障恢复时间)。好的诊断系统能把 MTTR 从小时级降到分钟级。

行动清单:

  • [ ] 建立故障复盘模板,每次事故都产出 RCA 报告
  • [ ] 设计根因分析的数据关联查询(TraceID + 错误日志 + 变更事件)
  • [ ] 定义 MTTR 目标,定期回顾诊断效率

第8章:实践案例

最后一章是真实业务场景的落地经验,把前面讲的理论和方法串联起来。包括微服务架构下的可观测性建设、多集群环境的统一监控、混合云场景下的数据采集等。

这些案例最大的价值在于"踩坑记录"——哪些方案看起来美好但落地困难、哪些组件在大规模下有性能瓶颈、哪些设计决策事后证明是错的。这些经验比理论更有参考价值。

行动清单:

  • [ ] 参考案例中的架构图,对照自身系统找差距
  • [ ] 关注案例中提到的性能瓶颈点,提前做压测
  • [ ] 建立可观测性建设的阶段目标,分步推进

3. 关键概念速查

| 概念 | 定义 | 一句话理解 | |------|------|-----------| | 可观测性 (Observability) | 从系统的外部输出推断系统内部状态的能力 | 不需要进黑盒就能知道里面发生了什么 | | 三大支柱 (Three Pillars) | 指标(Metrics)、日志(Logs)、链路追踪(Traces) | 可观测性的三种基本数据类型 | | OTLP | OpenTelemetry Protocol,可观测性数据的标准传输协议 | 让不同厂商的采集器和后端能互相通信 | | 尾部采样 (Tail Sampling) | 先缓存完整链路数据,再根据规则决定是否保留 | 用少量计算换取更精准的采样(比如全保留错误链路) | | SLI/SLO/SLA | 服务质量指标/目标/协议 | 从"用户感知"角度定义系统应该有多可靠 | | MTTR | Mean Time To Recovery,平均故障恢复时间 | 衡量可观测性系统价值的终极指标 | | 告警疲劳 (Alert Fatigue) | 告警太多导致值班人员麻木 | 告警系统设计不好比没有告警更糟 | | eBPF | Extended Berkeley Packet Filter,内核级可观测技术 | 不改代码、不加 Agent 就能采集系统行为数据 | | RED 方法 | Rate(请求率)、Errors(错误率)、Duration(延迟) | 面向请求的服务健康度评估三要素 | | USE 方法 | Utilization(使用率)、Saturation(饱和度)、Errors(错误) | 面向资源的基础设施健康度评估三要素 |


4. 核心框架/模型

可观测性成熟度模型

Level 4: 预测与自愈
         ↑  系统能预测故障并自动修复
         |
Level 3: 智能诊断
         ↑  自动根因分析,MTTR < 5min
         |
Level 2: 全链路关联
         ↑  指标+日志+链路+事件四维关联
         |
Level 1: 基础监控
         ↑  有仪表盘和告警,但数据孤立
         |
Level 0: 黑盒状态
            出了问题靠猜

统一可观测架构(Grafana 生态)

┌─────────────────────────────────────────────────┐
│                   应用层                          │
│  ┌──────┐  ┌──────┐  ┌──────┐  ┌──────┐        │
│  │Service│  │Service│  │Service│  │Service│       │
│  └──┬───┘  └──┬───┘  └──┬───┘  └──┬───┘        │
│     │          │          │          │            │
│  ┌──┴──────────┴──────────┴──────────┴──┐        │
│  │       OpenTelemetry Collector          │        │
│  └────────┬──────────┬──────────┬────────┘        │
│           │          │          │                  │
│     ┌─────┴───┐ ┌────┴───┐ ┌───┴────┐           │
│     │Prometheus│ │  Loki  │ │ Tempo  │           │
│     │ (指标)   │ │ (日志) │ │ (链路) │           │
│     └────┬────┘ └───┬────┘ └───┬────┘           │
│          │           │          │                 │
│     ┌────┴───────────┴──────────┴────┐           │
│  │          Grafana (统一可视化)       │           │
│  └───────────────────────────────────┘           │
└─────────────────────────────────────────────────┘

指标分层体系

| 层次 | 示例指标 | 负责人 | 告警级别 | |------|---------|--------|---------| | 业务层 | 订单量、支付成功率、DAU | 产品 + 研发 | P0 | | 应用层 | QPS、P99 延迟、错误率 | 研发 | P1 | | 中间件层 | Redis 命中率、MySQL 慢查询、Kafka Lag | 研发 + DBA | P1-P2 | | 基础设施层 | CPU、内存、磁盘、网络 | 运维 | P2 |


5. 金句摘录

监控告诉你系统出了什么问题,可观测性告诉你为什么会出这个问题。

80% 的线上故障和变更有关。如果不对变更进行追踪,事故分析就是瞎猜。

没有结构化的日志就是电子垃圾,只会浪费存储空间和查询时间。

好的告警系统应该让值班人员看到告警就能行动,而不是看到告警还要去查文档才知道怎么办。

可观测性不是一个技术问题,而是一个组织问题。它需要开发、运维、产品三个角色共同参与。

诊断系统的成熟度决定了 MTTR。好的诊断系统能把故障恢复时间从小时级降到分钟级。

不要试图一次性建设完整的可观测系统。从最痛的问题开始,逐步覆盖。


6. 行动清单

每天

  • [ ] 检查核心业务指标(订单量、错误率、P99 延迟)的仪表盘,确认没有异常波动
  • [ ] 审查昨日新增的告警规则,清理误报和低价值告警

每周

  • [ ] 分析告警趋势,识别告警频率最高的 Top 5 告警,优化或消除
  • [ ] 检查日志采样率和存储成本,确保没有非结构化日志混入
  • [ ] Review 一次链路追踪的慢请求,确认是否需要优化

每月

  • [ ] 更新 SLI/SLO 目标,对比上月实际达成情况
  • [ ] 做一次故障复盘(如果有),产出 RCA 报告并更新 Runbook
  • [ ] 评估可观测性系统的覆盖盲区,制定下月补齐计划
  • [ ] 回顾 MTTR 趋势,评估诊断效率是否在提升

7. 一句话总结

可观测性不是工具堆砌,而是从"出了问题靠猜"进化到"出了问题秒定位"的系统工程——先搞清楚你要观测什么,再选工具,最后才是搭架构。


8. 读者热议

@驴得水(豆瓣,2024-03)

"可观测技术发展阶段:感知系统状态、追踪问题位置、定位问题根因。可观测系统存在的不足:覆盖不全、不同数据无法关联、计算存储分析海量数据难度大。从业务角度看:关键业务指标(订单数、订单成功率)区别于大而全无目的的监控。"

认同度:⭐⭐⭐⭐⭐ 说到了痛点。大部分团队的可观测性建设确实停留在"感知系统状态"阶段,把 Prometheus + Grafana 搭起来就觉得完事了,根本没做到"不同数据之间关联分析"。业务指标这个视角也很关键——技术指标再全,如果和业务脱节,就是自嗨。


@CSDN 博主(2024 年评论)

"传统监控与可观测性的本质差异在于:监控是静态的仪表盘,可观测性是动态的探索过程。可观测性通过日志、链路追踪、指标、事件等多维度数据的关联与上下文传递,让工程师能够在不停机的情况下理解系统内部行为。"

认同度:⭐⭐⭐⭐ 方向对,但"动态的探索过程"这个说法有点虚。实际工作中,可观测性更像是"出了问题能快速找到原因的能力",不需要过度包装。多维度数据关联确实是核心价值。


@华为云社区博主

"在云原生中,可观测性的实现依赖于监控度量(Metrics)、事件日志(Logs)和链路追踪(Traces)三种数据。这三种数据各有侧重,但又不是完全独立的。"

认同度:⭐⭐⭐⭐ 三大支柱的说法已经成了行业共识。补充一点:事件(Events)应该被列为第四支柱,很多故障的根因是变更事件而不是系统异常,光靠 Metrics + Logs + Traces 是找不到原因的。本书第 6 章专门讲事件系统,这个视角很超前。


笔记生成:2026-04-28 by 喵喵 🐈


相关笔记

同作者仅有此篇 同主题: