OpenTelemetry 基础概念

什么是 OpenTelemetry

OpenTelemetry(简称 OTel)是一个开源的可观测性框架,旨在统一采集、处理和导出遥测数据。它由 CNCF(云原生计算基金会)孵化,是云原生生态中事实上的可观测性标准。OTel 提供了一组 API、SDK、Collector 和约定,帮助工程师从应用程序和基础设施中采集 Traces、Metrics 和 Logs,并将其发送到任意后端(如 Prometheus、Jaeger、Grafana、Datadog 等)。

核心价值:一次埋点,随处分析。OTel 解决了厂商锁定问题,让团队可以自由切换或同时使用多个可观测性平台。

三大信号(Traces / Metrics / Logs)

OTel 将可观测性数据归纳为三种信号,它们从不同维度描述系统状态,相互补充。

信号 描述 典型用途 示例
Traces 记录请求在分布式系统中的完整路径,包含 Span(操作单元)和 Span 间的父子关系。 定位请求延迟瓶颈、错误传播路径、服务依赖拓扑。 HTTP 请求从网关 → 用户服务 → 订单服务 → 数据库的完整链路。
Metrics 聚合后的数值型数据,描述系统在时间窗口内的状态或速率。 监控 CPU 使用率、请求 QPS、错误率、队列深度。 http.server.duration 的 P99 延迟。
Logs 带时间戳的结构化或非结构化文本记录,描述离散事件。 调试异常、审计、记录业务操作。 {"level":"error","msg":"connection timeout","service":"payment"}
信号关联:OTel 支持通过 TraceId、SpanId 将 Logs 与 Traces 关联,实现“从日志直接跳转到链路上下文”的排查体验。

三大信号关系图

三大信号关系图 Traces 请求链路 + Span Metrics 聚合数值 + 速率 Logs 事件 + 时间戳 信号关联机制 TraceId / SpanId 嵌入 Logs → 日志直接关联链路 Metrics 聚合来自 Traces 的延迟分布 → 快速发现异常

Collector 架构与组件

OTel Collector 是一个独立于语言 SDK 的代理/网关组件,负责接收、处理、导出遥测数据。它由三大核心组件构成:Receiver、Processor、Exporter,并通过 Pipeline 串联。

Collector 核心组件

组件 职责 常见实现
Receiver 接收来自 SDK 或其他数据源的遥测数据,支持多种协议。 otlp、jaeger、prometheus、zipkin
Processor 对数据进行过滤、采样、批处理、属性修改等中间处理。 batch、filter、attributes、memory_limiter
Exporter 将处理后的数据发送到一个或多个后端系统。 otlp、prometheus、logging、datadog

Collector 架构图

OpenTelemetry Collector 架构 应用 SDK OTLP / HTTP 其他系统 Jaeger / Prom OTel Collector Receiver Processor Exporter 后端 A Prometheus 后端 B Jaeger / Loki Pipeline 工作流 Receiver → Processor → Exporter,支持多 Pipeline 并行

Collector 部署模式

  • Agent 模式:在每个节点(K8s DaemonSet 或主机)上运行 Collector,就近采集数据,减少网络开销。
  • Gateway 模式:集中部署 Collector 集群,作为所有 Agent 的上游,统一进行数据过滤、采样、路由。
  • 混合模式:Agent 做轻量预处理,Gateway 做聚合和二次处理,适合大规模生产环境。
注意:在值班机器人场景中,建议使用 Agent 模式采集容器日志和指标,Gateway 模式负责跨服务 Trace 关联和事件触发规则判断。

Pipeline 配置示例

receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
      http:
        endpoint: 0.0.0.0:4318

processors:
  batch:
    timeout: 1s
    send_batch_size: 1024
  memory_limiter:
    check_interval: 1s
    limit_mib: 512

exporters:
  prometheus:
    endpoint: 0.0.0.0:8889
  logging:
    loglevel: debug

service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [memory_limiter, batch]
      exporters: [logging]
    metrics:
      receivers: [otlp]
      processors: [batch]
      exporters: [prometheus, logging]
关键点:Pipeline 是 Collector 的核心抽象,每个 Pipeline 独立处理一种信号(traces / metrics / logs),可以配置不同的 Receiver、Processor、Exporter 组合。