第 6 部分导论 · OpenTelemetry 与 Collector

OTel 最大的价值不是任何一个软件,而是「标准」——它让埋点和后端解耦。这一章讲清 OTel 的三层(标准/SDK/Collector)、Collector 存在的 N×M 理由,以及它和 Prometheus 是什么关系(不是竞品)。

作者 David更新于 第 37 篇(共 52 篇)

第 6 部分导论 · OpenTelemetry 与 Collector

Prometheus 那条线讲完了。现在换主角:OpenTelemetry。

但开始前必须先破除一个极常见的混淆。

OTel 不是一个软件

“我们上了 OpenTelemetry”这句话,几乎总是含糊的——因为 OTel 是三层东西**,说的人往往指其中一层。**

层是什么形态
① 标准三大支柱的数据模型 + 语义约定 + 传输协议(OTLP)纸面规范
② SDK各语言的埋点库(Java/Go/Python/...)你 import 的库
③ Collector独立进程,接收/加工/导出一个二进制

本部分读的源码是 ③ Collector(opentelemetry-collector-v0.156.0),但你必须知道:OTel 最大的价值其实是 ①。

最大的价值:标准

OTel 真正解决的问题是:埋点和后端的耦合。

OTel 之前的世界:

你用 Jaeger  → 代码里 import jaeger-client,按 Jaeger 的 API 埋点
想换 Zipkin? → 改所有埋点代码
想换某云厂商? → 再改一遍

埋点是最贵的投资(它散布在你所有业务代码里、几百上千处),而它被锁死在一个后端上。换后端 = 重新埋点 = 没人愿意做 = 厂商锁定。

OTel 之后:

代码里 import OTel SDK,按标准埋点(一次)
想换后端? → 改一行配置(改 exporter)

埋点这笔投资,和后端解耦了。 这是个巨大的转变——它把可观测性后端从“一辈子的婚姻”变成了“可以随时换的供应商”。

语义约定(semantic conventions)是标准里被低估的一半: 它规定了“HTTP 请求该用哪些属性名”(http.request.method 而不是 httpMethod/method/http_verb)。没有它,即使数据格式统一了,各家吐出的字段名还是五花八门,照样没法通用分析。 这和 Prometheus 的命名规范是同一类东西——约定比机制更难,但更有价值。

Collector 为什么存在:N×M → N+M

Collector 解决的是个朴素的工程问题:

没有 Collector:
  N 个数据源 × M 个后端 = N×M 种对接
  (每个应用都要知道所有后端的地址、认证、格式)

有 Collector:
  N 个源 → Collector → M 个后端 = N+M

但“减少对接”只是表面收益。Collector 真正的价值在于它是一个可以插手的地方:

  • 加工数据 —— 脱敏(去掉手机号)、改标签、采样、丢弃无用数据。这些事在应用里做要改所有应用,在 Collector 里做改一处。
  • 批量与重试 —— 应用只管把数据吐给本地 Collector(极快),由 Collector 负责批量、压缩、重试、缓冲。应用不用关心后端慢不慢。
  • 解耦运维 —— 后端要换、要加一个、要做灰度?改 Collector 配置,应用零改动、零重启。
  • 统一治理 —— 想给所有数据加个 env=prod 标签?一处配置。

一句话:Collector 是可观测性数据的“网关”——和 API 网关的价值主张几乎一模一样(集中处理横切关注点)。

它和 Prometheus 是什么关系

这是最常见的问题:“有了 OTel,还要 Prometheus 吗?”

它们不是竞品,是链条上的不同段:

图表加载中…

典型的现代架构是两者配合:OTel SDK 埋点 → Collector 加工 → remote write 到 Prometheus/Mimir 存储 → PromQL 查询 → Grafana 展示。

有意思的是它们互相“抄”了对方:

两个生态在互相靠拢——这对用户是好事:你不用二选一。指标的事实标准还是 Prometheus 的模型和 PromQL(第 0 部分说过),而 OTel 提供了统一的埋点和运输。

这一部分怎么安排

小结与下一章

OTel 是三层:标准(数据模型 + 语义约定 + OTLP)、SDK(各语言埋点库)、Collector(独立进程)——“上了 OTel”这句话必须说清是哪层。最大的价值是标准:它把埋点(最贵的投资,散布在几百处业务代码里)和后端解耦,从“一辈子的婚姻”变成“可换的供应商”;语义约定是被低估的一半(统一字段名,否则格式统一了也没法通用分析)。Collector 把 N×M 变 N+M,但真正的价值是“它是一个可以插手的地方”——脱敏 / 改标签 / 采样 / 批量重试 / 换后端零改应用,本质是可观测性数据的网关。它和 Prometheus 不是竞品:OTel 管产生与运输、Prometheus 管存储与查询,典型架构是两者配合;而且两个生态在互相靠拢(Collector 有 prometheus receiver,Prometheus 3.x 原生收 OTLP)。

Collector 的内部长什么样?下一章打开它——你会发现管道并不是一条“线”。👉 Collector 架构。

参考资料

  • [1] OpenTelemetry 官方文档:Specification、Semantic Conventions、OTLP。
  • [2] OTel Collector 源码 docs/vision.md、README.md、distributions.yaml。
  • [3] 关联三大支柱、三个主角、Prometheus 架构。

本页目录