# 32 · 可观测性与可靠性技术栈选型 > 一句话点题:**可观测性(Observability)不是装一堆监控大屏,而是在系统出问题时,你能不能用证据回答:谁受影响、哪里变慢、为什么变慢、该不该叫醒人。可靠性技术栈选型,是在给线上系统装神经系统和免疫系统。** --- > **🧰 技术栈选型篇第 6 章 · 本章只练一件事** > > [31 章](31-云原生与部署平台选型.md) 讲怎么部署。本章讲上线以后怎么知道系统是不是健康,以及不健康时怎么收场。不要从 Prometheus、Grafana、ELK、OpenTelemetry 这些名字开始,要从 SLO(服务等级目标)开始。 --- ## 开场:监控和可观测性不是一回事 Monitoring(监控)回答的是: > 我提前知道要看什么,现在它有没有越线? 例如 CPU 超过 90%、接口错误率超过 5%、队列积压超过 1 万。 Observability(可观测性)回答的是: > 我不知道问题会从哪里冒出来,但系统留下的证据够不够我追下去? 例如某个用户下单慢,请求穿过网关、订单、库存、支付、第三方接口,到底卡在哪一跳?是某个租户、某个版本、某个可用区,还是某个数据库索引? > **判断要点:**小系统靠监控也能活;分布式系统只靠监控会瞎。服务越多、调用链越长、版本越频繁,越需要可观测性,而不只是更多仪表盘。 --- ## 一、从 SLO 倒推,别从工具倒推 可靠性技术栈的第一步是定义三件事: ``` SLI(Service Level Indicator,服务等级指标) → 你测什么:成功率、P99 延迟、错误率、可用性? SLO(Service Level Objective,服务等级目标) → 你内部承诺做到多少:99.9% 请求 < 300ms? Error Budget(错误预算) → 允许失败的额度:预算没烧光,可以继续发版;烧光了,先修稳定性 ``` 这套语言的价值,是把「系统稳不稳」从感觉变成可讨论的数字。告警也应该从 SLO 倒推: > 用户真的受影响了,才值得叫醒人。 CPU 高、内存高、线程多,都只是原因候选。如果它们没有影响用户旅程,就不该直接变成半夜电话。 --- ## 二、三类证据:指标、日志、链路 可观测性常说三类信号: | 信号 | 适合回答 | 代价 | |---|---|---| | **Metrics 指标** | 系统整体趋势:QPS、错误率、P95/P99 延迟、队列深度 | 便宜、适合告警,但细节少 | | **Logs 日志** | 单个事件细节:订单为什么失败、鉴权为什么拒绝 | 细节多,但成本和噪音高 | | **Traces 链路追踪** | 一个请求跨服务的完整路径和每跳耗时 | 对分布式定位很强,但采样和上下文传播要设计 | OpenTelemetry / OTel(开放遥测标准与工具集)的价值在这里:它尽量把埋点和后端存储/查询解耦。你先用相对标准的方式生成遥测数据,以后后端从开源换到商业、从 A 厂商换到 B 厂商,迁移成本会小一些。 > **判断要点:**工具可以换,埋点习惯很难换。先把 trace id、结构化日志、关键业务指标这些「证据格式」打好,比先纠结大屏配色重要。 --- ## 三、可靠性不止看见,还要收场 很多团队买了可观测性工具,可靠性却没有变好,原因是: > 看见问题不等于能处理问题。 可靠性还需要响应链路: ``` 告警(Alerting) → 只叫醒能行动的人 值班(On-call) → 明确谁负责响应 Runbook(处置手册) → 告警来了第一步做什么 事故管理(Incident) → 分级、沟通、升级、复盘 发布治理 → 灰度、回滚、功能开关、熔断降级 ``` 所以第 32 章的选型不能只选「监控后端」,还要选**事故流程**。严肃系统至少要做到:告警可行动、服务有 owner(负责人)、关键告警有 runbook、事故后有复盘,复盘产出能回写到告警、代码或平台。 --- ## 四、告警:少而准,别制造噪音 低质量告警长这样: - CPU 高了。 - 内存高了。 - 磁盘用了 80%。 - 线程数变多了。 这些都是线索,不一定是事故。更好的告警围绕用户症状: | 用户症状 | 可行动告警 | |---|---| | 登录失败 | 登录成功率低于 SLO | | 下单慢 | 下单 P99 延迟连续 10 分钟超过目标 | | 消息发不出去 | 队列积压导致通知延迟超过承诺 | | 搜索不可用 | 搜索错误率和空结果率异常 | > **架构智慧:**别告警「机器不舒服」,要告警「用户正在受伤」。否则你会养出一套噪音系统,最后大家对真正事故也麻木。 --- ## 五、按成熟度选栈 | 阶段 | 倾向的栈 | 目标 | |---|---|---| | **MVP / 小团队** | 托管日志 + 错误追踪 + uptime 探测 + 少量核心指标 | 出事有人知道,能找到大概原因 | | **标准线上系统** | 指标 + 结构化日志 + 关键链路追踪 + SLO 告警 + runbook | 用户受影响时能定位、能响应、能回滚 | | **多服务 / 多团队** | OpenTelemetry + 指标/日志/链路统一关联 + 服务目录 + owner | 跨团队协作时不靠喊人破案 | | **高可靠关键链路** | SLO 平台 + 金丝雀分析 + 合成监控 + 事故演练 | 提前发现退化,限制爆炸半径,缩短 MTTR(平均恢复时间) | 注意成本:日志全量保留、trace 全量采样、高基数标签(取值种类极多的标签)都会迅速烧钱。可观测性不是采得越多越好,而是**为关键问题留下足够证据**。 --- ## 六、选型表 | 场景信号 | 更倾向的栈 | 选它的理由 | 警惕代价 | |---|---|---|---| | MVP / 内部工具 | 托管日志 + 错误追踪 + uptime 探测 | 快速闭环,出事能知道 | 不要一开始自建全套平台 | | 标准 Web 应用 | 指标监控 + 结构化日志 + SLO 告警 | 能看错误率、延迟、核心业务是否受影响 | 告警规则要少而准 | | 微服务 / 多团队 | OTel + Metrics/Logs/Traces 统一关联 | 跨服务定位问题,减少找人时间 | 埋点规范、采样、owner 维护都要治理 | | 支付 / 交易 / 核心链路 | SLO + 错误预算 + 金丝雀发布 + runbook + 事故管理 | 把可靠性变成可度量、可响应、可复盘 | 成本高,需要值班纪律和组织承诺 | | 数据量巨大 / 成本敏感 | 分层存储 + 采样 + 聚合指标 + 限制高基数标签 | 保留排障能力,控制账单 | 采样过度会丢关键证据 | --- ## 🎯 随堂检验 --- ## 本章小结 - **可观测性不是大屏**:它是系统留下足够证据,让你能追问未知问题。 - **从 SLO 倒推技术栈**:先定义用户眼里的好,再决定指标、日志、链路和告警。 - **三类证据各有用处**:Metrics 看趋势和告警,Logs 看细节,Traces 看跨服务路径。 - **可靠性还需要响应流程**:告警、值班、runbook、事故分级、复盘、回滚,缺一块都会断。 - **按成熟度投入**:小团队先闭环,大系统再统一标准和平台化;采集不是越多越好,证据要够用且付得起。 > **承上启下**:通用系统需要看得见和救得回,AI 系统还多了模型、上下文、检索质量、成本和评测这些新变量。下一章 [33 · AI 基础设施技术栈选型](33-AI基础设施技术栈选型.md),我们把技术栈选型推进到 LLM 时代。 --- ## 相关链接 - 方法论本体:[06 · 质量属性与取舍](06-质量属性与取舍.md) · [12 · 为失败而设计](12-为失败而设计.md) · [13 · 规模化的力学](13-规模化的力学.md) - AI 协同:[24 · 审查清单](24-审查清单AI产出默认缺什么.md) · [25 · 评测驱动](25-评测驱动把够好写进架构.md) - 案例对照:[StarArena](../cases/stararena-ticketing/README.md) · [SyncRoom](../cases/syncroom-collaboration/README.md) · [CodePilot](../cases/codepilot-agent/README.md)