OTel可观测租户隔离链路追踪 - 第1节

1.1 什么是可观测性

可观测性(Observability)源自控制理论,在云原生语境下,指通过系统外部输出推断内部状态的能力。一个系统是否可观测,取决于运维人员能否在不发布新代码的前提下,回答“系统为什么现在处于这个状态”。

在分布式架构中,可观测性通常由三大支柱构成:

支柱 核心作用 典型数据
指标(Metrics) 聚合统计,反映系统健康趋势 请求延迟 P99、CPU 使用率、错误率
日志(Logs) 离散事件记录,提供故障现场细节 错误堆栈、访问日志、审计记录
链路追踪(Traces) 端到端请求流,定位性能瓶颈与依赖关系 Span 树、调用耗时、上下游服务拓扑
核心观点:三大支柱并非孤立存在。可观测性的真正价值在于将指标、日志、追踪关联起来——例如从高延迟指标下钻到具体 Trace,再关联对应日志,形成完整的故障排查闭环。

1.2 为什么需要租户隔离

在 SaaS 或多业务线架构中,多个租户共享同一套基础设施和可观测性平台。如果没有隔离,会出现以下问题:

  • 数据泄露风险:租户 A 的调用链可能被租户 B 看到,违反合规要求。
  • 性能干扰:一个租户的突发流量导致全平台追踪采样率下降,影响其他租户。
  • 成本归属不清:无法区分每个租户产生的 Span 数量、存储用量和查询开销。
  • 告警噪音:全局告警规则无法适配不同租户的差异化阈值。

租户隔离的目标是在共享基础设施上实现逻辑隔离,确保每个租户只能访问自己的可观测性数据,同时保持平台的整体运维效率。

隔离粒度对比:
隔离方式 优点 缺点 适用场景
物理隔离(独立集群) 最强安全,无性能干扰 成本高,运维复杂 金融、医疗等强合规行业
逻辑隔离(标签/属性) 成本低,弹性好 需严格权限控制 大多数 SaaS 平台
混合隔离(物理+逻辑) 兼顾安全与成本 架构复杂度高 大型多租户平台

1.3 OTel 在链路追踪中的角色

OpenTelemetry(OTel)是 CNCF 的毕业项目,提供一套厂商中立的数据采集、处理、导出标准。在链路追踪领域,OTel 扮演以下关键角色:

  1. 统一数据模型:定义 Span、Trace、SpanContext 等核心结构,消除厂商锁定。
  2. 多语言 SDK:支持 Java、Go、Python、Node.js 等主流语言,自动或手动注入追踪上下文。
  3. 传播机制:通过 W3C TraceContext 标准,在服务间传递 TraceId、SpanId 和租户属性。
  4. 处理器与导出器:支持采样、过滤、批处理,并将数据导出到 Jaeger、Zipkin、Prometheus 等后端。
  5. 资源与属性:通过 Resource 和 Span Attributes 携带租户标识,实现数据隔离。

下图展示了 OTel 在典型微服务链路追踪中的位置:

OTel 在链路追踪中的角色 OTel 链路追踪数据流与租户隔离 服务 A (Java SDK) 服务 B (Go SDK) 服务 C (Python SDK) OTel Collector 批处理 / 采样 / 租户路由 租户 A 存储 (Jaeger / ES) 租户 B 存储 (Jaeger / ES) 租户 C 存储 (Jaeger / ES) 租户属性注入 tenant_id=xxx 说明:OTel SDK 自动注入 TraceContext 和租户属性,Collector 根据 tenant_id 路由到对应后端存储。
关键设计原则:租户隔离不是 OTel 的默认行为,而是通过 Resource 属性、Span Attributes 和 Collector 配置组合实现的。本课程后续章节将逐一拆解这些配置细节。

1.4 课程核心目标

通过本课程,你将掌握以下能力:

  • 理解 OTel 链路追踪的数据模型与传播机制
  • 设计多租户场景下的 Trace 属性规范
  • 配置 OTel Collector 实现租户级数据路由与采样
  • 在 Jaeger、Grafana Tempo 等后端实现租户隔离查询
  • 构建跨服务、跨租户的端到端追踪可观测性