可观测性信号采集
§1摘要与结论
通过 traces、metrics、logs 等信号从系统外部推断内部状态,以回答未知未知与为何发生;工程界习称三支柱,其价值关键在于信号可关联而非数量多少。
别名:Observability Signals、可观测性三支柱、metrics/logs/traces、分布式追踪、OpenTelemetry | 英文:Observability Signals and Instrumentation | 类型:技术 / practice
§2局部关系图
§3原理 · 为什么
可观测性不是把尽可能多的数据采集下来,而是让系统暴露足够信号以回答事先未预设的问题,即从系统外部输出推断其内部状态的能力。它与传统监控的区别在于问题类型:监控回答已知指标当前是否正常,可观测性回答未知未知以及为什么会这样。前提是应用已被正确埋点(instrumentation),否则任何后端都无法凭空还原系统行为。工程界把指标(metrics)、日志(logs)、追踪(traces)习称为三支柱,作为组织信号采集的通行框架;但真正决定可观测性上限的是信号之间能否被关联起来并支持高基数查询,而非采集了多少类信号。信号越能相互印证,越能从症状快速下钻到根因。可观测性的成熟度还体现在能否在事故中快速回答未曾预设的问题,这依赖于数据模型、关联标识与查询能力三者的配合;埋点应覆盖关键路径与错误分支,而非平均用力。
§4机制 · 如何运作
追踪(trace)由若干 span 组成,记录单个请求在微服务或无服务器架构中跨服务传播的路径,root span 覆盖请求从始到终,子 span 表示请求内的各步骤,用于定位分布式性能问题的根因。指标(metrics)是一段时间内的数值聚合,写入与查询成本低,适合长期观测与告警,但会丢失单个请求的细节。日志(log)是带时间戳的消息,结构化后可携带丰富上下文,适合记录离散事件与错误细节。三类信号通过 trace_id、span_id 等关联标识相互连接:通常从指标发现异常,用追踪定位到具体的慢调用或失败调用,再下钻到日志查找根因。事件与剖析(profiles)等信号正在扩展这一体系。可关联、高基数、可查询是支撑这套下钻链路的关键属性;当同一请求跨越同步调用与异步消息时,还需保证上下文在边界处正确传递,否则调用链会在队列处断裂而不完整。
§5工程 · 怎么落地
统一采用 OpenTelemetry 的 SDK 与 Collector 做埋点、处理与导出,避免厂商锁定并降低多语言接入成本;为每个请求建立并跨服务传播 trace context;日志结构化并携带 trace_id/span_id,使日志可被追踪串联。延迟等指标使用百分位(如 p99、p99.9)而非均值,因为延迟呈长尾分布,均值会掩盖尾部。设计采样策略以控制成本:尾部采样保留错误与慢请求,头部采样控制总量,并对关键路径提高采样率。把 traces、metrics、logs 汇聚到能够相互关联查询的后端,并对关键信号建立告警。埋点应作为代码的一部分被评审与测试,而非事后补丁,且需关注其运行时开销。对跨服务的异步消息与后台任务,也应传递并延续 trace context,避免追踪在消息队列处断裂,造成调用链不完整。
§6权衡卡
全量采集的存储、带宽与费用高昂,采样虽能降低成本却可能丢失关键细节,须在覆盖率与成本之间权衡。
三支柱是工程口语而非 OpenTelemetry 官方术语(OTel 列 Traces/Metrics/Logs/Baggage),成熟实践还扩展出 profiles、RUM 等信号,过度纠结术语数量会偏离信号可关联这一重点。
此外,埋点带来运行时开销,海量但不可关联的数据只会增加噪声与查询成本,反而降低可观测性。
高基数指标(如按用户 ID、请求 ID 打标)成本极高,标签维度设计不当会迅速推高费用。
采集策略需要随系统规模与业务重要性动态调整,定期复核哪些信号真正被使用,淘汰长期无人查询的埋点以控制成本。
- 可观测性也无法替代良好的架构与测试:缺少边界清晰的系统,再多的信号也难以推断行为。
权衡原文仅按显式标记词归栏引用(收益 / 代价 / 反例),其余句子按原序列为「原文要点」;内容逐字引用未改写。
§7案例带
harness 源码架构解析
对 deepseek-harness 官方源码做分层解析:镜像官方架构文档,按九个层与九十余模块建立文档集群,产出跨层联动矩阵与七条关键路径,并钉住「模型可见即已记录」、能力缝三角等设计不变量。
去中心化聊天架构逆向
对一个仅有 58 份设计文档、尚未实现的开源去中心化聊天项目做架构逆向:从设计文本提炼 18 个模块及其依赖关系,重建模块依赖 DAG 与三条核心数据流 DAG,并输出全景理解与深度需求分析。
preset 通道耦合分析
对 harness「委派工具层→续用管理器→preset 服务→MCP 服务器」这条通道做耦合分析:识别契约、服务定位、数据契约、组合语义、路径与装配一致性六类耦合点,定位「静默丢弃特化」与「装配漂移」两处实质缝隙。
dsh 插件依赖增量定位
以官方插件 DAG 为蓝本,对一个官方清单之外的全新社区插件做功能定位与依赖位置增量分析,产出可下钻交互依赖图与多形态文档的源码级架构逆向案例。
Claude Code 架构逆向
以社区逆向源码、系统提示词与官方文档三源交叉验证,还原一个商业 Agent 的查询引擎、子Agent、工具与权限体系的逆向分析案例。
Open Code Review 图谱
对阿里开源 AI 代码审查 CLI 做源码级解析并构建「知识 + 实践资产 + AI 索引」三合一知识图谱的工程案例。
§8信源与核验
核验结论:OTel 官方列 Traces/Metrics/Logs/Baggage,并未使用三支柱措辞;三支柱是工程界通行口语,术语未统一 [VEN-026]
核验结论:价值在于信号可关联并回答未知未知,而非数据数量;不可关联的海量数据反而增加噪声与成本 [VEN-027]
§9原始关系清单
展开:本节点的全部原始关系边(7 条,含边 ID 与方向)
| 关系 | 方向 | 对端节点 | 说明 |
|---|---|---|---|
| 案例印证 | ← CAS-X-09 | harness 源码架构解析 E-24 | 印证:事件地图交叉核对声明点与派发点核验埋点 |
| 组合 | ← TEC-K-01 | 断路器与重试退避 E-870 | 熔断与重试事件需被可观测信号捕获 |
| 促成 | → TEC-K-03 | 服务等级目标与错误预算 E-865 | 可观测信号使 SLO 可度量 |
| 促成 | → TEC-K-04 | 混沌工程实践 E-866 | 可观测稳态为混沌实验提供判据 |
| 促成 | → TEC-K-05 | 无指责复盘实践 E-872 | 可观测信号是事故复盘的时间线证据 |
| 实现 | → MTH-K-03 | 四大黄金信号监控方法 E-859 | 四大黄金信号的采集与呈现 |
| 实现 | → MTH-K-04 | 可观测性信号关联方法 E-858 | 可观测信号关联方法的技术实现 |
附对照资源 · 12factor 子库
| 12factor 节点 | 关系 | 对照说明 |
|---|---|---|
| 日志 app-logs | 跨体系对照 | 日志即事件流,对应可观测性本质、黄金信号方法与信号采集技术 |
| 可观测性与错误可见性 t-observability | 跨体系对照 | 传统日志与 Agent 错误压缩共同指向可观测性与信号采集 |