什么是 OpenTelemetry?
OpenTelemetry 是一个开源可观测性框架,提供统一的 API、SDK 和工具集,用于从分布式系统中生成、收集和导出遥测数据(链路追踪、指标和日志),帮助开发者监控和排查应用程序问题。
快速了解
| 全称 | OpenTelemetry 开源可观测性框架 |
|---|---|
| 创建时间 | OpenTelemetry 于 2019 年由 OpenTracing 和 OpenCensus 项目合并而成 |
| 规范文档 | 官方规范 |
工作原理
OpenTelemetry(通常缩写为 OTel)是由云原生计算基金会(CNCF)托管的厂商中立开源可观测性框架。它提供了标准化的方式来对应用程序和基础设施进行埋点,以收集遥测数据——链路追踪、指标和日志——不受后端可观测性平台的限制。在 OpenTelemetry 出现之前,开发者需要在 OpenTracing 和 OpenCensus 等竞争标准之间做选择,导致厂商锁定和碎片化的埋点方案。OpenTelemetry 将这些项目合并为一个统一的综合标准。该框架支持流行库和框架的自动埋点、通过一致 API 的手动埋点,以及接收、处理和导出数据到 Jaeger、Prometheus、Grafana 和商业 APM 工具等各种后端的 Collector 组件。
主要特点
- 厂商中立的遥测数据收集和导出标准
- 支持可观测性三大支柱:链路追踪、指标和日志
- 提供自动埋点和手动埋点两种方式
- 提供 Go、Java、Python、JavaScript、.NET 等语言的 SDK
- Collector 组件作为代理接收、处理和路由数据
- 上下文传播实现跨服务边界的分布式追踪
常见用途
- 分布式追踪:跟踪请求在微服务间的路径,识别延迟瓶颈
- 应用性能监控:收集响应时间、错误率和吞吐量等指标
- 日志关联:将日志与特定的链路和 Span 关联,实现上下文化调试
- 基础设施监控:从容器、主机和云服务收集系统级指标
- SLO 追踪:使用标准化遥测数据定义和监控服务级别目标
- 迁移灵活性:在不重新埋点的情况下切换可观测性后端
示例
Loading code...常见问题
OpenTelemetry 和 OpenTracing 有什么区别?
OpenTelemetry 是 OpenTracing(和 OpenCensus)的继任者。OpenTracing 只提供追踪 API 规范,而 OpenTelemetry 提供覆盖链路追踪、指标和日志的完整可观测性框架,包含完整的 SDK、自动埋点和 Collector 组件。OpenTracing 已归档,所有开发工作已转移到 OpenTelemetry。
OpenTelemetry 中可观测性的三大支柱是什么?
三大支柱是链路追踪(记录请求在分布式系统中的路径)、指标(随时间变化的系统行为数值度量,如延迟、错误率和吞吐量)和日志(带时间戳的离散事件文本记录)。OpenTelemetry 为三者提供统一的 API,并通过上下文传播将它们关联起来。
使用 OpenTelemetry 需要修改代码吗?
不一定。OpenTelemetry 为许多流行的框架和库(Express、Spring、Django 等)提供自动埋点,只需极少的代码改动——通常只需添加一个配置文件。对于自定义业务逻辑的埋点,则需要使用手动 API 在代码的特定位置创建 Span 和记录指标。
什么是 OpenTelemetry Collector?
Collector 是一个厂商无关的代理,用于接收遥测数据、处理数据(过滤、批处理、丰富)并将其导出到一个或多个后端。它将埋点与后端选择解耦,允许在不修改应用代码的情况下切换可观测性平台。可以作为 Sidecar、Daemon 或独立服务运行。
OpenTelemetry 可以用于生产环境吗?
可以。OpenTelemetry 的链路追踪和指标在大多数语言 SDK 中已达到稳定状态,可用于生产环境。日志信号较晚达到稳定。主要云厂商(AWS、GCP、Azure)和可观测性供应商(Datadog、New Relic、Grafana)都完全支持 OpenTelemetry,使其成为遥测收集的行业标准。