2. OpenTelemetry 架构:OTel Collector 架构、SDK 与 API、Exporters 与 Processors

OpenTelemetry(OTel)的架构设计遵循“数据产生 → 数据处理 → 数据导出”的管道模式。整个体系由 API、SDK、Collector 三大核心组件构成,并通过 Exporters 和 Processors 实现灵活的数据路由与变换。理解这一架构是进行 Mock 隔离测试的基础。

2.1 核心组件:API、SDK 与 Collector

OTel 将可观测性数据的生成与处理职责分离,形成清晰的层次结构:

组件 职责 Mock 隔离关注点
API 定义 Traces、Metrics、Logs 的数据模型与操作接口(如 Tracer、Meter)。 Mock 时需模拟 API 接口行为,不依赖真实 SDK 实现。
SDK 实现 API 接口,负责采样、上下文传播、Span 生命周期管理。 Mock 测试中可替换 SDK 的 Sampler、SpanProcessor 等组件。
Collector 独立进程,接收、处理、导出遥测数据,支持多种协议(gRPC/HTTP)。 Mock 测试中可模拟 Collector 的接收端与导出端,验证管道行为。
Mock 隔离要点: 在单元测试中,优先 Mock API 层;在集成测试中,Mock Collector 的接收端点;在端到端测试中,使用 Mock Exporter 验证数据完整性。

2.2 OTel Collector 架构详解

OTel Collector 是一个可插拔的管道引擎,其内部架构分为三个主要阶段:Receivers → Processors → Exporters。数据流通过 Pipelines 串联,支持多信号类型(traces、metrics、logs)的独立配置。

OTel Collector 管道架构 应用 / SDK Receivers OTLP / Jaeger / Prometheus Processors Batch / Filter Attributes / Sampler Memory Limiter Exporters OTLP / Prometheus / Console 后端 管道配置示例(YAML) service: pipelines: traces: receivers: [otlp] processors: [batch, memory_limiter] exporters: [otlp, logging]

2.3 SDK 与 API 的协作机制

SDK 是 API 的具体实现,负责将应用中的遥测信号转换为 OTel 标准格式。其内部关键组件包括:

  • TracerProvider / MeterProvider:管理 Tracer 和 Meter 实例,是 SDK 的入口点。
  • SpanProcessor:在 Span 开始/结束时触发回调,用于批处理、导出或 Mock 拦截。
  • Sampler:决定哪些 Span 被采样,Mock 时可替换为“全部采样”或“全部丢弃”。
  • Exporter:将数据发送到 Collector 或后端,Mock 时替换为 MemoryExporter 或 NoopExporter。
Mock 实践: 在测试中,通过 SpanProcessor 的 Mock 实现,可以捕获所有 Span 数据并断言其属性,而无需启动 Collector 或后端服务。

2.4 Exporters 与 Processors 详解

Exporters 负责将处理后的数据发送到目标后端(如 Jaeger、Prometheus、云服务)。Processors 在数据导出前执行变换、过滤、批处理等操作。两者共同决定了数据的最终形态与流向。

组件 常见类型 Mock 测试策略
Exporter OTLP Exporter、Console Exporter、Prometheus Exporter、Logging Exporter 使用 InMemoryExporter 或 Mock Exporter 验证数据格式与内容。
Processor Batch Processor、Attributes Processor、Filter Processor、Span Processor Mock Processor 可模拟数据变换逻辑,验证管道行为是否符合预期。
Mock 隔离测试中的 Exporter 与 Processor 被测应用 SDK Mock 区域 Mock SpanProcessor Mock Sampler Collector Mock Mock Receiver Mock Processor Mock Exporter 断言验证 Mock 隔离原则 1. 在 SDK 层 Mock SpanProcessor,捕获 Span 数据但不导出。 2. 在 Collector 层 Mock Exporter,验证管道处理逻辑,不依赖真实后端。

2.5 架构总结与 Mock 切入点

OTel 架构的层次化设计为 Mock 隔离测试提供了清晰的切入点:

  • API 层 Mock:适用于单元测试,模拟 Tracer/Meter 接口,不加载 SDK。
  • SDK 层 Mock:适用于集成测试,替换 SpanProcessor 或 Exporter,验证数据生成逻辑。
  • Collector 层 Mock:适用于端到端测试,模拟 Receiver 或 Exporter,验证管道配置与数据处理流程。
注意: 在 Mock 测试中,务必确保 Mock 组件的行为与真实组件在关键路径上一致(如数据格式、错误处理),否则 Mock 测试可能掩盖生产环境中的真实问题。