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 关联,实现“从日志直接跳转到链路上下文”的排查体验。
三大信号关系图
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 架构图
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 组合。