← 返回题目列表

OpenTelemetry 是什么?它解决了什么问题?

高频 中等 第 10 / 26 题 更新于 2026/07/28
OpenTelemetry可观测性链路追踪标准化

简化版

OpenTelemetry 是一个可观测性标准和工具集合,用于统一生成、采集和导出 Trace、Metrics、Logs 数据。它提供 SDK、自动埋点、上下文传播规范和 Collector,让应用不用绑定某个特定厂商或后端。

它解决的是可观测性接入标准不统一的问题。应用可以用 OpenTelemetry 采集数据,再导出到 Jaeger、Prometheus、Tempo、Grafana、云厂商平台等不同后端。

详细版

过去不同追踪系统、监控系统和日志系统都有自己的 SDK、数据模型和传播格式。应用一旦接入某个厂商,迁移成本很高。OpenTelemetry 试图提供统一标准,让埋点和后端解耦。

OpenTelemetry 包括 API、SDK、自动 instrumentation、语义约定、上下文传播和 Collector。API 定义如何创建 Span 和指标;SDK 负责采样和导出;自动埋点可以无侵入采集 HTTP、RPC、数据库等调用;Collector 负责接收、处理、转换和转发遥测数据。

面试中可以强调:OpenTelemetry 不是单纯的追踪后端,它本身更像标准和采集管道。真正的存储、查询和展示通常由 Jaeger、Prometheus、Tempo、Grafana 或商业平台完成。

完整版教学

一、为什么需要 OpenTelemetry

可观测性系统过去非常碎片化。Zipkin 有自己的模型,Jaeger 有自己的客户端,Prometheus 主要关注指标,云厂商也有自己的 Agent 和 SDK。

如果业务代码直接依赖某个厂商 SDK,未来迁移或多后端输出会很麻烦。OpenTelemetry 的目标是把“如何产生遥测数据”和“数据存到哪里”分开。

二、OpenTelemetry 采集哪些数据

OpenTelemetry 主要覆盖三类遥测数据:

  1. Traces:分布式链路追踪。
  2. Metrics:指标。
  3. Logs:日志信号和日志关联能力。

其中 Trace 是最成熟、最常被面试问到的部分。Metrics 和 Logs 也在生态中不断完善。

三、API 和 SDK 的区别

API 是业务代码调用的抽象接口,比如创建 Span、记录属性。SDK 是具体实现,负责采样、处理、导出。

这种分层让库作者可以只依赖 API,不强制绑定某个 SDK。应用运行时再选择具体 SDK 和导出器。

这和日志门面有点像:代码面向抽象,运行时接具体实现。

四、自动埋点的价值

手动埋点很灵活,但容易漏。自动埋点可以在 HTTP 框架、RPC 客户端、数据库驱动、消息队列客户端等层面自动创建 Span。

比如 Java Agent 可以在不改业务代码的情况下采集 Spring MVC、RestTemplate、JDBC、Redis、Kafka 等调用。这对老系统接入可观测性非常有价值。

但自动埋点不是万能的。业务关键步骤、业务错误码、订单号脱敏标签等仍然需要手动补充。

五、Collector 的作用

Collector 是 OpenTelemetry 架构里的中间层。应用把数据发给 Collector,Collector 再做过滤、采样、批量、转换和转发。

好处包括:

  1. 业务应用不直接依赖后端地址。
  2. 可以统一做采样和脱敏。
  3. 可以同时导出到多个后端。
  4. 后端迁移时减少业务改动。
  5. 降低业务进程导出压力。

Collector 常以 Agent 或 Gateway 方式部署。

六、语义约定和上下文传播

OpenTelemetry 定义了常见语义字段,比如 HTTP 方法、状态码、数据库系统、消息队列 topic 等。字段统一后,不同语言和框架采集的数据才能被统一查询和展示。

它也支持标准上下文传播,例如 W3C Trace Context。这样 Java 服务调用 Go 服务,再调用 Python 服务时,Trace 仍然可以串起来。

七、面试回答建议

回答时可以说:OpenTelemetry 是可观测性标准和工具集合,统一 Trace、Metrics、Logs 的采集、传播和导出;它通过 API/SDK、自动埋点和 Collector 解耦业务与后端;不是存储查询后端,通常要接 Jaeger、Prometheus、Tempo、Grafana 等。

如果能补充自动埋点和手动埋点的关系,会显得更落地。

八、常见追问和落地边界

面试官可能问 OpenTelemetry 是否替代 Prometheus 或 Jaeger。答案是否定的。OpenTelemetry 更偏采集标准、SDK、自动埋点和 Collector;Prometheus、Jaeger、Tempo、Grafana 等更多承担存储、查询和展示。它们是上下游关系,不是简单替代。

另一个落地边界是接入方式选择。新系统可以直接用 SDK 和语义约定,老系统可以先用 Agent 自动埋点快速覆盖,再逐步补手动业务 Span。不要一开始就追求完美,否则接入成本会过高。

九、常见误区与追问

这道题要紧扣「OpenTelemetry」本身回答,不能把它混成泛泛的可观测性套话。面试官通常会沿着“为什么需要、流程怎么走、失败怎么兜、代价是什么”继续追问,所以回答要覆盖日志、指标、追踪、上下文传播、采样、告警和排障闭环。

回答层次要讲清的内容容易漏掉的边界
核心结论OpenTelemetry 是统一采集日志、指标、追踪的开放标准和 SDK,负责生成、传播、处理和导出遥测数据不要停在名词解释
流程机制应用接入 SDK -> 自动或手动埋点 -> 传播上下文 -> 导出到 Collector -> 处理采样和属性 -> 写入后端查询分析要说清触发点、状态变化、确认点和失败兜底
工程取舍应用通过 OTel SDK 生成 Span,经 Collector 批量处理后导出到 Jaeger、Tempo、Prometheus 或商业 APM可观测性不能替代稳定性设计,它用额外采集、存储和分析成本换更快定位问题
OpenTelemetry 面试拆解:
1. 应用接入 SDK
2. 自动或手动埋点
3. 传播上下文
4. 导出到 Collector
5. 处理采样和属性
6. 写入后端查询分析

记忆钩子:先给结论,再拆流程,再讲数字例子和失败边界;回答「OpenTelemetry」时要围绕题目问法收束,不要把相邻概念堆成一段没有重点的名词清单。

  • 误区:OpenTelemetry 是一个监控后端。 它主要是标准、SDK、Collector 和数据管道,不等同于存储查询后端。
  • 误区:接入 OTel 后不用设计指标。 自动埋点只能覆盖通用信息,业务指标仍要手动设计。
  • 误区:所有遥测数据都应该原样上报。 要采样、过滤敏感字段、控制基数和成本。
  • 追问:Collector 有什么用? 集中接收、处理、采样、转换和导出遥测数据。
  • 追问:自动埋点和手动埋点区别? 自动覆盖框架调用,手动补业务语义和关键阶段。
  • 追问:OTel 解决什么痛点? 减少厂商锁定,统一不同语言和组件的可观测数据模型。

十、加强记忆

OpenTelemetry 可以记成“可观测性的通用插头和转换器”。应用按统一插头输出数据,后面接 Jaeger、Prometheus、Grafana 或云平台都可以。

它解决的核心问题是标准化和解耦。